스케줄러(Scheduler)
스케줄러는 컴퓨터 과학에서 주어진 시간 간격에 따라 작업을 예약하고 실행하는 시스템이다.
스케줄러는 주기적인 작업, 일회성 작업, 특정 시점에 실행되어야 하는 작업 등을 관리한다.
다양한 분야에서 사용될 수 있지만, 주로 운영체제, 데이터베이스 관리 시스템, 웹 서버 및 애플리케이션 서버에서 중요한 역할을 한다.스프링 프레임워크에서의 스케줄러는 다음과 같은 기능을 제공한다.
- 주기적인 작업 실행 : 일정한 시간 간격으로 작업을 실행할 수 있다.
- 정해진 시간에 작업 실행 : 특정 시간이나 날짜에 작업을 실행할 수 있다.
- 복잡한 일정 관리 : 크론 표현식을 사용하여 복잡한 일정도 쉽게 관리할 수 있다.
코드
- 스케줄링 기능 활성화 : 스프링 부트 애플리케이션 클래스에서 @EnableScheduling 어노테이션을 추가한다.
@SpringBootApplication @EnableScheduling public class App02Application { public static void main(String[] args) { SpringApplication.run(App02Application.class, args); } }
- 스케줄링할 작업 정의 : 작업을 정의하는 클래스에서 @Component등록하고 스케줄링을 등록할 메소드에 @Scheduled 어노테이션을 사용한다.
@Component public class Myjob { @Scheduled(fixedRate = 5000) public void helloWorld(){ System.out.println("Hello World"); } }Ex)
스케줄러의 다양한 사용 방법
- fixedRate : 이전 작업의 시작 시점으로부터 일정 간격(밀리초)으로 실행된다.
- fixedDelay : 이전 작업이 끝난 후 일정 간격(밀리초)으로 실행된다.
- cron : 크론 표현식을 사용하여 복잡한 일정에 따라 작업을 실행할 수 있다.
크론 표현식
크론 표현식(Cron Expression)은 일정한 주기에 따라 작업을 예약하기 위해 사용되는 구문이다. 리눅스/유닉스 시스템에서 사용되는 cron과 동일한 방식으로, 스프링 프레임워크에서도 이를 활용하여 스케줄링 작업을 설정할 수 있다.
크론 표현식은 6개의 필드로 구성되며, 각 필드는 특정 시간 단위를 나타냅니다. 기본 형식은 다음과 같다
초 분 시 일 월 요일 [년도]각 필드의 의미와 범위는 다음과 같다.
초 (Seconds) : 0-59
분 (Minutes) : 0-59
시 (Hours) : 0-23
일 (Day of month) : 1-31
월 (Month) : 1-12 또는 JAN-DEC
요일 (Day of week) : 0-6 (0 = Sunday) 또는 SUN-SAT
년도 (Optional, Year) : 1970-2099 (스프링에서는 생략 가능)특수 문자
크론 표현식에서 사용할 수 있는 특수 문자는 다음과 같다.'*' (애스터리스크): 모든 값
'?' (물음표): 특정 값을 지정하지 않음 (주로 "일"과 "요일" 필드에 사용)
'-' (하이픈): 범위 지정 (예: 10-12는 10, 11, 12)
',' (쉼표): 여러 값 지정 (예: MON,WED,FRI는 월, 수, 금)
'/' (슬래시): 간격 지정 (예: 0/15는 0, 15, 30, 45)
'L' (마지막): 마지막 값 (주로 "일"과 "요일" 필드에 사용)
'W' (평일): 가장 가까운 평일 (주로 "일" 필드에 사용)
'#' (샤프): 몇 번째 주의 특정 요일 (예: 3#2는 두 번째 월요일)예시코드
@Scheduled(cron = "0 0 0 * * *") public void helloWorld(){ System.out.println("Hello World"); }*위 코드는, 매일 자정에 실행된다.