티스토리 뷰

Backend

MySQL과 시간차 발생 해결

HUN 2021. 9. 24. 16:59

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=UTCserverTimezone=Asia/Seoul로 변경하면된다.

serverTimezone=Asia/Seoul로 변경 후 두 데이터를 비교하면 동일한 것을 볼 수 있다.

그리고 DB의 타임존을 변경하는 방법이 있는데 여기를 참고하길 바란다. 아직 DB 자체 타임존을 변경 해야할 이유를 잘모르겠지만 나중에 변경이 필요한 경우가 생기면 게시물을 작성하기로 한다.


참고

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함