ABOUT ME

Today
Yesterday
Total
  • 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 (트리거):

    • TriggerJob이 언제 실행될지를 정의하는 객체입니다. Quartz는 시간 기반으로 작업을 예약하는데, 이를 위해 Trigger가 사용됩니다.
    • Trigger는 다양한 방식으로 작업을 예약할 수 있습니다. 대표적으로 SimpleTriggerCronTrigger가 있습니다.
      • SimpleTrigger: 지정된 간격마다 작업을 반복하도록 설정할 수 있습니다.
      • CronTrigger: cron 표현식을 사용하여 더 복잡한 스케줄을 설정할 수 있습니다.

    예시:

    Trigger trigger = TriggerBuilder.newTrigger()
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10) // 10초마다 실행
                .repeatForever()) // 무한 반복
            .build();

     

    3. Scheduler (스케줄러):

    • SchedulerJobTrigger를 연결하고, JobTrigger에 의해 지정된 시간에 실행되도록 관리하는 역할을 합니다.
    • Quartz 스케줄러는 스케줄링된 Job을 관리하고, 트리거의 시점에 맞추어 Job을 실행합니다.

    예시:

    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    scheduler.start();
    scheduler.scheduleJob(jobDetail, trigger);

     

    Quartz Scheduler 작동 흐름

    1. Job 생성:
      • 먼저 실행할 작업을 정의하는 Job 클래스를 생성합니다. 이 클래스는 Job 인터페이스를 구현하고, execute() 메서드 안에서 실제 작업을 정의합니다.
    2. Trigger 설정:
      • Trigger 객체를 생성하여 Job이 언제 실행될지 결정합니다. SimpleScheduleBuilder나 CronScheduleBuilder를 사용하여 주기적인 실행 간격이나 일정 등을 설정할 수 있습니다.
    3. Job과 Trigger 연결:
      • Scheduler는 scheduleJob() 메서드를 사용하여 JobTrigger를 연결합니다. 이 과정에서 스케줄러는 Trigger가 지정된 시점에 Job을 실행할 수 있도록 설정합니다.
    4. Job 실행:
      • Scheduler는 설정된 Trigger에 따라 주기적으로 Job을 실행합니다. 예를 들어, SimpleTrigger는 지정된 간격마다 실행되고, CronTrigger는 cron 표현식에 맞는 특정 시간에 실행됩니다.
    5. Job 완료 후 반복:
      • 설정된 주기마다 작업이 반복되며, 주기적인 작업이 종료될 때까지 Job이 계속 실행됩니다. 반복 주기를 종료하려면 스케줄을 취소하거나 중지해야 합니다.

    Quartz에서의 Job 실행 흐름:

    1. JobDetail 객체가 Job을 정의합니다.
    2. Trigger 객체가 Job의 실행 시점을 정의합니다.
    3. SchedulerJobDetailTrigger를 받아 Job을 실행합니다.
    4. Job이 실행되면, 정의된 작업이 수행됩니다.
    5. 작업이 끝나면, Trigger에 따라 작업이 반복되거나 종료됩니다.

    Quartz Scheduler의 특징

    1. 다양한 스케줄링 옵션:
      • Cron 표현식을 사용하여 복잡한 스케줄을 설정할 수 있습니다. 예를 들어, "매일 12시 정각에 실행", "매주 월요일 오전 9시에 실행" 등과 같은 조건을 설정할 수 있습니다.
    2. 작업 반복 및 종료 설정:
      • 작업을 반복할 횟수나 종료 조건을 설정할 수 있습니다. 예를 들어, 10번만 실행하도록 설정할 수 있습니다.
    3. JobPersistence:
      • Quartz는 작업의 **영속성(persistence)**을 지원하여, 스케줄된 작업이 시스템이 재시작되거나 장애가 발생해도 작업이 계속 진행되도록 할 수 있습니다.
    4. 동시성 처리:
      • 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는 시간 기반의 작업 스케줄링을 처리하는 데 강력하고 유연한 도구로, 다양한 종류의 작업 스케줄링을 지원합니다.

    반응형

    댓글

Designed by Tistory.