목록 보기
Django timezone 문제 파헤치기
백엔드

Django timezone 문제 파헤치기

8퍼센트
8퍼센트
2017년 5월 30일

두줄요약

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 비교 전 시간대 기준 일관성 확인

다음 읽기

#Python 주제를 이어서 읽기

8퍼센트 Test case 작성 가이드

Django 테스트 작성 시 네이밍, factory_boy, mock, freezegun 활용 방식을 안내합니다.\n공통 데이터 생성과 시간·signal 처리 시 성능 및 테스트 격리 원칙을 제시합니다.

8퍼센트
8퍼센트
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...