[DRF] datetime naive, aware 관련 정리

JinUk Lee·2023년 9월 6일
0

DRF 학습하기

목록 보기
35/57
post-custom-banner

django의 datetime 인스턴스는 시간대(tz)를 가질 수도 있고, 안가질 수도 있다.

만약 시간대를 가진다면 aware 속성, 안가진다면 naive 속성으로 분류한다.

서로 다른 속성끼리는 시간의 연산이 불가능하다.

보통은 시간대를 가지지 않는 naive보다는 aware를 사용할 것을 권장한다.

USE_TZ 옵션은 django 내부에서 어떤 속성을 사용할 것인지를 정하는 옵션이며, 이를 True 로 둘 경우 aware을, False로 둘 경우 Naive를 사용한다.

그래서 USE_TZ=False 로 두고 DatetimeFieldaware를 저장하려고하면

SQLite backend does not support timezone-aware datetimes when USE_TZ is False 이러한 오류가 발생한다.

(SQlite 말고도 다른 여러 DB에서도 같은 오류가 발생한다.)

결론은 USE_TZ와 naive, aware 를 한쪽으로 통일해서 사용하라는 것인데,

USE_TZ를 False로 두고 naive로 사용하려고 했더니 여전히 같은 오류가 발생했다. 아무래도DatetimeField에서 aware 속성을 필요로하는게 아닐까 싶었다.

문제는 현재 개발하고있는 API에서는 한국시간을 기준으로 응답해주는데 장고 DB에서는 이를 UTC로 저장해야하니 개발하면서 이 9시간 차이를 인지하고 변환해주는 작업을 피할 수 없을 것 같다.

profile
개발자 지망생
post-custom-banner

0개의 댓글