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