살려줘
현생이 바빠서 한동안 신경쓰지 못했던 웹서비스가 있었다. 이직 후 여유가 생겨서 이러서 개발하려고 했으나, Django Admin
접속에서 부터 막힐것이라고는 생각하지 못했다.
먼저 해당 웹서비스의 구성 스택을 소개하자면 아래와 같다.
Naive
한 객체와, aware
한 객체는 DB에 저장될 때 다른 형식으로 저장된다.문제의 원인은 DB에 시간관련 필드가 들어있는 레코드가 존재
하고 있었고 모종이 이유로 시간대 관련 설정이 변경되
었다. Timezone 정보가 없는 데이터(aware
)를 Timezone 정보가 있는 데이터(naive
) 형식으로 읽으려다 보니 문제가 발생했다.
Python
의 일자/시간과 관련된 패키지들에서 naive
와 aware
라는 단어가 매우 자주 등장한다.
naive
: Timezone정보가 지정된 시간정보aware
: Timezone정보가 지정되지 않은 시간정보두 성격 자체는 이전에 많은 삽질(...)을 통해서 어느정도 알고 있었지만, DB저장
아무래도 Managed
서비스이다 보니, 내부적으로 MySQL버전업이 진행되었던 것 같다.
DB의 문자셋 설정(latin
)와 Django
의 기본값 (utf8mb4
) 사이에 차이가 발생했고, 이에 따라 아래와 같은 오류가 발생했다.
이에 대해 찾아보고 해결 한 솔루션은 아래와 같다.