스케줄링(Scheduling)의 개념, Quartz 스케줄러 (Open Source Batch Scheduler)

CODEDRAGON Development/Software Engineering

반응형

 

♣스케줄링(Scheduling)의 개념

Scheduling 서비스는 애플리케이션 서버 내에서 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 기능(Job Scheduler라고도 한다.)

 

 

 

Quartz 스케줄러 (Open Source Batch Scheduler)

 

Quartz 스케줄러 구성 및 제공기능

Quartz 스케줄러는 수행 작업을 정의하는 Job과 실행 스케줄을 정의하는 Trigger를 분리함으로써 유연성을 제공한다.

Job과 실행 스케줄을 정의한 경우, Job은 그대로 두고 실행 스케줄만을 변경할 수 있다. 또한 하나의 Job에 여러 개의 실행 스케줄을 정의할 수 있다.

 

주요 요소

설명

Scheduler

Quartz 실행 환경을 관리하는 핵심 개체이다.

Job

사용자가 수행할 작업을 정의하는 인터페이스로서 Triger 개체를 이용하여 스케줄할 수 있다.

JobDetail

작업명과 작업그룹과 같은 수행할 Job에 대한 상세 정보를 정의하는 개체이다.

Triger

정의한 Job 개체의 실행 스케줄을 정의하는 개체로서 Scheduler 개체에게 Job 수행시점을 알려주는 개체이다.

 

 

Quartz 스케줄러 사용 예제

Quartz 스케줄러의 이해를 돕기 위해 간단한 예제를 살펴본다. 다음 예는 Quartz 매뉴얼에서 참조한 것으로 Quartz를 사용하는 방법과 사용자 Job을 설정하는 방법을 보여준다.

 

 

사용자 정의 Job

사용자는 Job 개체를 생성하기 위해 org.quartz.Job 인터페이스를 구현하고 심각한 오류가 발생한 경우 JobExecutionException 예외를 던질 수 있다. Job 인터페이스는 단일 메서드로 execute()을 정의한다.

public class DumbJob implements Job {

 

public void execute(JobExecutionContext context) throws JobExecutionException {

System.out.println("DumbJob is executing.");

}

}

DumbJob Job 인터페이스의 execute() 메서드를 구현한다.

execute() 메서드는 단순히 Job이 수행됨을 표시하는 메시지를 출력한다.

 

 

Quartz 사용 코드

JobDetail jobDetail = new JobDetail("myJob",// Job

sched.DEFAULT_GROUP, // Job 그룹명('null' 값인 경우 DEFAULT_GROUP 으로 정의됨)

DumbJob.class); // 실행할 Job 클래스

 

Trigger trigger = TriggerUtils.makeDailyTrigger(8, 30); // 매일 08 30 실행

trigger.setStartTime(new Date()); // 즉시 시작

trigger.setName("myTrigger");

 

sched.scheduleJob(jobDetail, trigger);

우선 Job 설정을 위해 JobDetail 클래스를 정의한다.

TriggerUtils을 이용하여 매일 830분 실행하는 Trigger를 생성한다.

마지막으로, Scheduler JobDetail Trigger를 등록한다.