Spring

Spring Boot + Quartz 적용하기 - 1

댕발바닥 2024. 9. 15. 10:25

Spring Boot + Quartz를 이용하여 스케줄링 적용 과정을 포스팅하였습니다.

 

1. 스케줄링(Scheduling) 이란?

 

스케줄러란 일정한 주기 마다 반복적으로 작업을 실행하는 도구를 일컫는 말이다.

 

개발을 진행하는 과정에서 주기적으로 실행해야하는 작업이 필요한 경우가 생긴다. 이러한 경우 스케줄링 설정을 이용하여 작업을 처리할 수 있다.

 

자바에서는 다양한 스케줄러를 지원하게되는데 Quartz, Spring Scheduler, ScheduledExecutorService 등이 존재합니다.

 

 

※ 배치 스케줄링(Batch Scheduling) 이란?

배치 스케줄링이란 대량의 데이러터 처리를 자동화 작업으로 구현것을 의미합니다. 이번장에서는 배치 스케줄링을 적용하지 않으며 추후에 스프링 배치 포스팅을 진행할 예정입니다.

 

2. Spring Boot Quartz란?

 

Quartz란?

Java기반 오픈소스로 제공되고 있는 스케줄링 라이브러리 입니다. 해당 스케줄러를 사용하여 특정 시간에 작업을 실행하거나 주기적으로 작업을 수행하는 업무를 적용할 수 있습니다.

 

 

3. Quartaz의 기능

 

기능 설명
작업 스케줄링 작업 예약 및 주기 설정 기능을 제공합니다
작업 실행 및 관리 작업 실행, 중단, 재개, 삭제 기능을 제공합니다
작업 중단 및 재개 작업 중단, 재개 기능을 제공합니다
여러 작업 동시 실행 동시에 여러 작업 실행 기능을 제공합니다
작업 실행 결과 처리 작업 실행 결과 처리 기능을 제공합니다

 

 

 

4. Quartz 클래스 및 인터페이스

 

4.1 클래스 및 인터페이스

용어 설명
Job 실행할 작업에 대한 정보를 포함하는 클래스
JobDetail Job 클래스의 인스턴스와 Job 실행에 필요한 추가 정보를 포함하는 클래스
Trigger Job 실행을 스케줄링하기 위한 클래스
SimpleTrigger 지정된 시간 간격으로 Job을 실행하기 위한 Trigger
CronTrigger Cron 표현식으로 Job을 스케줄링하기 위한 Trigger
Scheduler Job 실행과 Trigger 스케줄링을 관리하는 인터페이스
SchedulerFactory Scheduler 인스턴스를 생성하고 구성하기 위한 인터페이스

 

 

4.2 Job

 

Job이란?

Quartz에서 실행할 작업을 정의하는 인터페이스입니다.

개발자는 자신이 실행하고자 하는 작업을 Job을 통하여 정의하며 정의된 Job은 Quartz의 설정 주기에 따라 실행이 됩니다.

 

JobDetail이란?

JobDetail은 Job이외에 필요한 부가 정보도 함께 포함된 클래스 입니다.

 

4.3 Trigger

 

Trigger란?

Job을 실행시키는 조건을 정의하는 인터페이스입니다.

이를 통하여 개발자가 정의한 Job의 실행 주기를 설정 할 수 있습니다.

 

트리거 설명
SimpleTrigger 특정 시간 또는 주기적으로 한 번 실행되는 트리거입니다.
CronTrigger Cron 표현식을 사용하여 특정 시간에 실행되는 트리거입니다.
CalendarIntervalTrigger 지정된 간격으로 주기적으로 실행되는 트리거입니다.
DailyTimeIntervalTrigger 지정된 시간 범위 내에서 지정된 간격으로 주기적으로 실행되는 트리거입니다.

 

 

4.4 Scheduler

 

Scheduler란?

Job과 Trigger를 연결하여 Job을 실행시키는 역할을 수행하는 인터페이스입니다.

 

메서드 설명
schedule(JobDetail jobDetail, Trigger trigger) JobDetail과 Trigger를 사용하여 Job을 스케줄링합니다.
scheduleJob(JobDetail jobDetail, Trigger trigger) schedule()과 같이 JobDetail과 Trigger를 사용하여 Job을 스케줄링합니다.
scheduleJob(Trigger trigger) JobDetail 없이 Trigger만 사용하여 Job을 스케줄링합니다.
rescheduleJob(TriggerKey triggerKey, Trigger newTrigger) 지정된 Trigger의 스케줄을 업데이트합니다.
unscheduleJob(TriggerKey triggerKey) 지정된 Trigger를 해제하여 Job 스케줄링을 취소합니다.
pauseTrigger(TriggerKey triggerKey) 지정된 Trigger를 일시 중지합니다.
resumeTrigger(TriggerKey triggerKey) 지정된 Trigger를 다시 시작합니다.
pauseJob(JobKey jobKey) 지정된 Job을 일시 중지합니다.
resumeJob(JobKey jobKey) 지정된 Job을 다시 시작합니다.

 

※ Cron표현식

 

Cron 표현식은 리눅스 시스템에서 주기적으로 작업을  자동으로 수행하기 위해 사용되는 문법입니다.

- 분, 시, 일, 월, 요일 순서로 입력됩니다.

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 요일 (0 - 6) (0이나 7이 일요일)
|    |    |    +---------- 월 (1 - 12)
|    |    +--------------- 일 (1 - 31)
|    +-------------------- 시 (0 - 23)
+------------------------- 분 (0 - 59)

 

Cron Expression 설명
* * * * * 매 분
*/30 * * * * 30분마다
30 5 * * * 매일 오전 5시 30분
30 5 * * 1 매주 월요일 오전 5시 30분
30 5 1 * * 매월 1일 오전 5시 30분

 

5. Quartz 실행 주기

 

단계 분류 설명
1 스케줄러 초기화 Quartz 스케줄러는 시작되면 먼저 스케줄러를 초기화합니다. 이 초기화 과정에서는 스케줄러에 대한 설정을 로드하고, 자바 애플리케이션 컨텍스트와 연결합니다.
2 작업 스케줄링 Quartz 스케줄러는 작업 스케줄링을 수행합니다. 이 과정에서는 사용자가 등록한 작업을 실행할 시간을 계산하여 스케줄링 테이블에 등록합니다.
3 작업 실행 스케줄링 된 작업이 실행됩니다. Quartz 스케줄러는 스케줄링 된 작업을 실행하기 위해 쓰레드 풀을 사용합니다.
4 작업 완료 작업이 완료되면 Quartz 스케줄러는 작업이 완료되었다는 신호를 받습니다. 이 신호를 받으면 스케줄링 테이블에서 작업을 제거합니다.
5 스케줄러 종료 Quartz 스케줄러는 애플리케이션 종료 시점에 스케줄러를 종료합니다. 이 과정에서는 스케줄링 된 작업을 모두 제거하고, 쓰레드 풀을 종료합니다.

 

 

 

https://adjh54.tistory.com/170#2.%20ScheduledExecutorService%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC%20%EC%9D%B4%EC%9A%A9%ED%95%9C%20%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81-1

https://advenoh.tistory.com/51