서버 환경에 따라 스프링 스케줄러가 설정된 시간에 동작하지 않는 경우가 발생할 수 있습니다. 특히, 애플리케이션의 시간대 설정과 배포 서버의 시간대가 일치하지 않을 때, 스케줄러가 의도한 시간에 실행되지 않을 수 있습니다. 이 글에서는 스프링 스케줄러가 배포 서버에서 한국 시간에 맞춰 정확하게 동작하도록 설정하는 방법을 다룹니다.
문제 상황
스프링 애플리케이션에서 아래와 같이 매주 수요일 오후 4시에 작업을 스케줄링했다고 가정해봅시다.
@Scheduled(cron = "0 0 16 ? * WED")
public void run() {
// 작업 내용
}
이 코드는 애플리케이션이 실행 중인 서버의 호스트 시간대를 기준으로 스케줄링됩니다. 즉, 로컬 환경에서 애플리케이션을 실행하면 로컬 시간대에 맞춰 작동하고, 배포 서버에서 실행할 경우 배포 서버의 시간대를 기준으로 작동하게 됩니다.
스케줄러가 의도된 시간에 실행되지 않거나 관련된 로그가 전혀 출력되지 않는다면, 배포 서버와 애플리케이션의 시간대 설정이 달라서 발생하는 문제일 수 있습니다.
해결 방법
애플리케이션이 특정 시간대(예: 한국 시간) 기준으로 작동하도록 설정하기 위해 @Scheduled 애너테이션을 수정하거나, 스프링 전체 시간대를 지정할 수 있습니다.
1. zone 속성을 사용한 시간대 설정
@Scheduled 애너테이션에서 zone 속성을 설정하여 원하는 시간대에 맞춰 스케줄러가 작동하도록 할 수 있습니다.
@Scheduled(cron = "0 0 16 ? * WED", zone = "Asia/Seoul")
public void run() {
// 작업 내용
}
위 설정을 통해 스케줄러는 항상 한국 시간(Asia/Seoul)을 기준으로 실행됩니다.
2. 스프링의 기본 시간대 설정
애플리케이션의 모든 시간 관련 동작이 특정 시간대에 맞춰 동작하도록 설정하려면, application.properties 또는 application.yml 파일에서 기본 시간대를 지정할 수 있습니다.
spring.timezone=Asia/Seoul
결론
서버 환경에 따른 시간대 불일치로 인해 스케줄러가 의도된 시간에 실행되지 않는 현상을 초래할 수 있습니다. @Scheduled 애너테이션의 zone 속성이나 스프링의 전반적인 시간대 설정을 통해 이러한 문제를 해결할 수 있습니다.
'Dev > Backend' 카테고리의 다른 글
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 5장 정답 (0) | 2024.07.07 |
---|---|
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 6장 정답 (0) | 2024.07.07 |
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 1장 정답 (0) | 2024.07.07 |
[Servlet] Create Dynamic Web Project(Jakarta EE) [IntelliJ] (0) | 2024.04.05 |
[Spring] Lazy Loading (1) | 2024.03.24 |