Q. 기존 DB의 데이터들을 마이그레이션 하지 않아도, 시스템적으로 작동은 하지?
A. 네, 시스템은 작동합니다. 현재 상황을 설명드리면:
-
데이터베이스에 저장된 시간 데이터:
- 기존 데이터는 UTC로 저장되어 있음
- spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Seoul 설정으로 인해
- JPA가 데이터베이스에서 데이터를 읽을 때 자동으로 KST(+9)로 변환하여 애플리케이션에 전달
- 데이터베이스에 데이터를 저장할 때는 자동으로 UTC로 변환하여 저장
-
실제 동작 예시:
DB에 저장된 시간(UTC): 2024-03-20 10:00:00
애플리케이션에서 읽을 때(KST): 2024-03-20 19:00:00 (+9시간)
-
JSON 직렬화/역직렬화:
- spring.jackson.time-zone=Asia/Seoul 설정으로
- API 요청/응답에서 시간 데이터가 KST 기준으로 처리됨
- 클라이언트는 항상 KST 시간을 주고받게 됨
따라서 기존 데이터를 마이그레이션하지 않아도:
- 시스템은 정상적으로 작동
- 시간 데이터는 자동으로 변환되어 처리
- 클라이언트는 항상 KST 시간을 보게 됨
다만, 데이터베이스에 직접 접근하여 시간 데이터를 확인할 때는 UTC로 보이게 되므로, 이 점만 주의하시면 됩니다.
Q. 데이터베이스에 UTC로 저장된건 KST로 변환해서 주고, KST로 넣은건 그냥 KST로 보여준다는 거지?
A. 아니요, 설명이 부정확했네요. 정확히 말씀드리면:
- 데이터베이스 저장 시:
- 애플리케이션에서 KST 시간을 입력하면
- JPA가 자동으로 UTC로 변환해서 DB에 저장
- 예: 입력한 KST 시간이 "2024-03-20 19:00:00"이면
- DB에는 "2024-03-20 10:00:00" (UTC)로 저장됨
- 데이터베이스 조회 시:
- DB에 저장된 UTC 시간을
- JPA가 자동으로 KST로 변환해서 애플리케이션에 전달
- 예: DB에 "2024-03-20 10:00:00" (UTC)가 저장되어 있으면
- 애플리케이션에서는 "2024-03-20 19:00:00" (KST)로 받게 됨
즉, 데이터베이스에는 항상 UTC로 저장되고, 애플리케이션과의 통신에서는 항상 KST로 변환되어 주고받아집니다. 이는 시간대 설정을 변경하기 전이나 후나 동일하게 적용됩니다.
이렇게 하는 이유는:
- 데이터베이스는 항상 UTC로 저장하는 것이 표준