Spring Batch: 배치 처리를 위한 핵심 구성 요소와 프로세스
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Java 배치 프로세싱 개발자, 데이터 처리 및 ETL 작업을 수행하는 개발자
핵심 요약
- Spring Batch는 Java 기반의 배치 처리 프레임워크로, 대규모 데이터 처리에 최적화된 모듈형 아키텍처 제공
- Job → Step → ItemReader/Processor/Writer 구성 요소로 Chunk 기반 처리 모델 지원 (예:
chunk(10)
으로 10개 단위 처리) - JobExecutionDecider를 통해 조건 분기 가능 (예:
totalVendas > 10000
시 "RELATORIO"로 이동) - Retry/Skip/Listener 등 고급 기능으로 복잡한 배치 시나리오 처리
섹션별 세부 요약
1. Spring Batch 개요
- 배치 처리의 필요성: 데이터 이관, ETL, 주기적 계산 등 대규모 데이터 작업에 적합
- Spring Batch의 역할: 고성능, 신뢰성 있는 데이터 처리를 위한 강력한 프레임워크 제공
2. 핵심 구성 요소
- Job:
- Step의 집합으로 구성 (예:
vendasJob
에서step1
,step2
,step3
실행) - 순차적/병렬 실행 가능
- Step:
- ItemReader → ItemProcessor → ItemWriter의 단계로 구성
- Chunk 기반 처리 (예:
chunk(10)
으로 10개 단위로 처리) - ItemReader:
- CSV, DB, 메시지 큐 등 다양한 데이터 소스 지원
- 예:
data[count++]
로 데이터 읽기 - ItemProcessor:
- 데이터 변환, 검증, 필터링 등 비즈니스 로직 적용 (예:
item.split(": ")
로 분리 및 변환) - ItemWriter:
- DB, 파일, 외부 시스템 등으로 처리 결과 쓰기 (예:
System.out.println(item)
으로 콘솔 출력) - JobExecutionDecider:
- 조건에 따라 Step 이동 (예:
totalVendas > 10000
시 "RELATORIO"로 이동)
3. 고급 기능
- Retry:
- 실패한 작업 재시도 가능 (예: 특정 정책에 따라 재시도 횟수 제어)
- Skip:
- 문제 있는 레코드 무시 (예:
skipLimit
설정으로 오류 건너뛰기) - Listeners:
- Job/Step 이벤트 모니터링, 로깅, 추가 처리 (예:
JobExecutionListener
구현) - 확장성:
- 병렬 처리, Chunking 리모트 지원
4. 예제 구성
- SalesJob 구성:
- CSV 파일에서 데이터 읽기 (
readSalesDataStep
) - 데이터 처리 (
processSalesDataStep
) - DB에 데이터 쓰기 (
writeSalesDataStep
) - Decider로 조건 분기 (예:
totalSales > 10000
시 "HIGH_SALES"로 이동)
- 코드 예시:
```java
@Bean
public Job salesJob() {
return jobBuilderFactory.get("salesJob")
.start(readSalesDataStep())
.next(processSalesDataStep())
.next(writeSalesDataStep())
.next(salesDecider())
.on("HIGH_SALES").to(generateReportStep())
.on("LOW_SALES").to(archiveDataStep())
.end()
.build();
}
```
결론
- Spring Batch는 모듈형 구조, Chunk 처리, 조건 분기 기능을 통해 대규모 데이터 처리 작업에 적합한 프레임워크
- ETL, 데이터 이관, 주기적 계산 등에서 고성능, 안정성, 확장성을 제공하며, Java 기반 배치 프로젝트의 핵심 도구로 활용 권장