프로그래밍/spring

@CreationTimestamp, LocalDateTime 시간 설정 방법

승민아 2024. 3. 29. 14:36

이상하게 댓글과 같이 생성된 엔티티의 생성일이 한국 시간이 아닌 다른 시차로 적용되는 상황이 발생했다.

 

댓글 엔티티를 예로 들겠다.

@Entity
@Data
public class Comment {

    @CreationTimestamp
    private LocalDateTime regDate;

}

로컬에서는 @CreationTimesetamp의 시각이 현재 시각으로 잘 나왔지만

외부 서버인 AWS EC2에서 서버를 돌렸을때는 다른 시각으로 나왔다.

 

MySQL의 타임 설정을 한국으로 맞춰 SELECT now()의 결과로 한국 시간이 잘 나왔고

 

우분투 환경 또한 설정하여 잘 나왔다.

 

그럼 @CreationTimestamp의 설명을 잘 읽어보자...

기본 타임 스탬프는 메모리를 통해 생성된다고 나와있다.

source의 기본 값은 SourceType.VM인 것이다.

 

VM의 설정된 타임존을 확인하기 위해 위와 같은 코드를 작성하고 실행해보자.

 

ec2에서 현재 시각을 찍어 봤는데 UTC로 설정되어 있었다.

 

자바를 실행할때 다음 옵션을 주어 타임존을 설정할 수 있다.

-Duser.timezone=Asia/Seoul

 

시간이 한국 시간으로 잘 찍혀 나온다.

 

nohup java -jar -Duser.timezone=Asia/Seoul spotServer-0.0.1-SNAPSHOT.jar 1>/dev/null 2>&1 &

위와 같이 서버를 실행하면 된다.

 

매번 서버 파일 실행시 -D 옵션을 주기 귀찮다면

위와 같이 main 메서드에 타임존을 서울로 설정하는 코드를 넣어주자.

 

 

@CreationTimestamp의 옵션으로 VM 또는 DB로 설정할 수 있다.

@Entity
@Data
public class Comment {

    @CreationTimestamp(source = SourceType.DB)
    private LocalDateTime regDate;
    
}

@CreationTimestamp의 source 옵션값으로 SourceType.DB 또는 SourceType.VM으로 값을 지정할 수 있다.