쿼츠(Quartz)-개요

개미는뚠뚠·2024년 12월 1일
0

Quartz

목록 보기
1/2
post-thumbnail

오늘 작성할 글은 최근 스케쥴링 작업과 관련하여 도움이 되는 쿼츠(Quartz)라는 JOB 스케줄러 라이브러리이다. 시리즈로 정리를 진행할 것이며, 첫 글은 간단한 개요와 설명으로 시작하려고 한다.

최근 스케쥴링을 통한 API 데이터 수집 등의 작업을 많이 하고 있다가 팀원의 공유로 해당 시리즈를 작성하게 되었다.


🍞쿼츠(Quartz)란?

쿼츠(Quartz)는 자바 기반의 오픈 소스 스케줄링 라이브러리로, 작업을 일정한 시간 간격으로 실행하거나 특정 시간에 실행할 수 있도록 도와준다. 주로 백그라운드 작업이나 주기적인 작업을 관리하는데 사용한다.


🍞기존 @scheduler와의 차이점

  1. 구현 방식의 차이

쿼츠(Quartz):

  • 쿼츠는 독립적인 스케줄링 라이브러리로, 다양한 기능을 제공하며, 복잡한 스케줄링 요구사항을 처리
  • Job, Trigger, Scheduler와 같은 구성 요소를 사용하여 세밀한 제어가 가능
  • 클러스터링, 퍼시스턴스, 다양한 트리거 타입(CronTrigger, SimpleTrigger 등)을 지원

Java @Scheduled:

  • @Scheduled 어노테이션은 Spring Framework에서 제공하는 간단한 스케줄링 기능
  • 복잡한 스케줄링에는 한계가 존재
  • Cron 표현식, 고정 간격(fixedRate), 고정 지연(fixedDelay) 등 기본적인 스케줄링 옵션만 제공
  1. 유연성

쿼츠(Quartz):

  • 데이터베이스 작업, 이메일 발송, 다양한 조건에 따른 작업 실행 등에서 유용
  • 작업의 상태를 저장하고, 작업의 실행 결과를 추적할 수 있는 기능을 제공

Java @Scheduled:

  • 간단하고 빠르게 사용할 수 있는 편리한 방법이지만 특별한 기능은 없음

🍞주요 특징

  1. 작업 스케줄링: 쿼츠는 작업(Job)을 정의하고 이를 특정 트리거(Trigger)에 따라 실행함. 작업은 Job 인터페이스를 구현하여 정의

  2. 유연한 트리거링: 다양한 트리거를 지원하여, 단순한 주기적 실행부터 복잡한 일정 기반 실행까지 가능

  3. Persistency: 데이터베이스와 통합하여 작업과 트리거 정보를 저장할 수 있어, 서버 재시작 후에도 작업을 유지

  4. 클러스터링: 여러 서버에서 하나의 Quartz 인스턴스를 공유하여 작업을 분산 실행

  5. 다양한 API: Java, .NET 등 다양한 플랫폼에서 사용될 수 있는 API를 제공


🍞구성 요소

  • Job: 수행할 작업의 내용을 정의

  • Trigger: 작업이 언제 실행될지를 정의하며 CronTrigger와 SimpleTrigger 두 가지 유형이 존재

  • Scheduler: Job과 Trigger를 관리하며, 작업을 실행하는 중심 역할

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

Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("myTrigger", "group1")
    .startNow()
    .withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(10, 1))
    .build();

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

❗해당 코드는 MyJob이라는 작업을 정의하고, 1초 간격으로 10번 실행하도록 설정하였다.


오늘 정리한 내용은 쿼츠에 대한 개념과 간단한 설명이지만 다음 포스팅에서는 실제 활용사례를 적용하여 작성하도록 하겠다. 또한 해당 스케쥴링 작업을 모니터링 할 수 있게 구현이 가능하다는 얘기를 들었다. 이거까지 구현하는 것이 최종 목표이다👍

0개의 댓글