본문 바로가기

Trouble Shooting

[AWS] Elastic Beanstalk Timezone KST로 변경하기

 

🥺 문제 발생

일요일 11시마다 실행하는 스케줄러가 있어서 아래와 같이 스케줄러를 설정했다.

@RequiredArgsConstructor
@Service
public class TestSubscribeScheduler {

  private final EmailTesterService emailTesterService;

  @Scheduled(cron = "0 0 23 * * SUN")
  public void sendEmailToTester() {
    emailTesterService.sendToTesters();
  }

}

로컬에서는 잘 되어서 아무 생각 없이 서버에 올렸는데, 스케줄러가 동작하지 않았다 …

서로 다른 Timezone ㅠㅠ

그러다 로그를 확인했는데, 로그가 찍히는 timestamp와 애플리케이션 내부에서 찍히는 timestamp의 시간이 다른 것을 확인했다. 애플리케이션 내부에서 UTC 시간을 사용하고 있어 스케줄러가 제대로 동작하지 않았던 것이다.


🔎 해결 방법

처음에는 @PostConstructor를 사용해서 스프링 애플리케이션 내부의 시간을 초기화해서 지정했는데, 제대로 워킹하지 않아서 다른 방법을 찾다가 AWS 자체에서 Timezone을 바꾸면 될 것 같다는 생각을 해서, 방법을 찾아보았다.

나는 Elastic Beanstalk을 사용하고 있어서, .ebextensions의 config 파일에 아래와 같은 설정을 추가해주었다. (만약 Elastic Beanstalk이 아닌 EC2만 사용하고 있다면, 이 링크를 참고하면 된다.)

commands:
  set_time_zone:
    command: ln -f -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

이렇게 설정을 해주고 나면, Timezone이 KST로 바뀌면서 로그가 찍히는 timestamp와 애플리케이션 내부에서 찍히는 timestamp의 시간이 동일해지고, 스케줄러도 제대로 정한 시간에 동작한다.

Timezone이 KST로 바뀌었다. 


👀 참고