배치 처리를 Spring 프레임워크 기반에서 안정적으로 개발할 수 있게 해주는 엔터프라이즈급 프레임워크.
배치 처리란? 대량의 데이터를 사용자 개입 없이 일괄적으로 자동 처리하는 방식.
Spring Batch는 단순 실행을 넘어, 실패 지점부터의 재처리나 대용량 데이터를 효율적으로 다루기 위한 청크 단위 커밋 같은 전문 기능을 완성된 형태로 제공한다는 점이 가장 큰 차이다.
상위 계층은 하위 계층의 서비스를 활용하여 동작한다.
| 계층 | 역할 |
|---|---|
| Application Layer | 사용자 작성 batch Job 및 커스텀 비즈니스 로직 |
| Batch Core Layer | Job, Step, JobLauncher 등 런타임 제어 API |
| Infrastructure Layer | Reader, Writer, Retry 등 기술적 공통 서비스 |
| 개념 | 설명 |
|---|---|
| Job | 전체 배치 프로세스의 설계도. 무엇을 수행할지 정의 |
| JobParameters | Job과 함께 결합되어 실행되는 파라미터 |
| JobInstance | JobParameters가 조금이라도 다르면 완전히 새로운 인스턴스가 생성됨 |
| JobExecution | 하나의 JobInstance가 실제로 실행될 때마다 생성되는 객체. 성공/실패, 시작 시간 등 상태 정보를 담음 |
예: 어제 배치가 실패해 오늘 다시 실행하면, 같은 JobInstance 내에 두 개의 JobExecution이 생긴다.
StepExecution (Step 실행 시 생성되는 메타데이터)
Step 종류
| 종류 | 용도 | 흐름 |
|---|---|---|
| Chunk Step | 대용량 처리 | ItemReader → ItemProcessor → ItemWriter |
| Tasklet Step | 단일 작업 | 단일 태스크 수행 (파일 삭제, DB 프로시저 호출 등) |
Step 흐름 제어 유형: Sequential / Conditional / Flow / Split / Partitioning
데이터를 한 건씩 읽고 처리한 후 바로 쓰는 게 아니라, commit-interval 설정 값만큼 모아서 한 번에 커밋한다. 이 단위를 Chunk라고 부른다.
| 컴포넌트 | 동작 |
|---|---|
| ItemReader | 데이터 소스에서 1건씩 읽기 반복 |
| ItemProcessor | 읽은 데이터를 비즈니스 로직으로 변환 |
| ItemWriter | Chunk 단위로 모인 데이터를 일괄 저장 |
예외 처리
ItemProcessListener나 ItemWriteListener를 통해 별도 로그를 남기거나 DB에 기록하는 게 일반적이다.execute() 메서드 하나만 구현활용 예시
DB에 저장되므로 불필요하게 큰 객체 저장은 지양한다.
skip-limit: 최대 허용 횟수 설정skippable-exception: 예외 클래스 등록no-skip-exception: 제외할 예외 설정retry-limit: 최대 재시도 횟수backoff-policy: 재시도 간격 제어