django의 datetime
인스턴스는 시간대(tz)를 가질 수도 있고, 안가질 수도 있다.
만약 시간대를 가진다면 aware
속성, 안가진다면 naive
속성으로 분류한다.
서로 다른 속성끼리는 시간의 연산이 불가능하다.
보통은 시간대를 가지지 않는 naive
보다는 aware
를 사용할 것을 권장한다.
USE_TZ
옵션은 django 내부에서 어떤 속성을 사용할 것인지를 정하는 옵션이며, 이를 True
로 둘 경우 aware
을, False
로 둘 경우 Naive
를 사용한다.
그래서 USE_TZ=False
로 두고 DatetimeField
에 aware
를 저장하려고하면
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시간 차이를 인지하고 변환해주는 작업을 피할 수 없을 것 같다.