grape

[Django 03] - Django 한국 시간 설정 본문

웹 프로그래밍/Django

[Django 03] - Django 한국 시간 설정

grape-story 2021. 6. 6. 16:29

Django 한국 시간 설정 

Django에서의 기본 Time Zone(시간 설정)은 UTC이다. UTC는 협정 세계 시간으로 국제 표준시간이라 보면 된다. 국제 표준시간과 한국 시간의 시차는 + 09:00이다. 한국 시간이 03:00이면 국제 표준 시간은 12:00 인 것이다. 시간 설정이 중요한 이유는 기본 세팅 UTC로 하게 되면 DB 저장 시에도 UTC 시간으로 저장이 되기 때문이다. 

 

ex) -

models.py 

# app/models.py

from django.db import models

class TestModel(models.Model):
	created_at = models.DateTimeField(auto_now_add = True) # 생성 시간 
    updated_at = models.DateTimeField(auto_now = True)  # 수정 시간 

웹에서 CRUD 작업을 하다 보면 보통 생성일자와 수정 일자 정보를 DB 스키마에 만들어서 저장하게 된다. 

  • 생성 일자: 최초 등록 시 에만 저장. 갱신되지 않는 정보 
  • 최종 수정 일자: 수정 시 갱신 

Tip.

auto_now_add vs auto_now 

  • 수정일자: auto_now = True 사용

- auto_now = True는 django model의 데이터 값이 save 될 때마다 현재 날짜 & 시간으로 갱신된다. 

-- > 주로 최종 수정 일자 field option으로 사용된다. 

 

  • 생성일자: auto_now_add = True 사용 

- auto_now_add = True 는 django model의 데이터 값이 최초 저장(insert) 시에만 현재 날짜 & 시간으로 적용된다.

 

 

이렇게 model을 만들어 model의 instance를 만들게 되면 create_at or update_at 필드에는 기본적으로 UTC 시간이 들어가게 된다. 그래서 settings.py에서 TIME_ZONE 값과 USE_TZ 값을 변경해야 한다. 

 

ex) - 

settings.py 

# settings.py

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Seoul'  # 한국 시간 적용 

USE_I18N = True

USE_L10N = True

USE_TZ = False  # False 로 설정해야 DB에 변경 된 TIME_ZONE 이 반영 됨 

위 코드에서 중요한 부분은 USE_TZ 값이다. USE_TZ 값을 False로 변경하는 이유는 models의 datetime 필드에도 변경된 TIME_ZONE 값을 적용시키기 위해서다. USER_TZ가 True 일 때는 templates, forms에서의 datetime에만 내가 설정한 TIME_ZONE이 적용된다. 따라서 models의 datetime에는 적용되지 않기 때문에 models에서는 기본값인 UTC 값이 적용된다. 따라서 models에 변경된 TIME_ZONE의 값을 적용시키고 싶으면 USE_TZ 값을 False로 변경해줘야 한다. 

 

 

Tip.

Django 로 프로젝트 생성 시 기본적으로 처음에 시크릿 키 분리와 시간 설정을 미리 한 후 진행하는 것이 좋다.  필요시 User 커스텀까지 진행한 후 migrate 하는 것이 가장 이상적이다. 

 

1. 시크릿 키 분리 & 시간 설정 

2. 필요 시 User 모델 커스텀 

3. 첫 migrate 실행 

 

 

 

Comments