본문 바로가기

기술 공부/Spring

[spring boot] Quartz Job 란?

반응형

Quartz란?

  • 언어: Java 기반으로 작성된 오픈소스 스케줄러 라이브러리
  • 용도: 특정 시간이나 주기에 맞춰 작업(Job)을 실행할 수 있게 해줌
  • 활용 범위: 단순 반복 작업(cron)부터, 여러 Job을 조합한 복잡한 워크플로우까지 지원

Quartz Job이란?

  • Quartz에서 실행할 “작업 단위”
  • org.quartz.Job 인터페이스를 구현해야 하며, execute(JobExecutionContext context) 메소드 안에 실행할 로직을 정의
  • 스케줄러는 Job과 Trigger를 매핑해서, 특정 시점에 Job이 실행되도록 함

예시

public class CompleteReservationJob implements Job {
    @Autowired
    private SqlSession sqlSession;

    @Override
    public void execute(JobExecutionContext context) {
        Map<String, Object> param =
            (Map<String, Object>) context.getJobDetail().getJobDataMap().get("param");
        sqlSession.update("scheduleMapper.updateStsToComplete", param);
    }
}

장점

  1. 강력한 스케줄링 기능
    • 단순 cron 표현식부터, 캘린더 기반 스케줄링까지 지원
    • 특정 요일 제외, 공휴일 제외 등 유연한 조건 처리 가능
  2. 클러스터링 지원
    • 여러 서버에서 같은 스케줄러를 공유해서 실행 가능
    • 대규모 서비스에서도 안정적으로 동작
  3. Job 데이터 관리
    • JobDataMap을 통해 실행 시점마다 데이터 전달 가능
    • 상태 기반 Job도 구현할 수 있음
  4. 스프링과 통합 용이
    • SchedulerFactoryBean을 통해 Spring 환경에서 바로 사용 가능
    • Spring Boot Starter도 제공됨

단점

  1. 무겁다
    • 단순히 “매일 자정에 실행” 같은 간단한 작업에는 오버킬일 수 있음
    • 라이브러리 크기가 크고 설정이 복잡해짐
  2. 학습 난이도
    • Job, Trigger, Scheduler, JobFactory 등 개념이 많아서 처음에는 진입 장벽이 있음
  3. 대체제 존재
    • 단순 스케줄링이라면 Spring의 @Scheduled가 더 간단하고 코드량도 적음

Quartz가 필요한 상황

  • 단순 반복이 아니라, 정교한 스케줄링이 필요한 경우
  • 예: 특정 요일 제외, 동적으로 Job 등록/해제, 클러스터 환경에서 스케줄 관리
  • Job 실행이 DB 기반으로 관리되어야 할 때 (Quartz는 Job/Trigger 정보를 DB에 저장 가능)
  • 하나의 서비스에서 수백 개 이상의 스케줄을 동시에 안정적으로 관리해야 할 때

요약

  • Quartz는 Java 기반 스케줄러 라이브러리
  • Quartz Job은 실제로 실행할 작업 단위
  • 장점은 강력한 스케줄링/클러스터링/데이터 관리, 단점은 무겁고 복잡하다는 점
  • 단순 반복은 @Scheduled, 복잡한 스케줄 관리가 필요하면 Quartz

 

Spring @Scheduled vs Quartz 비교

구분 Spring @Scheduled Quartz

언어/환경 Spring 전용 (Java, Spring Boot에서 기본 제공) Java 오픈소스 라이브러리 (Spring 외에도 단독 사용 가능)
사용 방법 메서드 위에 @Scheduled(cron = "...") 어노테이션만 붙이면 됨 Job 클래스 구현 + Trigger/Scheduler 설정 필요
설정 난이도 매우 단순 (코드 몇 줄) 상대적으로 복잡 (Job, Trigger, Scheduler, JobFactory 등 개념 많음)
기능 범위 cron 기반 반복 실행, fixedDelay, fixedRate 정도 cron + 캘린더 기반 스케줄링, Job 데이터 관리, Job 상태 저장, 여러 Trigger 조합 등 훨씬 강력
클러스터링 기본 지원 안 함 (단일 인스턴스에서만 실행) 클러스터 모드 지원 (여러 서버에서 같은 스케줄 공유 가능)
상태 관리 Job 상태/이력 저장 불가 DB에 Job/Trigger 상태 저장 가능
확장성 간단한 주기적 작업에 적합 대규모/복잡한 스케줄 관리에 적합
학습 곡선 낮음 높음

요약

  • 단순히 “매일 0시에 실행” 같은 간단한 반복 작업 → @Scheduled
  • Job 상태를 DB에 저장하거나, 클러스터 환경에서 정교한 스케줄 관리가 필요 → Quartz

 

다음글
2025.08.27 - [기술 공부/Spring] - [spring boot] Spring @Scheduled vs Quartz _ 사용법
반응형