Django timezone 문제 파헤치기
두줄요약
Django의 UTC 저장·조회 방식에서 naive datetime과 aware datetime이 섞이며 생기는 문제를 다뤘습니다. `timezone.now()`, `localtime()`, `make_aware()`를 통한 일관된 시간대 처리를 제안합니다.
문제 상황
USE_TZ=True,TIME_ZONE='Asia/Seoul'환경에서 naive datetime과 time-zone-aware datetime 혼재- UTC 기준으로 읽은
DateTimeField값의 날짜와 한국 시간 기준 날짜 불일치
원인 분석
datetime.now(),datetime.today(),strptime()결과의 시간대 정보 부재- DB에서 읽은
DateTimeField의 UTC aware datetime과 naive datetime 비교 시 예외 - UTC 기준
.date()호출로 한국 시간 오전 9시 이전 날짜가 전날로 해석될 가능성
해결 방법
- 현재 시간 생성에
datetime.now()대신django.utils.timezone.now()사용 - 한국 시간 표현에
timezone.localtime()적용 - 불가피한 naive datetime에
timezone.make_aware()적용 후 비교
주의할 점
DateTimeField와 달리DateField는 한국 날짜 기준 저장·조회- 날짜 추출과 datetime 비교 전 시간대 기준 일관성 확인



