Spring Batch
2023. 3. 24. 09:41ㆍFramework

스프링 배치(Spring Batch)는 대용량 데이터 처리를 위한 오픈 소스 프레임워크입니다. 스프링 프레임워크 기반으로 만들어졌으며, 일괄 처리(batch processing) 작업을 수행하는 데 사용됩니다. 대용량 데이터를 처리하는 작업을 자동화하고, 이를 효율적으로 처리할 수 있도록 지원합니다.
스프링 배치는 다음과 같은 특징을 가지고 있습니다.
- 스프링 기반: 스프링 프레임워크 기반으로 만들어졌기 때문에 스프링의 다양한 기능과 라이브러리를 활용할 수 있습니다.
- 대용량 데이터 처리: 대용량 데이터 처리를 위한 다양한 기능을 제공하며, 이를 효율적으로 처리할 수 있습니다.
- 확장성: 다양한 확장 기능을 제공하며, 필요에 따라 개발자가 직접 커스터마이징할 수 있습니다.
- 재시작 기능: 배치 처리 중에 예기치 않은 상황이 발생하더라도, 재시작 기능을 통해 중단된 부분부터 다시 처리할 수 있습니다.
- 관리 기능: 배치 처리 작업을 관리하는데 필요한 다양한 기능을 제공합니다.
스프링 배치는 데이터베이스, 파일 등 다양한 소스에서 데이터를 읽어들여 처리하고, 결과를 데이터베이스나 파일 등으로 저장할 수 있습니다. 대용량 데이터를 처리하는 작업에서는 스프링 배치를 활용하여 일괄 처리를 자동화하고, 이를 효율적으로 처리할 수 있습니다.
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Bean
public ItemReader<String> reader() {
return new ListItemReader<>(Arrays.asList("foo", "bar", "baz"));
}
@Bean
public ItemProcessor<String, String> processor() {
return String::toUpperCase;
}
@Bean
public ItemWriter<String> writer() {
return items -> items.forEach(System.out::println);
}
@Bean
public Step step1() {
return steps.get("step1")
.<String, String>chunk(2)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job job() {
return jobs.get("job")
.start(step1())
.build();
}
}
위 코드는 간단한 배치 작업을 수행하는 스프링 배치 예제입니다. 이 예제에서는 "foo", "bar", "baz" 세 개의 문자열을 읽어들여 대문자로 변환하고, 결과를 콘솔에 출력하는 작업을 수행합니다.
- reader() 메서드: ListItemReader를 사용하여 문자열 목록을 읽어들입니다.
- processor() 메서드: 각 문자열을 대문자로 변환하는 ItemProcessor를 반환합니다.
- writer() 메서드: 변환된 문자열을 콘솔에 출력하는 ItemWriter를 반환합니다.
- step1() 메서드: reader, processor, writer를 조합하여 하나의 Step을 생성합니다.
- job() 메서드: 하나의 Step을 시작점으로 하는 Job을 생성합니다.
위 예제에서는 각 Step에서 처리할 데이터 단위(chunk)의 크기를 2로 설정했습니다. 이는 하나의 트랜잭션 안에서 최대 2개의 데이터를 처리하도록 지정한 것입니다. 이렇게 하면 처리할 데이터가 많을 때 메모리 사용을 줄일 수 있습니다.