항해99 10주차 WIL(서버 Timezone 설정오류 트러블슈팅)
#서버 Timezone 설정오류
에러내용
보통은 아무것도 설정하지 않고, 스프링 프로젝트를 띄우면, 시스템 타임존설정이 Default값으로 셋팅이 된다.
따라서 한국의 시간인 Asia/Seoul (UTC + 9) 으로 설정이 된다.
따라서 프로젝트를 띄우고 http://localhost:8080을 호출하면, 현재 KST시간이 표시된다.
(내 컴퓨터 타임존 환경이 대한 민국 표준시로 설정되어있기 때문이다)
하지만 EC2에 배포 후, RDS에 들어가는 값을보니 UTC시간(9시간 전)으로 시간이 들어가지는 오류를 발견했다.
해결
처음에는 데이터베이스의 시간 설정 문제인 줄 알고, properties에서 dataSource URL 끝에 ?serverTimezone=Asia/Seoul을 붙여서 Timezone 시간을 바꾸는 것을 시도했다.
하지만 다시 실행해보니 똑같은 시간값이 들어오고 있었고,
Amazon RDS 홈페이지에 들어가 RDS Timezone 시간 바꾸기를 시도해도 똑같은 현상이 발생했다.
이에 다시 구글링하여 많은 Reference를 찾아보고,
결국 Bean 생명주기를 이용한 Timezone 자동설정으로 해결했다.
@PostConstruct 는 Bean이 완전히 초기화 된 후, 단 한번만 호출되는 메소드다.
@SpringBootApplication 이 부여된 Apllication Class에서 @PostConstruct 가 부여된 메소드를 생성하고 아래와 같이 입력하게 되면, 어플리케이션 실행 시, Timezone을 설정할 수 있다.
@SpringBootApplication
@EnableJpaAuditing //타임스탬프 상속해서 쓰려면 넣어줘야함
public classFinalpjApplication{
//@PostConstruct는 Bean이 완전히 초기화 된 후,단 한번만 호출되는 메서드 이다.
//애플리케이션이 처음 구동될때 한번 실행된다.
@PostConstruct
public void started() {
// timezone셋팅
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
public static void main(String[]args) {
SpringApplication.run(FinalpjApplication.class,args);
}
}