오늘 작성할 글은 최근 스케쥴링 작업과 관련하여 도움이 되는 쿼츠(Quartz)라는 JOB 스케줄러 라이브러리이다. 시리즈로 정리를 진행할 것이며, 첫 글은 간단한 개요와 설명으로 시작하려고 한다.
최근 스케쥴링을 통한 API 데이터 수집 등의 작업을 많이 하고 있다가 팀원의 공유로 해당 시리즈를 작성하게 되었다.
쿼츠(Quartz)는 자바 기반의 오픈 소스 스케줄링 라이브러리로, 작업을 일정한 시간 간격으로 실행하거나 특정 시간에 실행할 수 있도록 도와준다. 주로 백그라운드 작업이나 주기적인 작업을 관리하는데 사용한다.
쿼츠(Quartz):
- 쿼츠는 독립적인 스케줄링 라이브러리로, 다양한 기능을 제공하며, 복잡한 스케줄링 요구사항을 처리
- Job, Trigger, Scheduler와 같은 구성 요소를 사용하여 세밀한 제어가 가능
- 클러스터링, 퍼시스턴스, 다양한 트리거 타입(CronTrigger, SimpleTrigger 등)을 지원
Java @Scheduled:
- @Scheduled 어노테이션은 Spring Framework에서 제공하는 간단한 스케줄링 기능
- 복잡한 스케줄링에는 한계가 존재
- Cron 표현식, 고정 간격(fixedRate), 고정 지연(fixedDelay) 등 기본적인 스케줄링 옵션만 제공
쿼츠(Quartz):
- 데이터베이스 작업, 이메일 발송, 다양한 조건에 따른 작업 실행 등에서 유용
- 작업의 상태를 저장하고, 작업의 실행 결과를 추적할 수 있는 기능을 제공
Java @Scheduled:
- 간단하고 빠르게 사용할 수 있는 편리한 방법이지만 특별한 기능은 없음
작업 스케줄링: 쿼츠는 작업(Job)을 정의하고 이를 특정 트리거(Trigger)에 따라 실행함. 작업은 Job 인터페이스를 구현하여 정의
유연한 트리거링: 다양한 트리거를 지원하여, 단순한 주기적 실행부터 복잡한 일정 기반 실행까지 가능
Persistency: 데이터베이스와 통합하여 작업과 트리거 정보를 저장할 수 있어, 서버 재시작 후에도 작업을 유지
클러스터링: 여러 서버에서 하나의 Quartz 인스턴스를 공유하여 작업을 분산 실행
다양한 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번 실행하도록 설정하였다.
오늘 정리한 내용은 쿼츠에 대한 개념과 간단한 설명이지만 다음 포스팅에서는 실제 활용사례를 적용하여 작성하도록 하겠다. 또한 해당 스케쥴링 작업을 모니터링 할 수 있게 구현이 가능하다는 얘기를 들었다. 이거까지 구현하는 것이 최종 목표이다👍