“TypeError: can’t compare offset-naive and offset-aware datetimes” 에러 해결하기 (datetime 관련 모듈 제대로 알기)
·
Programming
Python에서의 “TypeError: can’t compare offset-naive and offset-aware datetimes” 에러 해결하기Python에서 시간 처리 시 자주 발생하는 TypeError: can’t compare offset-naive and offset-aware datetimes 에러는 특히 타임존을 고려해야 하는 애플리케이션에서 자주 나타난다.에러의 원인이 에러는 Python의 datetime 객체가 offset-naive와 offset-aware로 나뉘기 때문에 발생한다.두 객체 유형의 차이Offset-Naive: 타임존 정보가 포함되지 않은 datetime 객체로, datetime.now()로 생성된 객체는 기본적으로 offset-naive이다.Offset-Aware:..
Django ORM 성능 최적화 N+1 문제 해결
·
Programming
Query 개선의 목적 백엔드 개발자의 채용 공고에 종종 쿼리 튜닝이 들어가 있다. 결국 한 API가 실행될 때 몇 개의 Query를 날리느냐 ( = DB hit를 몇 번 치느냐)는 성능 향상으로 직결되는 매우 중요한 문제인 것이다. N+1 문제란? 오늘 살펴볼 N+1 문제는 Djnago의 ORM과 같은 ORM(Object-Relational Mapping)으로 작업할 때 발생할 수 있는 성능 문제다. 각 객체에 대해 검색하려고 할 때 관련된 다른 Table(=collection)까지 검색이 필요한 경우에 발생한다. 이 작업을 비효율적으로 수행하면 데이터베이스에 대해 N+1 Query를 실행하게 된다. 여기서 N은 해당 객체의 수이다. 이로 인한 성능 저하는 대규모 데이터를 세트로 작업하는 경우 애플리케..
백엔드 개발자, 첫 회사를 떠나며 늦은 2022년 회고록
·
Episode
이번 글로 2022년 회고록 막차에 탑승해 보려 한다. 주로 내 일상이나 감정보다는 기술적인 내용만을 적다보니 지금 이 순간이 괜스레 부끄럽지만 새로운 변화를 앞두고 두렵고 설레는 지금의 내 감정도 글로 남겨보자! 새해를 퇴사로 시작하게 되다니 21년 9월 23일에 입사해 이달 말 퇴사를 앞두고있다. 지난달 퇴사 얘기를 꺼내기까지 하루에도 수십 번씩 내 선택에 의문을 품고 자신을 몰아세우기도 하며 참 많이 힘들어했는데 인사팀장님과의 면담까지 마친 지금은 오히려 마음이 편하다. 인생의 매 순간이 선택이라는 말이 깊게 와닿는 요즘이다. 다양한 이유로 퇴사를 결정하겠지만 난 큰 한방이 있었다. 회사 내 조직이 개편되면서 앞으로 웹 개발이 아닌 다른 업무(다른 회사의 제품을 판매 및 구축)를 해야 하는 상황이 ..
[CS] 객체지향 OOP 개념 제대로 알기
·
Programming
객체지향 (OOP) 프로그램을 실제 세상에 가깝게 모델링하는 기법 데이터를 추상화시켜 속성과 행위를 가진 객체로 만들고, 그 객체 간의 상호작용을 통해 로직을 구현하는 프로그래밍 방법 코드 중복을 방지하고 재사용성을 높임 객체지향(OOP) 원칙 캡슐화 추상화 상속 다형성 클래스 (Class) 특별한 데이터와 메서드의 집합 설계도(틀) 메모리상에 올라가지 않음 객체 (Object) 하나의 class로 만들어진 여러 instance(object)는 각각 독립적이다.
[Python] 클래스 & 메소드
·
Programming
아래와 같이 차량의 정보를 관리해야하는 경우 우리는 여러 방법을 사용할 수 있다. 대표적인 파이썬의 자료구죠인 리스트, 딕셔너리를 통한 관리를 알아보고 어떤 단점이 있는지 클래스를 사용하면 어떻게 보완할 수 있는지 직접 구현해보자. 변수에 할당하여 관리 직관적이고 수정이 쉽지만 차량이 많아질수록 더 많은 변수를 만들어 관리해야하는 불편함이 있다. (=하드코딩) # 차량1 car_company_1 = 'Ferrari' car_detail_1 = [ {'color': 'White'}, {'horsepower': 400}, {'price': 8000} ] # 차량2 car_company_2 = 'Bmw' car_detail_2 = [ {'color': 'Black'}, {'horsepower': 270}, {..
[CS] 프로세스 vs 쓰레드 정리
·
Programming
프로세스(Process) 프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다. 운영체제에서 할당 받는 자원 단위( = 실행 중인 프로그램) CPU 동작 시간 주소 공간 (각 프로세스는 별도의 주소 공간에서 실행된다) Code, Data, Stack, Heap의 구조로 되어있는 독립적 메모리 영역 할당 받는 자원은 다음과 같다. 최소 1개의 메인 스레드를 보유한다. 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을(Context Switching)사용해야 한다. 파이프, 파일 소켓 등을 사용 스레드(Thread) “프로세스 내에서 실행되는 여러 흐름의 단위” 프로세스가 할당 받은 자원을 이용하는 실행 단위다. 스레드는 프로세스 내에서 Stack만 별도로 할당 받고, 나머지 Code, D..
[Python] Hangman 게임 만들어 보기
·
Programming
Python Level 1에서 배운 것들을 총동원해 행맨 게임 만들기! import time # 처음 인사 name = input("What is your name?") print("Hi," + name + ". Let's Play Hangman!") time.sleep(1) print("Start Loading...") time.sleep(0.5) # 정답 word = "python" # 추측 단어 guesses = "" # 기회 turns = 10 # 기화가 남아 있을 경우 while turns > 0: # 실패 횟수 failed = 0 # 정답 단어 반복 for char in word: # 정답 단어 내에 추측 문자가 포함 되어 있다면 if char in guesses: # 추측 단어 출력 prin..
[Python] 외장 함수 : External Functions
·
Programming
외장 함수 외장함수는 실제 프로그램 개발 중 자주 사용한다. sys, pickle, os, shutil, glod, temfile, time, random 등 다양한 외장 함수가 있다. sys 실행 관련 제어를 하는 외장 함수다. import sys print(sys.argv) >>> ['C:\\\\Users\\\\user\\\\바탕 화면\\\\workspace\\\\python\\\\python1\\\\chapter08-02.py'] # 강제 종료 sys.exit() # 파이썬 패키지 위치 sys.path Pickle 파일 쓰기 import pickle f = open("test.obj", 'wb') obj = {1: 'python', 2: 'study', 3: 'basic'} pickle.dump(o..
[Python] 내장 함수: Built-in Functions
·
Programming
Python의 내장 함수 python이 제공하는 내장 함수의 종류는 다양하다. 아래 링크를 통해 확인해보면 좋다, 외우려고 하기보다는 사용하다보면 자연스럽게 익혀지기 때문에 가볍게 읽는 것을 추천한다. https://docs.python.org/3/library/functions.html 자주 사용하는 내장 함수 정리 abs() : 절대값 abs_example = abs(-3) print(abs_example) # >>> 3 all() : iterable요소 검사(참,거짓으로 반환) 모두가 True일 경우 True 반환 print(all([1, 2, ''])) # >>> False any() : iterable요소 검사(참,거짓으로 반환) 하나라도 True가 있다면 True 반환 print(any([1,..
[Python] 예외처리는 필수
·
Programming
프로그래밍에서의 예외처리란? 프로그래밍에서의 예외란 우리가 작성한 코드에서 비정상적으로 발생하는 이벤트라고 말할 수 있다. 이러한 예외도 예측이 가능한 예외와 예측이 불가능한 예외로 나눌 수 있다. 예측 가능한 예외 로그인 처리 시 형식에 맞지 않는 이메일 값이 들어오는 경우 이름에 특수문자가 들어간 경우 예측 불가능한 예외 컴퓨터 메모리가 부족해서 생기는 이벤트 등의 OS에서 발생하는 문제 예외를 만났을 때 우리의 자세 예외는 반드시 처리해야하고, 로그 또한 반드시 남긴다! 문법적으로는 예외가 없지만, 코드 실행 프로세스(단계)발생하는 예외도 중요! 예외 종류 SyntaxError # 소괄호의 사용이 잘못된 경우 print('error')) # if문의 :가 빠지고 들여쓰기가 잘못 된 경우 if Tru..
[Python] Package란 무엇인가?
·
Programming
파이썬 패키지 : python package 패키지는 파이썬의 모듈로 구성되어 있는 하나의 모음집이다. 패키지 안의 __init__.py 파일은 python3.3 버전 이상의 경우 없어도 패키지로 인식하지만, 하위 호환을 위해 작성하는 것을 추천한다. 아래는 패키지를 import하여 사용하는 예제이다. import python1.sub.sub1.module1 import python1.sub.sub2.module2 # 예제 1 # 사용 python1.sub.sub1.module1.mod1_test1() python1.sub.sub1.module1.mod1_test2() python1.sub.sub2.module2.mod2_test1() python1.sub.sub2.module2.mod2_test2() ..
[Python] module
·
Programming
모듈이란? 함수, 변수, 클래스 등 파이썬 구성 요소 등을 모아 놓은 파일을 말한다. 파일의 이름은 모듈 이름에 확장자 .py 를 붙인다. 모듈 내에서, 모듈의 이름은 전역 변수 __name__ 으로 제공된다. 만약 math.py라는 모듈을 만들고, 아래와 같은 출력문을 실행하면 print(__name__) __math__ 가 출력된다. # math.py def add(x, y): return x + y def subtract(x, y): return x - y def multiply(x, y): return x * y def divide(x, y): return x / y def power(x, y): return x ** y print('-' * 15) print('called! inner!') pr..