방명록
- Spring Batch의 세 가지 핵심 처리 방식: Quartz, Chunk, Tasklet 비교2025년 09월 06일 08시 25분 31초에 업로드 된 글입니다.작성자: 봉주니
Spring Batch는 대용량 데이터 처리와 배치 작업 스케줄링에 특화된 프레임워크입니다. 이 글에서는 Spring Batch에서 자주 사용되는 세 가지 방식인 Quartz, Chunk, Tasklet을 설명하고, 각각의 특징과 차이점을 비교해보겠습니다.
1️⃣ Quartz: 배치 작업의 스케줄링 담당
Quartz는 배치 작업을 언제 실행할지를 제어하는 스케줄링 라이브러리입니다. Spring Batch와 통합하면, 특정 시간에 Job을 자동으로 실행하거나 복잡한 실행 조건을 설정할 수 있습니다.
✔️ 특징
- Cron 표현식 기반의 정교한 스케줄링
- Job 실행 이력 관리 가능
- Spring과 쉽게 통합 가능
✔️ 사용 예시
@Scheduled(cron = "0 0 2 * * ?") // 매일 새벽 2시 실행 public void runBatchJob() { jobLauncher.run(myJob, new JobParameters()); }2️⃣ Chunk 방식: 대용량 데이터 처리에 최적화
Chunk 방식은 데이터를 일정한 크기로 나누어 반복적으로 처리하는 방식입니다. ItemReader, ItemProcessor, ItemWriter를 통해 데이터 흐름을 구성하며, 트랜잭션 단위로 안정적인 처리가 가능합니다.
✔️ 특징
- 대용량 데이터 처리에 적합
- Chunk 단위로 트랜잭션 커밋
- 예외 발생 시 rollback 가능
✔️ 사용 예시
stepBuilderFactory.get("chunkStep") .<InputType, OutputType>chunk(100) .reader(itemReader()) .processor(itemProcessor()) .writer(itemWriter())3️⃣ Tasklet 방식: 단일 작업 처리에 적합
Tasklet 방식은 Step 내에서 하나의 작업을 수행하는 방식입니다. 반복적인 데이터 처리보다는 단순한 작업(예: 파일 삭제, 로그 출력 등)에 적합하며, 자유롭게 로직을 작성할 수 있습니다.
✔️ 특징
- 단순한 작업 처리에 적합
- Step 전체가 하나의 트랜잭션
- 코드 작성이 자유롭고 직관적
✔️ 사용 예시
stepBuilderFactory.get("taskletStep") .tasklet((contribution, chunkContext) -> { System.out.println("작업 수행 중..."); return RepeatStatus.FINISHED; }) .build();🔍 세 가지 방식 비교
항목QuartzChunk 방식Tasklet 방식역할 Job 실행 시점 제어 반복적 데이터 처리 단일 작업 수행 트랜잭션 처리 없음 (Spring Batch와 통합 시 가능) Chunk 단위 커밋 Step 전체 커밋 적합한 작업 스케줄링, 이벤트 기반 실행 대용량 데이터 처리 파일 작업, 초기화 등 구성 요소 JobLauncher, Scheduler Reader, Processor, Writer Tasklet 인터페이스 복잡도 스케줄링 로직 복잡 가능 데이터 흐름 설계 복잡 가능 로직 단순, 유연성 높음
✅ 함께 사용하는 구조 예시
실제 배치 시스템에서는 이 세 가지를 조합하여 사용하는 경우가 많습니다.
예시:
- Quartz로 Job을 매일 새벽 2시에 실행
- Job 내부에서 Tasklet으로 로그 초기화
- 이후 Chunk 방식으로 DB 데이터를 읽고 처리
📝 마무리
Spring Batch를 설계할 때는 다음을 고려하세요:
- Quartz: "언제 실행할 것인가?"
- Chunk: "어떻게 데이터를 반복적으로 처리할 것인가?"
- Tasklet: "단일 작업을 어떻게 수행할 것인가?"
이 세 가지 방식은 서로 대체하는 것이 아니라, 상호 보완적으로 사용되어야 합니다. 목적에 따라 적절한 방식을 선택하면, 유지보수성과 확장성이 뛰어난 배치 시스템을 구축할 수 있습니다.
반응형'Spring' 카테고리의 다른 글
[Spring] SOAP vs REST (0) 2021.12.19 [Spring] SpringBoot 기반의 OPEN API 서비스 구현[4] - Hello World 출력하기 (0) 2021.12.16 [Spring] SpringBoot 기반의 OPEN API 서비스 구현[3] - PostgreSQL 설치 (0) 2021.12.15 [Spring] SpringBoot 기반의 OPEN API 서비스 구현[2] - STS 설치 (0) 2021.12.14 [Spring] SpringBoot 기반의 OPEN API 서비스 구현[1] - JAVA 설치 (0) 2021.11.24 다음글이 없습니다.이전글이 없습니다.댓글