전체 글 14

장고(Django)에서 datetime 객체를 조작할 때 유의할 점. (UTC 시간대를 로컬 타임존으로 정확하게 변환하기)

datetime 객체를 다루는 과정에서 타임존을 신경 쓰지 않으면, 날짜가 불일치하는 등의 문제가 발생할 수 있다. 날짜 객체들이 사용하기 어려운 건 아닌데, 소홀히 하기 쉬워서 오류가 발생하기 쉬운 것 같다. 이번 포스트에서는 데이터베이스에 저장된 UTC 시간을 가져와서 사용할 때 주의해야 할 사항을 정리해 보겠다. [Prerequisite]Naive & Aware datetime object - naive : datetime object에 tzinfo(타임존 정보)가 없는 datetime 객체- aware: datetime object에 tzinfo(타임존 정보)가 있는 datetime 객체  Django 프로젝트에서는 아래와 같이 세팅 파일에 USE_TZ = True로 설정하면, 모든 datetim..

Django 2024.08.14

장고에서 auto_now_add=True 인 필드 값을 커스텀 값으로 넣고 싶을 때

장고에서 모델을 정의할 때 date나 datetime 필드인 경우에 auto_now_add=True 옵션을 주는 경우가 많다. 이 옵션은 object 가 최초로 생성될 때 자동으로 해당 필드를 현재시각(날짜)로 세팅해준다. 그런데 이 값은 내가 원하는 값으로 오버라이드 할 수가 없기 때문에, 만약 객체 생성 시에 원하는 다른 값을 넣어준다면 무시된다. 그래서 만약에 테스트나 다른 이유로 auto_now_add=True 인 필드에 커스텀 값을 넣어주어야 한다면, 생성 후에 save() 를 통해 값을 업데이트 해주는 것이 간편하다. (나는 테스트 때문에 객체의 created_at 필드를 마치 과거에 생성된 것 처럼 만들어야 해서 이 방법을 사용했다) auto_now_add 옵션은 처음 생성될 때만 그때의 시..

Django 2024.08.13

큰 숫자를 사용할 때 읽기 쉽게 언더바 (_) 사용하기

Underscores in Numeric Literals 파이썬 3.6 부터 새로 추가된 Underscores in Numeric Literals 기능을 소개하고자 한다 (https://peps.python.org/pep-0515/ ) 아주 간단한 기능인데, 쉽게 말하면 긴 숫자를 적을 때 콤마 부분을 언더바로 대신할 수 있는 기능이다. 예를 들어 1000000 같은 경우, 1_000_000 으로 표현할 수 있다. 예시) 참고로 언더바는 인터프리터에서 마지막 값을 저장하고 싶을 때 사용할 수도 있다.

파이썬 2022.08.20

파이썬 dataclass란? (@dataclass, 데이터클래스)

dataclass란? 파이썬 3.7부터 dataclass라는 모듈이 추가되었다. 말 그대로 데이터를 담는 클래스이고, import 후에 @dataclass 라는 데코레이터를 사용하면 된다. 기존의 방식으로 클래스를 사용하는 것과 비교했을 때, dataclass가 가지는 몇 가지 장점들이 있다. 이번 포스트에서는 dataclass의 사용법과 편리한 점들을 정리해보겠다. dataclass 사용법 - 아이스크림 정보를 담는 클래스를 예시로 기존의 클래스와 데이터클래스를 비교해보자. 그냥 클래스를 사용해서 아이스크림을 만들 때: import random import string def generate_id() -> str: return "".join(random.choices(string.ascii_upperc..

파이썬 2022.06.06

파이썬 Global Interpreter Lock (GIL) - 1

GIL - GIL의 필요성 GIL의 필요성을 이해하려면 우선 스레드에 대해서 이해하고 있어야합니다. 스레드가 가지고 있는 어떤 특성 때문에 어떤 현상이 발생하고, 이 현상을 방지하기 위해 GIL이 도입되었기 때문입니다. 간단한 비유를 들어서 설명해보겠습니다. 위의 상황처럼 열 명의 사람들이 눈치게임을 하고 있습니다. 눈치게임은 말 그대로 눈치를 보다가 동시에 같은 숫자를 외치는 사람이 있으면 그 둘이 걸리는 게임이죠. 원래 눈치게임은 게임을 끝내야 하니까 끝까지 동시에 번호를 외치는 사람이 없으면 번호를 안 외친 마지막 사람이 걸리는데 이런 룰이 없이, 10명이 아무도 겹치지 않고 끝까지 번호를 각각 외치면 되는 게임이라고 생각해봅시다! 이 게임이 무리없이 잘 돌아갈까요? 번호를 외칠 순서도 정해져있지 ..

파이썬 2022.05.01

파이썬) 스택으로 큐 구현하기 (Queue with stack)

스택 두 개로 큐를 구현해보자. 그 뭐더라.. 구현하다보니 그 게임이 생각난다. 버터링같은 거 요리조리 옮기는 거.. 그거 어렸을 때 중독돼서 진짜 빨리했었는데 ㅋㅋ class Queue: def __init__(self) -> None: # enqueue 할 때 쓸 스택 self.enqueue_stack = [] # dequeue 할 때 쓸 스택 self.dequeue_stack = [] def enqueue(self, data): # queue에 아이템 넣기 O(1) self.enqueue_stack.append(data) def dequeue(self): # 두 stack 모두 아이템이 하나도 없을 경우 raise Exception 하기 if len(self.enqueue_stack) == 0 an..

자료구조 2022.04.12

MSA 발표

회사 라이트닝 토크 시간에서 개발자분들+비개발자분들을 대상으로 마이크로서비스에 대해서 발표했다. 마이크로 서비스가 어떤 개념인지, 장점과 단점이 무엇인지, 타 회사의 사례는 어떤지(배달의민족), 우리 팀이 도입하려고 하는 이유가 무엇인지, 지금 어떻게 부분적으로 도입했는지에 대해 설명했다. 마이크로서비스에 대해서 발표한 이유는 사실, MSA의 필요성을 말하기 위해서 보다, 레거시 개선을 위한 시간 투자 라는 전사적인 공감대를 얻어내기 위해서였다. 다 그렇겠지만 지금은 항상 이 기능 개발이 끝나면 다음 새 기능을 개발해야 한다. 몇 년 전부터 있던 레거시 때문에 효율적인 개발이 힘들어도 시간이 없으니 당장 대충 기능 개발을 해버리게 된다. 음.. 신기능을 빨리 빨리 개발해서 시장에서 앞서 나가야 하니까 충..

카테고리 없음 2022.04.11