문제상황: DB 에 저장된 시간대가 UTC 기준으로 저장되고 조회됨.
해결방법: application.yml 파일에 spring.jpa.properties.hibernate.jdbc.time_zone = Asia/Seoul
설정하면 된다.
또 다른 문제상황 : 서버를 클라우드 환경에 배포한뒤 시간을 조회할 경우 UTC 기준으로 조회됨
원인: JPA 가 DB 에서 조회해온 시간값을 LocalDateTime 으로 변환시키는 과정에서 LocalDateTime 의 기준 시간이 UTC 로 설정되어 있었기 때문이다.
해결방법: 도커 파일에 해당 명령어를 `-Duser.timezone=Asia/Seoul` 추가함
해결과정:
문제 상황시 BaseEntity의 코드
@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
abstract class BaseEntity {
@CreatedDate
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
lateinit var createdAt: LocalDateTime
@LastModifiedDate
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
lateinit var modifiedAt: LocalDateTime
}
@JsonFormat 의 인자로 timezone = "Asia/Seoul" 설정을 해줬기 때문에 정상 동작을 예상했지만
@JsonFormat 의 경우 MessageConverter 에 의해 직렬화 및 역직렬화가 될 때 (Jackson 라이브러리가 사용될때) 사용되는 어노테이션이다. 즉 서버와 데이터베이스 사이에서 데이터를 주고 받을때는 사용되지 않는다.
때문에 다른 방법을 찾았다.
간편한 2 번 방법을 선택.