Quartz는 Job Scheduling 라이브러리다.
Spring Scheduler는 사용해봤으니 대충은 알고있는데, Spring Quartz 너는 왜 존재하는 거냐 너가 궁금하다.
Spring Quartz
공식 홈페이지에서는 이렇게 소개한다.
Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components that may execute virtually anything you may program them to do.
Quartz는 가장 작은 독립 실행형 애플리케이션부터 가장 큰 전자 상거래 시스템에 이르기까지 사실상 모든 Java 애플리케이션 내에 통합될 수 있는 풍부한 기능을 갖춘 오픈 소스 작업 스케줄링 라이브러리입니다. Quartz는 수십, 수백, 심지어 수만 개의 작업을 실행하기 위한 간단하거나 복잡한 일정을 만드는 데 사용할 수 있습니다. 작업이 프로그래밍할 수 있는 거의 모든 것을 실행할 수 있는 표준 Java 구성 요소로 정의된 작업입니다.
Quartz 는 Job Scheduling 을 구현할 수 있는 오픈 소스 라이브러리이며 Java 어플리케이션에서 사용, 통합이 가능하다. 간단하거나 복잡한 스케줄들을 수십 개에서 수만 개 까지 구현할 수 있다. 스케줄의 종료 시점부터 다음 실행 시점까지 시간 간격을 두는 인터벌(Interver) 형식의 스케줄링이 가능하다. 혹은 크론 표현식(cron expression) 방식을 이용한 복잡한 스케줄링도 지원한다.
Job Scheduling?
Job? Batch Job? 두 용어가 있는데 둘의 차이를 잘 몰랐다.
Spring Batch 도 의미는 알고 있는데 Quartz 와 Spring Batch 의 Job과 Batch Job 개념이 공부하기전에는 혼동해서 사용했기에 다시 정리 하는 겸 짚고 넘어가자
Job
주로 대용량 처리하는 작업이나 프로세스를 의미
Scheduling
특정한 시간이나 이벤트 발생 등의 조건을 만족할 시 Job을 자동으로 실행하는 것을 의미
Batch Job
일괄처리. 여러 개의 작업(Job)을 중단 없이 연속적으로 처리하는 일을 의미한다.
사용자와의 상호 작용 없이 여러 작업(Job)들을 미리 정해진 순서에 따라 일괄적으로 처리한다.
정기적인 수행을 위해 Job Scheduling 기능을 이용해야 한다.
Quartz 특징 및 장단점
특징 및 장점
- 데이터베이스를 기반으로 클러스터링 기능을 제공한다.
- 시스템의 failover 와 라운드-로빈 (round-robbin) 방식의 분산 처리를 지원한다.
- 기본적으로 여러가지 플러그인을 제공한다.
- ShutdownHookingPlugin - JVM 종료 이벤트를 확인하고 스케줄러에게 종료를 알린다.
- LoggingJobHistory - Job 실행에 대한 로그를 남긴다.
단점
- 클러스터링 기능을 제공하지만, 랜덤 방식이라 완벽한 분산 처리는 안된다.
- ADMIN UI 를 제공하지 않는다.
- 스케줄링 실행에 대한 이력을 보관하지 않는다.
Quartz 기본 개념
quartz 에는 Job, JobDetail, Trigger, JobListener, TriggerListener 등이 있다.
Job 은 위에서 설명했으니,, 넘어가고
JobDetail
Job에 대한 구체적인 정보를 담는 instance 이다.
Trigger
Job의 실행조건이다.
여기서 cron을 사용하여 Scheduling 할 수 있다.
JobListener
Job 프로세스가 실행 될 때 발생하게 되는 이벤트이다.
TriggerListener
Tirgger가 실행 될 때 발생하게 되는 이벤트이다.
위에서 Listener는 필수 조건이 아니다.
Job, JobDetail, Trigger 가 필수 조건, 이를 구현하면 된다.
구현 방법은 개인프로젝트 진행하면서 나중에 블로그에 쓸 예정, 개념적으로 알아두자!