DB에 들어가는 시간이 이상하다

Mando·2023년 11월 27일
2
post-thumbnail

문제 상황


@createdAt 이나 @updatedAt 을 이용하여 자동으로 시간을 찍어주는 기능을 사용하고 있는데,

이상하게 “로컬”에서는 시간이 제대로 들어가는데 AWS에 배포된 서버에서는 현 시간과 9시간 차이가 나고 있었다.

그래서, UTC 시간대로 설정되어 있구나. 라고 생각을 하고 시간대를 변경해주었다.

시간대를 변경해주자!


우선, mysql의 시간대를 변경해주었다.

다음으로 인스턴스 서버의 시간대를 변경해주었다.

그럼 문제는 해결되었을까?


아니다..

그럼에도 불구하고 데이터에 들어가는 시간은 현 시간과 9시간과 차이가 나고 있었다.

이제 나는 미궁 속으로 빠져들었다.

인스턴스 서버 시간대도 맞고, mysql 서버 시간대도 올바른데

왜? DB에 들어갈 때는 UTC 시간대가 적용이 되는 거지?

톰켓 시간 설정을 따로 해주어야 한다.

tomcat의 시간은 리눅스 서버의 시간과는 별도이다.
따라서 tomcat 서버의 timezone 설정을 별도로 해주어야 한다!!!

@PostConstruct를 사용하자

@PostConstruct는 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출단 한번만 호출하는 메서드이다.

이제 os, 톰켓, mysql 시간대를 다 설정해주었으니깐 제대로 데이터가 들어오겠지?

하지만... 또 실패다..
또 데이터가 잘 못 들어오고 있었다.

로컬에서는 정상적으로 값이 들어왔으니 로컬부터 봐보자

생각해보니 로컬에서는 데이터가 잘 들어오고 있었다.
이젠 시간대 설정이 문제가 아니라는 생각이 들었고, 다시 코드를 보기 시작했다.

우선 로컬에서 설정할 때는 serverTimezone=Asia/Seoul&useLegacyDatetimeCode=false설정을 따로 해주지 않았다.

dev환경에서는?


그렇다... serverTime을 UTC로 설정을 해두었다.

이 부분을 serverTimezone=Asia/Seoul&useLegacyDatetimeCode=false로 변경하면 데이터가 KST시간대로 들어온다.

그런데 갑자기 의문이 들었다.
dev환경의 mysql 서버 timezone은 Asia/Seoul 로 그리고 serverTimezone 설정을 UTC로 주었는데 이 경우 mysql 의 timezone이 아니라 serverTimezone의 말을 듣고 있다.

왜 그런지 궁금해졌다.(디버깅으로 알아보자!!)

Native-protocol

JDBC는 자바나 JSP 등으로 작성된 프로그램과 DBMS(DataBase Managemet System)을 연결하기 위한 응용프로그램 인터페이스(API)로 드라이버를 제공하는데 그 중 하나이다.

해당 클래스의 configureTimeZone()에 집중해서 봐보자.

serverTimezone을 지정하지 않은 경우

connectionTimeZone이 null값이 들어오게 된다.

따라서 이 경우에는 현 어플리케이션의 Timezone(JVM에 설정된)을 serverTimezone으로 지정한다.
따라서 우리는 기존에 @PostConstruct를 통해 Asia/Seoul을 지정해주었으므로 Asia/Seoul이 serverTimeZone으로 들어간다.

serverTimezone을 지정한 경우

해당 connectionTimeZone으로 TimeZone을 생성한다.

결론

즉, mysql 시간대가 Asia/Seoul이여도!

JDBC 설정 시에

  • serverTimezone이 명시되있지 않을 경우
    현재 어플리케이션의 Timezone으로 Connection이 맺고

  • JDBC url 파라미터에 serverTimezone이 명시되있을 경우
    serverTimezone의 값으로 Timezone 인스턴스를 생성하여 생성된 Timezone으로 Connection이 맺는다.

그렇기 때문에 나 같은 경우는 JDBC 설정에서 UTC로 연결하고 있었기 때문에 문제가 발생하고 있었다.

너무나도 힘들었지만, 덕분에 JDBC가 timezone을 어떻게 설정하고 있는지 그 과정을 알 수 있는 뜻깊은 시간이였다.

1개의 댓글

comment-user-thumbnail
2023년 11월 28일

black-company 정말 멋진 회사네요!

답글 달기