Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
spring-batch-reader-processor-writer-concepts
✅ 1. ItemReader란?
public interface ItemReader<T> {
T read() throws Exception,
UnexpectedInputException,
ParseException,
NonTransientResourceException;
}
- 역할: 데이터 저장소(DB, 파일 등)에서 데이터를 읽어오는 인터페이스.
- 동작:
read() 메서드를 호출할 때마다 데이터를 하나씩(One by One) 가져온다.
- 종료: 더 이상 읽을 데이터가 없어서
null을 반환하면, 해당 Step의 읽기가 종료된다.
✅ 2. ItemProcessor란?
public interface ItemProcessor<I, O> {
O process(I item) throws Exception;
}
- 역할: Reader에서 읽어온 데이터(I)를 가공하여 Writer로 넘길 데이터(O)로 변환한다. (비즈니스 로직 담당)
- 동작:
process() 메서드를 통해 데이터를 하나씩 처리한다.
- 필터링: 만약 처리 중에
null을 반환하면, 그 데이터는 Writer로 전달되지 않고 삭제(Filter)된다.
✅ 3. ItemWriter란?
public interface ItemWriter<T> {
void write(Chunk<? extends T> chunk) throws Exception;
}
- 역할: Processor를 거쳐 넘어온 데이터를 최종적으로 저장하거나 출력한다.
- 동작: 데이터를 하나씩 쓰는 게 아니라, 설정된 청크 사이즈(Chunk Size)만큼 꽉 찰 때까지 모았다가
write() 메서드로 한 번에(Bulk) 처리한다.
- 예시:
INSERT INTO ... VALUES (...) 쿼리를 1000개 모아서 한 번에 날리는 방식.