on
Spring Batch, Quartz 1
Spring Batch, Quartz 1
728x90
■배치 플랫폼 구성 작업
최근 회사에서 스프링 배치 플랫폼 구성 작업을 받았다.
우선 난 배치라는 것을 개념만 알고 있고 인프라 관리자에게 job 등록 요청만 해본 터라
배치에 대한 정확한 이해가 필요했다.
배치(Batch)는 사전적 의미로 집단, 한 회분, 일괄 등의 의미이다.
IT에선 일괄의 의미로 가장 많이 사용된다. (뭐 따지고 보면 모두 같은 뜻이긴 한 것 같다)
다시 말해 "일괄 처리(Batch Processing)이란 일괄적으로 대량의 작업을 수행하는 것"
이라고 할 수 있다. 보통 일괄 처리는 트래픽이 적은 특정 시간에 스케줄러에 의해 반복되어
실행된다.
■어떤 배치 플랫폼을 사용할까?
우리 회사는 Spring Boot 환경이기 때문에 Batch 플랫폼도 Spring에서 제공하는
Spring Batch를 사용하기로 했다. 기억보단 기록을의 조졸두님에 의하면
Batch Application은 다음의 조건을 만족해야 한다고 한다.
- 대용량 데이터 -> 대량의 데이터를 처리할 수 있어야 한다 - 자동화 -> 특별한 경우가 아니라면 사용자 개입 없이 실행될 수 있어야 한다. - 견고성 -> 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 한다. - 신뢰성 -> 로깅, 알림 등을 통해 무엇이 잘못되었는지 추적할 수 있어야 한다. - 성능 -> 지정한 시간 안에 처리를 완료하거나, 다른 어플리케이션을 방해하지 않아야 한다.
2007년에 탄생한 Spring Batch는 위 조건들을 모두 만족한다고 한다 (역시 믿고 쓰는
스프링) 당연한 이야기겠지만, Spring Batch는 Spring의 특성을 그대로 가지고 있다.
참고로 Spring Batch는 대용량 데이터 일괄 처리 프레임워크이기 때문에 스케줄링에
대한 기능은 없다. 따라서 Spring Batch는 보통 Quartz라는 스케줄러와 함께 사용된다.
최근엔 스프링 자체에서 제공하는 Spring scheduler(@Scheduled)와 함께 사용되기도 한다.
■어떤 스케줄러를 사용할까?
배치 플랫폼을 정했으니 이젠 어떤 스케줄러를 사용할지 고민이 되었다.
두 가지 선택지가 있는데, 하나는 Quartz이고 다른 하나는 Spring scheduler이다.
우선 Quartz는 Spring shceduler보다 자료가 많다. 아무래도 더 오래된 스케줄러이기
때문인 듯 하다.
spring batch "@scheduled" 로 검색시 -> 약 12,400개 spring batch "org.quartz" 로 검색시 -> 약 32,700개
Quartz는 Spring scheduler보다 복잡하고 기능이 많다. 이 역시 오래된 스케줄러이기 때문에
따라오는 특징인 것 같다.
Quartz의 첫 번째 장점 :: Clustering
가장 큰 장점으로는 Clustering을 꼽을 수 있다. Quartz는 Database 기반으로
Scheduler Key와 Trigger Key를 사용해 모든 Schedule을 Clustering 한다.
즉, DB를 기반으로 Scheduler 제어가 가능하다. 이 특징은 런타임에 다양한 작업을
가능하게 한다. 또한 Job에 대한 통계를 계산해볼 수도 있다.
Quartz의 두 번째 장점 :: Scheduling에 최적화된 구조 제공
Quartz는 Scheduler, Trigger, JobDetail 등의 구조를 통해 Scheduling을 지원한다.
- Scheduler : 스케줄러와 상호작용하기 위한 API - Trigger : 작업이 실행될 일정을 정의 - JobDetail : 작업의 인스턴스를 정의
Scheduler API를 통해 scheduler의 상태를 조절할 수 있다. 대기, 재시작 등의 명령을 각
스케줄러에게 내리는 등 다양한 컨트롤이 가능하다. 또한 서버가 종료됐을때, 그 시간에
실행됐어야 할 스케줄러들을 해당 서버 재시작시 바로 실행시킬 수 있다.
Quartz 장점
https://stackoverflow.com/questions/7434634/is-quartz-scheduler-no-longer-useful-with-spring-from-3-0-version-onwards
https://stackoverflow.com/questions/4385719/spring-scheduling-scheduled-vs-quartz
https://stackoverflow.com/questions/52644193/triggers-misfire-in-quartz-scheduler
이번엔 @Scheduled의 장점에 대해 찾아봤다.
일단 매우 간단하다. 스프링 3.0 이상에선 별도의 의존성 추가 없이 바로 스케줄링을
할 수 있다.
@Scheduled 파라미터에 cron을 이용하여 더 자세한 시간 지정도 가능하다.
하지만 구글링 실력이 부족한 탓인지, 가볍고 세팅이 빠르다는 장점 말고는 찾아볼 수
없었다. 결국, 프로젝트를 세팅할 시간이 충분하다면 Quartz를 그렇지 않거나 많은 기능
없이 반복적인 실행만 필요할 경우엔 @Scheduled를 사용하는 것으로 결론을 지을 수
있을 것 같다. 현재 회사 상황이 그렇게 시간이 많은 건 아니지만 그래도 복잡한 설정이
필요한 상황이 많을 것 같아 enterprise 환경에 더 적합한 Quartz를 사용해보기로 했다.
@Scheduled 장점
https://copycoding.tistory.com/305
Spring @Scheduled vs Quartz Scheduler Example
https://examples.javacodegeeks.com/enterprise-java/spring/spring-scheduled-vs-quartz-scheduler-example/
스프링 배치 공식 문서
https://spring.io/projects/spring-batch
첫번째, 스프링 배치보다 간편한 스프링 Quartz
https://okky.kr/article/265708
https://kingbbode.tistory.com/38
[Spring Batch+Quartz] 스프링 배치+쿼츠 설정 및 구현 Clustering 모드 사용
https://developyo.tistory.com/251
[Spring] 배치, 스케쥴러 사용 : Quartz
https://bedmil.tistory.com/8
https://www.jackrutorial.com/2018/03/quartz-scheduler-annotation-with-spring-batch-in-spring-boot-tutorial.html
https://howtodoinjava.com/spring-batch/batch-quartz-java-config-example/
https://developyo.tistory.com/251
https://developyo.tistory.com/252
https://bedmil.tistory.com/8
https://blog.junu.dev/34
https://blog.kingbbode.com/posts/spring-batch-quartz
from http://jithub.tistory.com/414 by ccl(A) rewrite - 2021-02-09 23:26:52