이 글은 Velog에서 이전한 글입니다. Velog 원문 보기
Spring Batch란?
Spring Batch는 대용량 데이터를 효율적으로 처리하기 위한 배치 처리 프레임워크이다.
주기적으로 반복되는 작업(예: 통계 계산, 로그 분석, DB 정리 등)을 안정적으로 실행하고, 실패 복구 및 재시작 기능까지 제공합니다.
대량의 데이터를 "읽고 -> 가공하고 -> 저장하는" 흐름을 체계적으로 관리할 수 있게 도와주는 틀입니다.
언제 사용할까?
- 매일 자정에 주문 데이터 정산
- 100만 건 이상의 로그를 DB에 저장
- CSV 파일을 읽어 데이터베이스에 이관
- 사용자 가입 내역을 분석해 레포트 생성
Spring Batch의 기본 구조
Job: 전체 배치 작업의 단위
- 하나의 Job은 여러 Step으로 구성
Step: Job 안의 실행 단위
ItemReader: 데이터 입력
- CSV, DB, XML, API 등에서 데이터를 읽어옴
ItemProcessor (선택): 데이터 가공
- 필터링, 변환, 유효성 검사 등 수행
ItemWriter: 데이터 출력
- DB 저장, 파일 쓰기 등 출력 작업
청크 기반 처리
Spring Batch는 데이터를 청크(chunk) 단위로 처리한다.
예를 들어:
- 청크 크기: 10
- 10건의 데이터를 읽고 -> 처리하고 -> 저장
- 하나의 청크는 트랜잭션 단위로 관리 (중간 실패 시 전체 청크 롤백)
[읽기] 10건 -> [가공] 10건 -> [저장] 10건 (커밋)
예시 코드
@Bean
public Job exampleJob(JobBuilderFactory jobBuilderFactory, Step step) {
return jobBuilderFactory.get("exampleJob")
.start(step)
.build();
}
@Bean
public Step step(StepBuilderFactory stepBuilderFactory,
ItemReader<MyItem> reader,
ItemProcessor<MyItem, MyItem> processor,
ItemWriter<MyItem> writer) {
return stepBuilderFactory.get("step")
.<MyItem, MyItem>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.build();
}
스케줄링과 연동
Spring Batch 자체에는 스케줄링 기능이 없지만, 아래 도구들과 함께 사용 가능
- @@cheduled (Spring Scheduler)
- Quartz
- cron (리눅스 기반)
트랜잭션 & 예외 처리
- 트랜잭션은 청크 단위로 관리
- 예외가 발생하면 해당 청크 전체가 롤백
- skip, retry, listener 등을 통해 예외 상황에 유연하게 대응 가능
주의 사항
- 청크 사이즈 조절: 너무 작으면 느리고, 너무 크면 메모리 부담 -> 서비스에 맞는 적당한 청크 사이즈 조절 필요
- 로깅 필수: 처리된 건수, 실패 건수, 소요 시간 로그를 남기는 것을 추천
- JobParameter 사용: 동일 Job을 반복 실행하려면 유니크한 파라미터 필요 (ex. UUID)
- 병렬 처리 고려: 대용량 데이터는 TaskExecutor, Partitioner, Multi-threaded Step으로 병렬화 가능
'Backend > Spring' 카테고리의 다른 글
| Spring Boot 4에서 사라진 ObjectMapper Bean (0) | 2026.08.05 |
|---|---|
| [Spring] Filter & Interceptor (0) | 2026.08.01 |
| ✏️ [Spring] Bean 생명주기 (0) | 2026.08.01 |
| [Spring] 역할과 구현의 분리, 스프링 컨테이너의 필요성 (0) | 2026.07.31 |
| ✏️ [Spring] Spring Security Testing (0) | 2026.07.31 |