개발/Spring

Spring Batch 입문 가이드

hanks 2026. 2. 24. 10:22

Spring Batch를 사용하여 대용량 데이터 처리를 효율적으로 관리하는 방법을 알아봅니다. Spring Batch의 기본 개념, 아키텍처, 핵심 컴포넌트, 그리고 간단한 예제를 통해 Spring Batch를 시작하는 데 필요한 지식을 제공합니다.

왜 Spring Batch인가?

① 대용량 데이터 처리의 어려움

대용량 데이터를 처리하는 것은 생각보다 까다로운 작업입니다. 단순히 데이터를 읽고 쓰는 것 외에도, 트랜잭션 관리, 성능 최적화, 장애 처리 등 고려해야 할 사항이 많거든요. 특히 대용량 데이터는 처리 시간이 오래 걸리기 때문에, 중간에 문제가 발생하면 처음부터 다시 시작해야 하는 경우가 생길 수도 있어요. 이런 상황을 방지하고, 안정적으로 대용량 데이터를 처리하기 위한 효과적인 방법이 필요합니다.

② Spring Batch의 필요성

Spring Batch는 이러한 어려움을 해결하기 위해 등장했습니다. Spring Batch는 엔터프라이즈 시스템에서 대용량 데이터를 안정적이고 효율적으로 처리할 수 있도록 다양한 기능을 제공하는 프레임워크입니다. 배치 처리 작업을 위한 템플릿을 제공하여 개발자가 비즈니스 로직에 집중할 수 있도록 도와주고, 트랜잭션 관리, 병렬 처리, 청크 기반 처리 등 다양한 기능을 통해 성능을 최적화할 수 있도록 지원합니다.


Spring Batch 핵심 개념

항목 설명
Job 배치 처리 작업의 최상위 단위입니다. 하나의 Job은 여러 Step으로 구성될 수 있습니다.
Step Job을 구성하는 독립적인 단계입니다. 각 Step은 데이터 읽기, 처리, 쓰기 등의 작업을 수행합니다.
ItemReader 데이터 소스에서 데이터를 읽어오는 인터페이스입니다. 파일, 데이터베이스 등 다양한 데이터 소스를 지원합니다.
ItemProcessor 읽어온 데이터를 가공하거나 변환하는 인터페이스입니다. 데이터 유효성 검사, 필터링, 변환 등의 작업을 수행할 수 있습니다.
ItemWriter 가공된 데이터를 저장하는 인터페이스입니다. 파일, 데이터베이스 등 다양한 데이터 저장소를 지원합니다.
JobRepository 배치 작업의 메타데이터를 저장하는 저장소입니다. 작업 실행 상태, 실행 결과 등을 관리합니다.
JobLauncher Job을 실행하는 역할을 담당합니다.

[JobLauncher] ── 실행 ──→ [Job] │ ├── [Step 1] ── ItemReader → ItemProcessor → ItemWriter │ └── [Step 2] ── ItemReader → ItemProcessor → ItemWriter


Spring Batch 시작하기

① 프로젝트 설정

먼저 Spring Boot 프로젝트를 생성하고, spring-boot-starter-batch 의존성을 추가해야 합니다. pom.xml 파일에 다음과 같이 의존성을 추가하세요.

xml org.springframework.bootspring-boot-starter-batch

② 간단한 배치 작업 정의

간단하게 파일에서 데이터를 읽어 콘솔에 출력하는 배치 작업을 만들어 보겠습니다.

java @Configuration @EnableBatchProcessing public class SimpleBatchConfig {

@Autowired
private JobBuilderFactory jobBuilderFactory;

@Autowired
private StepBuilderFactory stepBuilderFactory;

@Bean
public ItemReader<String> reader() {
    return new FlatFileItemReaderBuilder<String>()
            .name("itemReader")
            .resource(new ClassPathResource("sample.txt"))
            .lineMapper(new DefaultLineMapper<>())
            .build();
}

@Bean
public ItemWriter<String> writer() {
    return items -> {
        for (String item : items) {
            System.out.println("Item: " + item);
        }
    };
}

@Bean
public Step step() {
    return stepBuilderFactory.get("simpleStep")
            .<String, String>chunk(10)
            .reader(reader())
            .writer(writer())
            .build();
}

@Bean
public Job job() {
    return jobBuilderFactory.get("simpleJob")
            .start(step())
            .build();
}

}

위 코드는 sample.txt 파일에서 데이터를 읽어와 콘솔에 출력하는 간단한 배치 작업을 정의합니다. ItemReader는 파일을 읽고, ItemWriter는 데이터를 콘솔에 출력합니다. StepItemReaderItemWriter를 연결하여 하나의 작업 단위를 구성하고, JobStep을 실행하는 배치 작업의 최상위 단위입니다.

③ 실행 결과

sample.txt 파일에 다음과 같은 내용이 있다고 가정해 봅시다.

Hello World Spring Batch

배치 작업을 실행하면 콘솔에 다음과 같은 내용이 출력됩니다.

Item: Hello Item: World Item: Spring Item: Batch


자주 묻는 질문

Q: Spring Batch는 어떤 경우에 유용한가요?

A: 대용량 데이터 처리, 주기적인 데이터 처리, 트랜잭션 기반 데이터 처리 등 다양한 배치 처리 작업에 유용합니다. 예를 들어, 매일 자정에 은행 거래 내역을 집계하거나, 매주 월요일 아침에 이메일 뉴스레터를 발송하는 등의 작업에 Spring Batch를 사용할 수 있습니다.

Q: Spring Batch는 Spring Boot와 함께 사용하는 것이 필수인가요?

A: 필수는 아니지만, Spring Boot와 함께 사용하면 Spring Batch를 훨씬 쉽게 설정하고 사용할 수 있습니다. Spring Boot는 Spring Batch를 위한 자동 구성 기능을 제공하여 개발자가 설정에 시간을 낭비하지 않고 비즈니스 로직에 집중할 수 있도록 도와줍니다.


마무리

Spring Batch는 대용량 데이터 처리를 위한 강력한 프레임워크입니다. Spring Batch를 사용하면 복잡한 배치 처리 작업을 효율적으로 관리하고, 안정적으로 실행할 수 있습니다. 이번 가이드에서는 Spring Batch의 기본적인 개념과 사용법을 간단하게 살펴보았는데요, 앞으로 Spring Batch를 활용하여 다양한 배치 처리 작업을 구현해 보시길 바랍니다.

  • Spring Batch 설정
  • ItemReader, ItemProcessor, ItemWriter 구현
  • Job, Step 정의 및 실행