[java] Quartz Scheduler와 원격 서버 연동하기

Quartz Scheduler는 Java 기반의 오픈 소스 스케줄링 라이브러리로, 다양한 작업을 예약하고 실행할 수 있습니다. 이번 글에서는 Quartz Scheduler를 사용하여 원격 서버와 연동하는 방법에 대해 알아보겠습니다.

1. Quartz Scheduler 설정

먼저, 프로젝트에 Quartz Scheduler를 설정해야 합니다. 다음의 의존성을 프로젝트에 추가하세요.

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

그리고 Quartz Scheduler의 설정 파일인 quartz.properties를 작성하여 원격 서버와의 연동을 설정합니다. 기본적인 설정은 다음과 같습니다.

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099
org.quartz.scheduler.rmi.createRegistry = true

위의 설정에서 org.quartz.scheduler.rmi.exporttrue로 설정하면, 원격 서버에서 스케줄러 인스턴스에 접근할 수 있습니다. org.quartz.scheduler.rmi.registryHostorg.quartz.scheduler.rmi.registryPort는 RMI 레지스트리의 호스트와 포트를 지정합니다.

2. 원격 서버 구성

Quartz Scheduler와 원격 서버를 연동하기 위해서는 원격 서버에서 스케줄러 인스턴스에 접근할 수 있도록 구성해야 합니다.

먼저, 원격 서버에 RMI 레지스트리를 실행하고 설정한 포트로 접속할 수 있도록 해야 합니다. 이를 위해 원격 서버에서 다음의 커맨드를 실행하세요.

$ rmiregistry 1099

그리고 다음과 같이 스케줄러를 생성하고 원격 서비스로 등록해야 합니다.

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

public class RemoteSchedulerServer {

    public static void main(String[] args) throws SchedulerException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        ((RemoteScheduler) scheduler).initialize();

        scheduler.start();
    }
}

위의 코드에서 RemoteSchedulerServer 클래스는 스케줄러를 생성하고 원격 서비스로 등록합니다. scheduler.start()를 호출하여 스케줄러를 시작합니다.

3. 원격 서버에서 스케줄러 사용

원격 서버에 스케줄러를 등록한 후, 클라이언트에서 해당 스케줄러에 접근하여 작업을 예약하고 실행할 수 있습니다.

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

public class RemoteSchedulerClient {

    public static void main(String[] args) throws SchedulerException {
        Scheduler scheduler = new StdSchedulerFactory().getScheduler("MyScheduler");
        scheduler.start();

        JobDetail job = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "myGroup")
                .build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myGroup")
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(1))
                .build();

        scheduler.scheduleJob(job, trigger);
    }
}

위의 코드에서 RemoteSchedulerClient 클래스는 원격 서버에 접속하여 작업을 예약합니다. scheduler.start()를 호출하여 스케줄러를 시작하고, JobTrigger를 생성하여 작업을 예약합니다.

4. 결론

Quartz Scheduler를 사용하여 원격 서버와의 연동을 구현하는 방법을 알아보았습니다. 원격 서버에 스케줄러를 등록한 후에는 클라이언트에서 해당 스케줄러를 사용하여 작업을 예약하고 실행할 수 있습니다. 이를 통해 분산 환경에서도 효과적인 작업 스케줄링을 구현할 수 있습니다.

참고 자료