Spring Batch는 대용량 데이터를 효율적으로 처리하기 위한 배치(일괄 처리) 프레임워크다.
주기적으로 반복되는 작업(예: 데이터 정산, 통계 생성, 로그 정리 등)을 안정적으로 수행할 수 있게 해준다.
1. 배치(Batch)란?
Batch Processing은 일정한 주기로 대량의 데이터를 모아서 한 번에 처리하는 방식이다.
보통 다음과 같은 작업에 사용된다.
- 매일 자정에 결제 데이터 정산
- 뉴스/로그 수집 및 통계 생성
- 외부 API에서 데이터 동기화
- 백업, 이메일·알림 발송 등 정기 업무 자동화
실시간 시스템처럼 빠르게 응답을 주는 대신, 정확하고 안정적인 처리가 핵심이다.
2. Spring Batch 구조
Spring Batch는 세 가지 주요 단위로 구성된다 👇
✔️ 1) Job
- 하나의 “배치 작업 단위”
- 여러 Step을 포함할 수 있음
- 예: “회원 데이터 정산 Job”, “결제 통계 Job”
✔️ 2) Step
- Job 내부의 실행 단위
- 실제 처리 로직이 들어있는 부분
- ItemReader → ItemProcessor → ItemWriter 로 구성됨
✔️ 3) Chunk (청크 단위 처리)
- 데이터를 일정 개수(Chunk)로 나눠서 읽고, 처리하고, 쓰는 단위
- 예: 1000건의 데이터를 100건씩 나누어 DB에 저장
- 실패 시 해당 Chunk 단위로 롤백 가능
3. 기본 동작 흐름
Job → Step → (Reader → Processor → Writer)
1. Reader: DB, CSV, API 등에서 데이터를 읽어옴
2. Processor: 비즈니스 로직 수행 (필터링, 가공 등)
3. Writer: 결과를 DB나 파일에 저장
💡 Spring Batch는 트랜잭션 관리가 자동으로 이루어져, 중간에 오류가 나도 안전하게 재시작 가능하다.
4. 예제 코드 (간단한 회원 데이터 처리)
@Bean
public Job userDataJob(JobRepository jobRepository, Step userDataStep) {
return new JobBuilder("userDataJob", jobRepository)
.start(userDataStep)
.build();
}
@Bean
public Step userDataStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("userDataStep", jobRepository)
.<User, ProcessedUser>chunk(100, transactionManager)
.reader(userItemReader())
.processor(userItemProcessor())
.writer(userItemWriter())
.build();
}
핵심 포인트
- chunk(100) : 100건 단위로 트랜잭션 처리
- reader(), processor(), writer() : 각 역할을 분리해 유지보수성 향상
- 실패 시 해당 Chunk만 롤백됨
5. Spring Scheduler or Kafka 와 함께 쓰는 이유
실무에서는 Batch Job을 Spring Scheduler나 Kafka Consumer와 함께 사용한다.
- Scheduler → 특정 시간(매일 00시)에 Job 실행
- Kafka → 이벤트가 발생했을 때 비동기적으로 Job 실행
예를 들어,
Kafka에서 “결제 완료 이벤트”가 오면 Batch Job이 실행되어 정산 데이터를 생성하는 식이다.
'Backend > Batch' 카테고리의 다른 글
| [Batch] 6. 스케줄링 & 운영 전략 — Spring Scheduler · Crontab · Quartz · EventBridge 비교 (0) | 2025.11.13 |
|---|---|
| [Batch] 5. Spring Batch — Skip / Retry / Listener로 장애 내성 높은 배치 만들기 (0) | 2025.11.13 |
| [Batch] 4. Spring Batch- Reader / Processor / Writer (0) | 2025.11.13 |
| [Batch] 3. Spring Batch — Chunk vs Tasklet (0) | 2025.11.13 |
| [Batch] 2. Batch 환경 구성 — Job / Step / Repository (0) | 2025.11.13 |