-
Quartz Scheduler - 쿼츠스케줄러배치작업/Scheduler 2025. 4. 3. 14:20반응형
Quartz Scheduler는 Java 기반의 스케줄링 라이브러리로, 주로 애플리케이션에서 주기적인 작업(예: 백그라운드 작업, 배치 작업 등)을 예약하고 실행하는 데 사용됩니다. Quartz는 고도로 구성 가능하고 유연한 작업 스케줄링을 제공하며, 시간 기반의 작업 스케줄링 기능을 제공합니다.
Quartz Scheduler의 기본 작동 원리
Quartz Scheduler는 Job, Trigger, Scheduler 세 가지 핵심 구성 요소로 작동합니다. 이 구성 요소들은 각각의 역할을 수행하여, 원하는 시점에 작업을 실행하도록 합니다.
1. Job (작업:
- Quartz에서 Job은 실제로 수행할 작업을 정의하는 객체입니다. Job 인터페이스를 구현한 클래스를 생성하여, 실행할 로직을 작성합니다.
- Job 클래스는 execute() 메서드를 구현하며, 이 메서드에서 원하는 작업을 수행합니다.
예시:
public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { // 실행할 작업 내용 System.out.println("작업이 실행되었습니다!"); } }
2. Trigger (트리거):
- Trigger는 Job이 언제 실행될지를 정의하는 객체입니다. Quartz는 시간 기반으로 작업을 예약하는데, 이를 위해 Trigger가 사용됩니다.
- Trigger는 다양한 방식으로 작업을 예약할 수 있습니다. 대표적으로 SimpleTrigger와 CronTrigger가 있습니다.
- SimpleTrigger: 지정된 간격마다 작업을 반복하도록 설정할 수 있습니다.
- CronTrigger: cron 표현식을 사용하여 더 복잡한 스케줄을 설정할 수 있습니다.
예시:
Trigger trigger = TriggerBuilder.newTrigger() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) // 10초마다 실행 .repeatForever()) // 무한 반복 .build();
3. Scheduler (스케줄러):
- Scheduler는 Job과 Trigger를 연결하고, Job이 Trigger에 의해 지정된 시간에 실행되도록 관리하는 역할을 합니다.
- Quartz 스케줄러는 스케줄링된 Job을 관리하고, 트리거의 시점에 맞추어 Job을 실행합니다.
예시:
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); scheduler.scheduleJob(jobDetail, trigger);
Quartz Scheduler 작동 흐름
- Job 생성:
- 먼저 실행할 작업을 정의하는 Job 클래스를 생성합니다. 이 클래스는 Job 인터페이스를 구현하고, execute() 메서드 안에서 실제 작업을 정의합니다.
- Trigger 설정:
- Trigger 객체를 생성하여 Job이 언제 실행될지 결정합니다. SimpleScheduleBuilder나 CronScheduleBuilder를 사용하여 주기적인 실행 간격이나 일정 등을 설정할 수 있습니다.
- Job과 Trigger 연결:
- Scheduler는 scheduleJob() 메서드를 사용하여 Job과 Trigger를 연결합니다. 이 과정에서 스케줄러는 Trigger가 지정된 시점에 Job을 실행할 수 있도록 설정합니다.
- Job 실행:
- Scheduler는 설정된 Trigger에 따라 주기적으로 Job을 실행합니다. 예를 들어, SimpleTrigger는 지정된 간격마다 실행되고, CronTrigger는 cron 표현식에 맞는 특정 시간에 실행됩니다.
- Job 완료 후 반복:
- 설정된 주기마다 작업이 반복되며, 주기적인 작업이 종료될 때까지 Job이 계속 실행됩니다. 반복 주기를 종료하려면 스케줄을 취소하거나 중지해야 합니다.
Quartz에서의 Job 실행 흐름:
- JobDetail 객체가 Job을 정의합니다.
- Trigger 객체가 Job의 실행 시점을 정의합니다.
- Scheduler가 JobDetail과 Trigger를 받아 Job을 실행합니다.
- Job이 실행되면, 정의된 작업이 수행됩니다.
- 작업이 끝나면, Trigger에 따라 작업이 반복되거나 종료됩니다.
Quartz Scheduler의 특징
- 다양한 스케줄링 옵션:
- Cron 표현식을 사용하여 복잡한 스케줄을 설정할 수 있습니다. 예를 들어, "매일 12시 정각에 실행", "매주 월요일 오전 9시에 실행" 등과 같은 조건을 설정할 수 있습니다.
- 작업 반복 및 종료 설정:
- 작업을 반복할 횟수나 종료 조건을 설정할 수 있습니다. 예를 들어, 10번만 실행하도록 설정할 수 있습니다.
- JobPersistence:
- Quartz는 작업의 **영속성(persistence)**을 지원하여, 스케줄된 작업이 시스템이 재시작되거나 장애가 발생해도 작업이 계속 진행되도록 할 수 있습니다.
- 동시성 처리:
- Quartz는 여러 스레드를 사용하여 작업을 병렬로 처리할 수 있습니다. 이를 통해 여러 작업을 동시에 실행하거나, 다른 스케줄러들이 독립적으로 동작하도록 할 수 있습니다.
Quartz Scheduler의 예시
다음은 간단한 Quartz Scheduler 사용 예시입니다:
public class MyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("작업이 실행되었습니다!"); } } public class QuartzSchedulerExample { public static void main(String[] args) throws SchedulerException { // 스케줄러 생성 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // JobDetail 설정 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // Trigger 설정 (10초마다 반복) Trigger trigger = TriggerBuilder.newTrigger() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); // Job과 Trigger를 스케줄러에 등록 scheduler.scheduleJob(job, trigger); // 스케줄러 시작 scheduler.start(); } }
결론
Quartz Scheduler는 작업, 트리거, 스케줄러의 세 가지 핵심 요소로 구성되어 있으며, 주기적으로 실행될 작업을 정의하고, 트리거를 설정하여 작업이 실행될 시점을 관리합니다. Quartz는 시간 기반의 작업 스케줄링을 처리하는 데 강력하고 유연한 도구로, 다양한 종류의 작업 스케줄링을 지원합니다.
반응형