Spring Batch이해도를 높이고 실무에서 사용 가능할정도로 스터디
Spring Batch는 대량의 데이터를 효율적으로 처리하기 위한 배치 애플리케이션을 개발할 수 있도록 지원하는 Spring 기반 프레임워크입니다. 주기적으로 실행되는 대규모 데이터 처리[ETL(Extract, Transform, Load) , 데이터 마이그레이션, 정산, 리포트 생성]에 적합합니다.
ETL(Extract, Transform, Load) 이란?
Spring Batch는 Job-> Step -> Tasklet/Chunk 구조로 이루어져있습니다.
Spring Batch 동작 과정
Tasklet은 interface로 이루어져있으며 주요 메서드는 execute입니다.
public interface Tasklet {
RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception;
}
Parameter
StepContribution contribution: Step의 실행 결과(예: 업데이트된 카운트 등)를 저장하는 객체
ChunkContext chunkContext: Step의 실행 컨텍스트를 저장하는 객체
Response
RepeatStatus: FINISHED 또는 CONTINUABLE을 반환하여 실행을 끝낼지 계속할지 결정
아래는 로그를 찍는 예제입니다. FINISHED를 호출해서 한번 호출하면 바로 종료하도록 되어있습니다.
@Component
public class SimpleTasklet implements Tasklet {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
System.out.println("Tasklet 실행 중...");
return RepeatStatus.FINISHED; // 한 번 실행 후 종료
}
}
이번엔 CONTINUABLE 예제로 특정 count에 도달하면 반복을 종료하는 예제입니다.
@Component
public class LoopTasklet implements Tasklet {
private int count = 0;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
System.out.println("반복 실행: " + count);
count++;
if (count < 5) {
return RepeatStatus.CONTINUABLE; // 5번 실행될 때까지 계속 반복
}
return RepeatStatus.FINISHED; // 실행 종료
}
}