IT/Django

django timezone과 시간 안맞는 경우

bepuri 2021. 3. 29. 15:23
728x90

먼저 django datetime / date field에 대해서 이야기하기전에, 표준이라는 것이 있기 때문에 유연함 또한 제공될 수 있는 것이다. 표준이 없다면 중구난방으로 모든것이 만들어져서 향후에 고정된 무언가 때문에 더이상 유연성을 제공받을 수 없게 되어버린다.

 

그런 목적으로 django에서 시간에 관한 필드들은 UTC를 기준으로 데이터베이스에 저장되고 읽혀진다.

 

setting 파일에서 TIME_ZONE을 설정하는 변수는 있지만 해당 변수를 수정해준다고해서 데이터베이스에 들어가는 시간 값이 UTC가 아닌 다른 타임존으로 저장되는건 아니다.

타임존을 사용하지 않고 강제로 특정 타임존으로만 저장하는 방법도 있겠지만, 향후에 국제 서비스를 제공하려는 상황이 발생한다면 큰 오버헤드가 발생할 것이다.

 

왜냐하면 기존에 저장해뒀던 모든 시간관련 데이터를 새로이 업데이트해주고, 내부 코드 또한 새로이 수정해줘야하기 때문이다.

 

그렇기 때문데 타임존은 사용하는 것이 좋으며 국가에 따라 적절하게 SETTING 파일의 TIME_ZONE 변수를 수정하여 올바른 시간을 표기해주는 것이 바람직하다.

 

실제 시간을 저장할 때에는 DEFAULT TIME_ZONE을 가정하고 저장이되며, 불러올때도 DEFUALT TIME_ZONE을 가정하고 불러온다고 생각했는데 막상 Serializer에서 manipulate해야하는 상황이 있어 해당 값을 확인해보니 instance의 필드로 바로 접근할 때에는 UTC TimeZone으로 시간 객체가 넘어왔다.

 

그렇기 때문에 여기서 timezone.locatime()함수에 해당 date필드값을 넣어주지 않으면 실제 한국시간보다 9시간 느린 시간이 출력된다.(-09시간된 시간)

 

아니면 serializer에서 serializers.SerializerMethodField()와 같은 로직 없이 그대로 데이터를 넘기면 정상적인 한국 시간 값을 가져올 수는 있으나, 필요에 따라 시간 출력 형태를 변경하고자한다면 timezone.localtime()함수 호출은 필수적이다.

728x90