Kim-Baek 개발자 이야기

Quartz 란? 본문

개발/Spring

Quartz 란?

김백개발자 2024. 11. 15. 17:20

1. Quartz란?

1.1. Quartz 소개

Quartz는 오픈 소스 스케줄링 라이브러리로, 복잡한 스케줄링 작업을 간편하게 구현할 수 있도록 도와줍니다. 주기적인 작업 실행, 일정한 간격으로 작업 실행, 특정 시간에 작업 실행 등 다양한 방식으로 작업을 스케줄링할 수 있습니다.

1.2. 주요 기능

  • 다양한 트리거 지원: Cron 트리거, Simple 트리거 등 다양한 트리거 유형을 지원하여 유연한 스케줄링이 가능합니다.
  • 작업 지속성: 작업(Job)과 트리거(Trigger)를 데이터베이스에 저장하여 애플리케이션 재시작 후에도 스케줄이 유지됩니다.
  • 클러스터링 지원: 여러 인스턴스에서 Quartz를 클러스터링하여 고가용성을 구현할 수 있습니다.
  • 잡 리스너 및 트리거 리스너: 작업 실행 전후에 특정 로직을 실행할 수 있는 리스너를 제공합니다.
  • 잡 데이터맵: 작업에 필요한 데이터를 트리거와 함께 전달할 수 있습니다.

2. Spring과 Quartz 통합

Spring과 Quartz를 통합하면 스프링의 의존성 주입(DI), 트랜잭션 관리, AOP 등의 기능을 Quartz 작업에 쉽게 적용할 수 있습니다. Spring은 Quartz와의 통합을 위해 다양한 지원을 제공합니다.

2.1. Spring Boot에서 Quartz 사용하기

Spring Boot 프로젝트에서 Quartz를 사용하기 위해 필요한 설정 방법을 소개합니다.

의존성 추가

먼저, Maven 또는 Gradle 프로젝트에 Quartz 관련 의존성을 추가합니다.

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

3. Quartz의 주요 구성 요소

Quartz는 주로 다음과 같은 구성 요소로 이루어져 있습니다:

  1. Job: 실행할 작업을 정의하는 인터페이스입니다.
  2. JobDetail: 특정 작업(Job)을 설명하는 클래스입니다.
  3. Trigger: 작업이 언제 실행될지를 정의하는 클래스입니다.
  4. Scheduler: Quartz의 핵심 컴포넌트로, 작업의 스케줄링과 실행을 관리합니다.

3.1. Job

org.quartz.Job 인터페이스를 구현하여 작업을 정의합니다.

예제:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

@Component
public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Quartz Job 실행 중...");
        // 비즈니스 로직 수행
    }
}

3.2. JobDetail

JobDetail은 특정 Job과 관련된 메타데이터를 담고 있습니다. Spring에서는 JobDetailFactoryBean을 사용하여 JobDetail을 생성할 수 있습니다.

예제:

import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail myJobDetail() {
        return newJob(MyJob.class)
                .withIdentity("myJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger myJobTrigger() {
        return newTrigger()
                .forJob(myJobDetail())
                .withIdentity("myJobTrigger")
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(60)
                        .repeatForever())
                .build();
    }
}

3.3. Trigger

Trigger는 Job이 언제 실행될지를 정의합니다. 대표적인 트리거는 SimpleTrigger와 CronTrigger가 있습니다.

  • SimpleTrigger: 고정된 간격으로 작업을 반복 실행합니다.
  • CronTrigger: Cron 표현식을 사용하여 복잡한 스케줄을 설정합니다.

CronTrigger 예제:

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

@Bean
public Trigger cronJobTrigger() {
    return newTrigger()
            .forJob(myJobDetail())
            .withIdentity("cronTrigger")
            .withSchedule(cronSchedule("0 0/5 * * * ?")) // 매 5분마다 실행
            .build();
}
반응형

'개발 > Spring' 카테고리의 다른 글

SLF4J 와 Logback  (1) 2024.11.20
Spring Webflux 란  (0) 2024.11.18
JPA N+1 문제  (0) 2024.11.14
Apache Kafka 란?  (0) 2024.11.10
RabbitMq 란  (1) 2024.11.09
Comments