728x90
Spring Batch, Spring Scheduler, Quartz의 차이
1. 스프링 배치(Spring Batch)
- 스프링 배치는 대용량 데이터 처리에 특화된 프레임워크다.
- 예를 들어, 매일 밤 데이터베이스에서 데이터를 가져와서 처리하고 결과를 다른 시스템으로 보내는 작업 같은 것이 있다.
주로 다음과 같은 특징을 가진다:
- 청크 지향 처리: 데이터를 일정한 크기의 청크로 나누어 처리한다. 이는 대용량 데이터를 효율적으로 처리할 수 있게 한다.
- 재시작 기능: 실패한 작업을 중단된 지점부터 재시작할 수 있다.
- 스킵 로직: 특정 조건에서 일부 항목을 건너뛰는 로직을 구현할 수 있다.
- 리스너: 작업의 생명주기에 훅을 제공하여 비즈니스 로직을 삽입할 수 있다.
- 배치 관리: 관리용 대시보드를 통해 배치 작업을 모니터링하고 관리할 수 있다.
2. 스프링 스케줄러(Spring Scheduler)
- 스프링 스케줄러는 스프링 프레임워크에서 제공하는 간단한 스케줄링 기능이다.
- 간단한 배경 작업을 정해진 시간이나 간격으로 실행하는 데 적합하다. (복잡한 처리보다는 간단한 반복 작업에 적합하다.)
- 주로 단일 서버 환경에서 간단한 주기적 작업에 사용된다.
- 예를 들어, 매시간 특정 API를 호출하여 데이터를 갱신하는 작업 등이다.
주로 다음과 같은 특징을 가진다:
- 간편한 설정: @Scheduled 어노테이션을 이용해 쉽게 작업을 스케줄링할 수 있다.
- 크론 표현식: 복잡한 시간 설정이 가능한 크론 표현식을 사용할 수 있다.
- 고정된 지연 시간: 특정 시간 간격으로 작업을 실행할 수 있다.
- 동시성 제어: 스레드 풀을 통해 작업의 동시성을 제어할 수 있다.
3. 쿼츠(Quartz)
- 쿼츠는 스프링 스케줄러보다 더 복잡하고 세밀한 스케줄링 요구사항을 해결하기 위한 오픈 소스 라이브러리다.
- 예를 들어, 동적인 스케줄링, 클러스터 환경에서의 작업 실행 등이다.
주로 다음과 같은 특징을 가진다:
- 동적 스케줄링: 실행 시간에 스케줄을 변경할 수 있다.
- 영속성 지원: 데이터베이스에 작업 및 트리거 정보를 저장하여 클러스터 환경에서도 일관된 스케줄링을 유지한다.
- 트리거와 잡: 다양한 종류의 트리거와 잡을 정의하여 복잡한 스케줄링 로직을 구현할 수 있다.
- 스프링 통합: 스프링과의 통합을 통해 스프링의 기능들을 함께 사용할 수 있다.
4. 사용 상황
4-1. 스프링 배치(Spring Batch)
사용 상황:
- 대규모 데이터 마이그레이션 또는 데이터 처리 작업.
- 매일 밤 특정 시간에 데이터베이스에서 데이터를 추출, 변환, 적재(ETL 작업)하는 작업.
- 주기적인 보고서 생성 및 데이터 분석 작업.
이유 및 이점:
- 대량 데이터 처리: 스프링 배치는 대량 데이터 처리에 최적화되어 있어, 높은 성능과 안정성을 제공한다.
- 트랜잭션 관리: 복잡한 트랜잭션 관리 및 예외 처리 기능을 제공하여, 데이터 일관성을 유지할 수 있다.
- 재시작/스킵 기능: 실패한 작업을 중단된 지점부터 재시작하거나, 특정 조건에서 작업을 건너뛸 수 있다.
4-2. 스프링 스케줄러(Spring Scheduler)
사용 상황:
- 간단한 배경 작업을 정기적으로 실행해야 할 때.
- 매일 또는 매시간 정해진 시간에 특정 작업을 실행하는 경우.
- 웹 애플리케이션에서 주기적으로 캐시를 갱신하거나, 상태를 체크하는 작업.
이유 및 이점:
- 간편한 설정: @Scheduled 어노테이션을 사용하여 손쉽게 작업을 스케줄링할 수 있다.
- 통합성: 스프링 프레임워크와의 높은 통합성으로 인해 추가적인 설정 없이 사용할 수 있다.
- 경량화: 별도의 의존성 없이 스프링 프레임워크 내에서 작동하여, 작고 간단한 작업에 이상적이다.
3. 쿼츠(Quartz)
사용 상황:
- 동적으로 스케줄을 변경해야 하는 경우.
- 클러스터 환경에서의 작업 실행이 필요한 경우.
- 복잡한 스케줄링 요구사항이 있는 경우(예: 서로 다른 시간대에 다른 작업 실행).
이유 및 이점:
- 동적 스케줄링: 실행 시간에 스케줄을 변경하거나 새로운 작업을 추가할 수 있다.
- 영속성 및 클러스터링: 작업 상태를 데이터베이스에 저장하여, 서버 재시작 후에도 스케줄을 유지하고, 다수의 서버에서 작업을 분산시킬 수 있다.
- 세밀한 스케줄링 옵션: 복잡한 크론 표현식을 사용하여 매우 세밀한 스케줄링을 구성할 수 있다.
이러한 이유로 각각의 상황에서 해당 기술을 선택하면 더 효율적이고 안정적인 시스템을 구축할 수 있다.
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] Quartz 적용하기 (2) | 2023.11.11 |
---|---|
[Spring Boot] 스프링 스케줄러 적용하기 (0) | 2023.11.11 |
[Spring Boot] Spring Boot 3.X 버전에 Swagger 3 버전 적용하기 (1) | 2023.11.10 |
[Spring Boot] Spring Boot에서 Feign 클라이언트 사용하기(@FeignClient 사용 가이드) (2) | 2023.11.09 |
[Spring Boot] 스프링 부트 프로젝트 실행하자마자 batch job이 실행되는 이슈 (0) | 2023.11.08 |