Spring Scheduler란?
- Spring Framework에서 제공하는 기능이다.
- 일정에 따라 작업을 자동으로 실행할 수 있게 도와준다.
- 주기적인 작업이나 정해진 시간에 수행해야할 작업을 처리하는 데 주로 사용된다.
Spring Scheduler 특징
다양한 스케줄링 옵션
고정 주기(Fixed Rate)
- 지정된 시간 간격으로 작업을 반복 실행한다.
- 작업에 소요되는 시간이 지정된 시간보다 길어진다면 두 수행이 겹쳐서 발생할 수 있으므로, 이 작업을 고려하여 적용해야한다.
고정 지연(Fixed Delay)
- 이전 작업이 완료된 후 지정된 시간 간격으로 작업을 실행한다.
Cron 표현식
- 복잡한 주기를 설정할 수 있어 특정 시간, 날짜, 요일 등에 따라 작업을 실행할 수 있다.
- 스케줄러 정규 표현식을 통하여 표현하며, "초 / 분 / 시 / 일 / 월 / 요일 / 년도(생략가능)" 규칙으로 작성한다.
ef. 0 5 * * * * - 매시 5분 마다 수행, 0 0/10 * * * - 매시 10분 단위로 수행
비동기 처리
- 비동기적으로 작업을 수행하여 어플리케이션의 응답성을 유지한다.
간편한 설정
- 어노테이션을 통해 쉽게 스케줄링 작업을 정의하고 관리할 수 있다.
Spring Scheduler 설정 방법
스케줄링 활성화
스케줄링을 사용하려면 @EnableScheduling 어노테이션을 클래스에 추가합니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SchedulerApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulerApplication.class, args);
}
}
스케줄링 작업 정의
작업을 정의할 때는 @Scheduled 어노테이션을 사용합니다.
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
// 매 5초마다 실행
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
System.out.println("Fixed Rate Task: " + System.currentTimeMillis() / 1000);
}
// 이전 작업이 끝난 후 3초 후에 실행
@Scheduled(fixedDelay = 3000)
public void fixedDelayTask() {
System.out.println("Fixed Delay Task: " + System.currentTimeMillis() / 1000);
}
// 매일 자정에 실행
@Scheduled(cron = "0 0 0 * * ?")
public void cronTask() {
System.out.println("Cron Task: " + System.currentTimeMillis() / 1000);
}
}
유용한 팁
스레드 관리
TaskScheduler를 사용하여 스레드 풀을 관리할 수 있다.
예외 처리
스케줄링 작업 내에서 발생하는 예외는 기본적으로 무시된다. 이를 처리하기 위한 별도의 로직이 필요하다.
동기화
동시에 실행되지 않도록 동기화 로직을 추가할 수 있다.
⊙ 참고 문헌
- 김하은, 「백엔드 취업 파트타임 스쿨 5기:Part 09. 실전 배당금 프로젝트-Chapter 04. 서비스 구현-09_스케줄러 01」, 제로베이스, 2024, https://zero-base.co.kr/
- ChatGPT, "Spring Scheduler"에 대한 답변, 2024년 10월 05일, https://chatgpt.com/
⊙ 유용한 사이트
- Crontab.guru - The cron schedule expression generator
Cron 규칙을 사전에 적용하고 주기를 확인할 수 있는 유용한 사이트이다.