TIME_ZONE, USE_TZ 설정 어떻게 쓰시나요? 총 4가지 경우의 수 중 어느 것

 
Jonghwa Seo

TIME_ZONE, USE_TZ 설정 어떻게 쓰시나요?

총 4가지 경우의 수 중 어느 것으로 쓰시는 지 궁금합니다.

1. TIME_ZONE = ‘UTC’ / USE_TZ = True
2. TIME_ZONE = ‘Asia/Seoul’ / USE_TZ = True
3. TIME_ZONE = ‘UTC’ / USE_TZ = False
4. TIME_ZONE = ‘Asia/Seoul’ / USE_TZ = False

제가 지금 공부 중이고 윈도우 7 / Django 1.8 / SQLite3 개발 환경이라서 많은 곳에서 테스트 해보진 못했지만

제가 살펴본 것으로는 다음과 같습니다.

TIME_ZONE 값이 UTC이면 화면에 UTC 시각으로 출력하고 서버 시각보다 9시간 앞서 있다고 알려줍니다.

반면에 TIME_ZONE 값이 Asia/Seoul이면 화면에 한국 시각을 출력하고 별도 알림은 없습니다.

또한 USE_TZ 값이 True이면 DB에 저장할 하거나 화면에 출력할 때 +/-9시간을 계산합니다.

반면에 UTZ-TZ 값이 False이면 Django에서 내부적으로 시간 +/-9시간 계산은 없는 걸로 보입니다.

(여기까지 잘못 이해한 부분이 있으면 알려주세요.)

settings.py가 기본 값은 TIME_ZONE = ‘UTC’ / USE_TZ = True 이지만 이렇게 쓰시는 분은 없을 것 같고

실무에서 1~4번 중 어느 것을 골라서 쓰시나요?

(국내에서만 서비스할 것이라면 4번 선택도 나빠보이진 않는다는 생각입니다.)

여러 가지 테스트를 해보면서 1~4번 사이의 값을 중간에 변경할 경우 URL에 yyyy/mm/dd가 포함되니 기존 레코드를 못 가져와 404 뜨는 경우가 있더라구요.

살펴보니 +/-9 계산 문제였고 실무적으로 처음 세팅할 때 잘 설정해야 나중에 문제가 안 되겠구나 하는 생각이 들었습니다.

가급적이면 OS/DB도 같이 알려주시면 감사하겠습니다.

  • Hyeonseung Lee

    2번으로 쓰고 파이썬 네이티브 datetime을 안쓰면 됩니다. https://docs.djangoproject.com/en/1.9/topics/i18n/timezones/
    now()를 예를들면 datetime.datetime.now()가 아니라 django.utils.timezone.now()를 써야 합니다.

    Hyeonseung Lee

    만약에 글로벌 서비스를 염두에 둔다면 사용자의 타임존을 받아다가 쉬프트 시켜줘야겠지만요. 유저에게 utc로 주고 알아서 이해하라는 건 무리니까요.

    Chinseok Lee

    1번 쓰고, 유저 timezone 에 맞게 변환합니다.

    https://docs.djangoproject.com/en/1.9/topics/i18n/timezones/ 에 관련설명/코드가 있습니다.

    You should set the current time zone to the end user’s actual time zone with activate(). Otherwise, the default time zone is used.

Advertisements