[java] Quartz Scheduler와 웹 애플리케이션 연동하기

이 글에서는 Quartz Scheduler를 사용하여 웹 애플리케이션과 스케줄링을 연동하는 방법을 알아보겠습니다. Quartz Scheduler는 자바 기반의 강력하고 유연한 스케줄링 라이브러리로, 주기적인 작업의 실행, 특정 시간에 트리거되는 작업 등을 지원합니다.

1. Quartz Scheduler 라이브러리 추가

먼저 Maven이나 Gradle을 사용하여 프로젝트에 Quartz Scheduler 라이브러리를 추가해야 합니다. 다음은 Maven을 사용하는 경우 pom.xml 파일에 추가해야 할 의존성입니다.

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

dependencies {
    implementation 'org.quartz-scheduler:quartz:2.3.2'
}

의존성 추가 후, 프로젝트를 빌드하면 Quartz Scheduler 라이브러리가 다운로드되고 사용할 준비가 완료됩니다.

2. Job 클래스 생성

Quartz Scheduler에서 실행될 작업을 정의하기 위해 Job 클래스를 생성해야 합니다. 다음은 예시로 사용할 Job 클래스의 예입니다.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 작업 수행 로직 작성
        System.out.println("Hello, Quartz Scheduler!");
    }
}

위의 코드에서 MyJob 클래스는 org.quartz.Job 인터페이스를 구현하고, execute 메서드를 오버라이딩합니다. execute 메서드는 실제 작업을 수행하는 로직을 구현하는 메서드입니다.

3. Scheduler 설정 및 스케줄링

이제 Quartz Scheduler를 설정하고 작업을 스케줄링하는 코드를 작성해보겠습니다. 다음은 웹 애플리케이션의 시작 시점에 Scheduler를 초기화하고, MyJob 작업을 스케줄링하는 코드입니다.

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class MyScheduler {

    public static void main(String[] args) throws SchedulerException {
        // SchedulerFactory 생성
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();

        // Scheduler 인스턴스 생성
        Scheduler scheduler = schedulerFactory.getScheduler();

        // JobDetail 생성
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "myGroup")
                .build();

        // Trigger 생성
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myGroup")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();

        // JobDetail과 Trigger를 Scheduler에 등록
        scheduler.scheduleJob(jobDetail, trigger);

        // Scheduler 시작
        scheduler.start();
    }
}

위의 코드에서 MyScheduler 클래스는 웹 애플리케이션이 시작할 때 실행되는 클래스입니다. main 메서드에서는 다음을 수행합니다.

위의 코드에서는 TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) 부분에서 매 5초마다 작업이 실행되도록 스케줄링 설정을 정의하였습니다. 작업의 스케줄링은 Cron 표현식을 사용하여 다양한 방식으로 설정할 수 있습니다.

결론

이렇게 함으로써 Quartz Scheduler와 웹 애플리케이션을 연동하여 원하는 작업을 주기적으로 실행할 수 있게 되었습니다. Quartz Scheduler는 다양한 기능과 설정을 지원하므로, 필요에 맞게 활용하여 효율적인 작업 스케줄링을 구현할 수 있습니다.

더 자세한 내용은 Quartz Scheduler 공식 문서를 참고하시기 바랍니다.