티스토리 뷰
Java에서 MySQL에 저장된 datetime
형식의 데이터를 가져올 때 시간차가 발생할 수 있다.
오늘은 이 시간 차이를 해소할 수 있는 방법에 대해서 알아본다.
문제 상황
토이 프로젝트 진행 중 MySQL에 저장된 created_at
과 자바의 createdAt
의 값이 일치하지 않는 경우가 발생했다.
주문 후 DB에 저장된 값과 JSON으로 전달되어 웹에 렌더링한 값을 비교해본다.
DB에는 created_at이 2021-09-24T15:47:43
으로 저장된 반면 웹 페이지에는 createdAt이 2021-09-25T00:47:43
로 출력된다. 웹 페이지에 렌더링된 값 보다 DB에 저장된 값이 정확히 9시간이 빠르다.
문제 분석
웹 페이지에 렌더링된 값이 DB 보다 9시간이나 늦은 이유는 타임존이 달라서이다.
DB의 타임존을 먼저 확인해본다.
SELECT @@global.time_zone @@session.time_zone
현재 DB의 타임존이 별도의 설정 없이 SYSTEM을 따르고 있다. 따라서 현재는 한국 시간 기준으로 시간이 저장된다.
그리고 현재 application.properties에 작성된 설정에는 serverTimeZone=UTC
로 되어있다. 따라서 DB의 타임존과 application.properties의 타임존의 불일치로인해 시간차가 발생한다.
문제 해결
타임존의 불일치를 해결하기 위해서는 application.properties에서 타임존을 변경 해야 한다.
application.properties에서 타임존 변경하기
application.properties에서 타임존을 변경하는 것은 간단하다. serverTimezone=UTC
를 serverTimezone=Asia/Seoul
로 변경하면된다.
serverTimezone=Asia/Seoul
로 변경 후 두 데이터를 비교하면 동일한 것을 볼 수 있다.
그리고 DB의 타임존을 변경하는 방법이 있는데 여기를 참고하길 바란다. 아직 DB 자체 타임존을 변경 해야할 이유를 잘모르겠지만 나중에 변경이 필요한 경우가 생기면 게시물을 작성하기로 한다.
참고
'Backend' 카테고리의 다른 글
[Spring] Spring MVC - @JsonProperty, @JsonNaming 알아보기 (0) | 2021.11.16 |
---|---|
[Spring] Spring MVC - @RequestParam, @ModelAttribute, @RequestBody (0) | 2021.10.14 |
[Spring] Spring MVC 구조 (0) | 2021.09.14 |
[토비의 스프링 3.1] 5장 서비스 추상화 (0) | 2021.09.10 |
[Spring] Spring MVC - Servlet (0) | 2021.09.07 |