🥺 문제 발생
일요일 11시마다 실행하는 스케줄러가 있어서 아래와 같이 스케줄러를 설정했다.
@RequiredArgsConstructor
@Service
public class TestSubscribeScheduler {
private final EmailTesterService emailTesterService;
@Scheduled(cron = "0 0 23 * * SUN")
public void sendEmailToTester() {
emailTesterService.sendToTesters();
}
}
로컬에서는 잘 되어서 아무 생각 없이 서버에 올렸는데, 스케줄러가 동작하지 않았다 …
그러다 로그를 확인했는데, 로그가 찍히는 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의 시간이 동일해지고, 스케줄러도 제대로 정한 시간에 동작한다.
👀 참고
'Trouble Shooting' 카테고리의 다른 글
S3 Virtual hosting of buckets에서 bucket, key 정보 추출하기 (1) | 2024.01.11 |
---|---|
도커라이징 작업을 하며 겪은 트러블 슈팅 (0) | 2023.06.04 |
[AWS] Beanstalk 상태 경고(Warning) 해결 방법 (0) | 2021.05.24 |
[AWS] Elastic Beanstalk 502 Bad Gatway 해결방법 (0) | 2021.04.17 |
[Spring Boot & intelliJ] lombok cannot find symbol 해결 방법 (0) | 2020.12.22 |