
Timestamp 타입의 createDate 필드가 데이터베이스에서 정상적으로 가져와지고 있음에도 불구하고, 2024-05-05T16:25:51.299+00:00와 같이 UTC 시간대로 출력되는 문제가 발생했다.
ubuntu와 ec2에 설치한 mysql의 timezone을 모두 Asia/Seoul로 설정해줬지만 해결이 되지않았다.
또한, 스프링 서버 실행 시 아래와 같은 옵션을 추가하여 로컬 타임을 출력해본 결과, 현재 시간이 정상적으로 나오는 것을 확인할 수 있었다.
-Duser.timezone=Asia/Seoul
그럼 뭐가 문제지?
.
.
.
properties파일에 위의 내용을 추가해주니까 해결이 됐다.
spring.jackson.time-zone=Asia/Seoul
-> 출력이 2024-05-08T14:48:02.523+09:00로 나옴 (UTC와 Asia/Seoul의 시간 차는 9시간이다)
이게 무슨 역할을 해주는걸까?
클라이언트로부터 GET 요청이 들어오면, Java 애플리케이션에서 객체를 JSON으로 매핑하여 내보내게 된다. 이 과정에서 날짜와 시간이 UTC로 변환되어 포맷되는 경우가 있다. spring.jackson.time-zone=Asia/Seoul 설정을 통해 Jackson 라이브러리에서 사용하는 시간대를 Asia/Seoul로 변경함으로써, 문제를 해결할 수 있었다.