GW LABS

Spring Batch 사용법: 대용량 데이터 처리를 위한 실무 가이드 본문

Programming/Java

Spring Batch 사용법: 대용량 데이터 처리를 위한 실무 가이드

GeonWoo Kim 2025. 8. 16. 14:23

Spring Batch 사용법: 대용량 데이터 처리를 위한 실무 가이드

서론

대규모 데이터 처리 작업은 단순히 코드 몇 줄로 해결할 수 있는 문제가 아닙니다. 안정성, 트랜잭션 관리, 스케줄링, 장애 복구 등 고려해야 할 요소가 많습니다. Spring Batch는 이러한 요구사항을 충족하기 위해 설계된 프레임워크로, 반복적이고 대량의 데이터 처리를 안정적으로 지원합니다.
본 포스팅에서는 Spring Batch의 핵심 개념, 설정 방법, 그리고 실무에서 주의해야 할 사항을 다루어, 개발자가 바로 활용할 수 있는 지식을 제공합니다.


본론

1. Spring Batch의 핵심 개념

Spring Batch는 크게 세 가지 개념으로 나눌 수 있습니다.

  1. Job

    • 배치 작업의 최상위 단위
    • 하나의 Job은 여러 개의 Step으로 구성
  2. Step

    • Job을 구성하는 개별 처리 단계
    • 일반적으로 읽기(Read) → 처리(Processing) → 쓰기(Write) 구조를 가짐
  3. ItemReader / ItemProcessor / ItemWriter

    • ItemReader: 데이터 소스로부터 데이터를 읽어옴 (예: DB, CSV, API)
    • ItemProcessor: 읽어온 데이터를 가공 및 변환
    • ItemWriter: 가공된 데이터를 목적지에 저장

즉, Spring Batch는 대량의 데이터를 작은 단위로 나누어 안정적으로 처리하는 구조를 제공합니다.


2. Spring Batch 기본 설정

Spring Batch 프로젝트를 시작하기 위해서는 Spring Boot + Spring Batch Starter 의존성을 추가합니다.

Maven 의존성

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

기본 Job & Step 구성

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Bean
    public Job exampleJob(JobRepository jobRepository, Step exampleStep) {
        return new JobBuilder("exampleJob", jobRepository)
                .start(exampleStep)
                .build();
    }

    @Bean
    public Step exampleStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("exampleStep", jobRepository)
                .<String, String>chunk(10, transactionManager)
                .reader(exampleReader())
                .processor(exampleProcessor())
                .writer(exampleWriter())
                .build();
    }

    @Bean
    public ItemReader<String> exampleReader() {
        return new ListItemReader<>(List.of("A", "B", "C"));
    }

    @Bean
    public ItemProcessor<String, String> exampleProcessor() {
        return item -> item.toLowerCase();
    }

    @Bean
    public ItemWriter<String> exampleWriter() {
        return items -> items.forEach(System.out::println);
    }
}

위 코드는 간단한 예시로, 문자열 리스트 ["A", "B", "C"]를 읽어 소문자로 변환 후 출력합니다. 실제 환경에서는 DB, CSV, API 연동 등을 Reader/Writer에 적용할 수 있습니다.


3. Spring Batch 사용 시 유의사항

Spring Batch를 실무에서 사용할 때는 다음과 같은 포인트를 반드시 고려해야 합니다.

  1. 트랜잭션 관리
  • 각 Step은 기본적으로 트랜잭션 단위로 동작합니다.
  • Chunk 크기(chunk-size)에 따라 롤백 단위가 달라지므로, 데이터 일관성을 고려해야 합니다.
  1. 성능 최적화
  • 대규모 데이터의 경우 멀티 스레드 Step 또는 파티셔닝 전략을 활용하면 처리 속도를 높일 수 있습니다.
  • 대용량 Batch는 Reader/Writer에서 I/O 최적화가 중요합니다.
  1. 재시작 전략
  • Spring Batch는 실패한 Job을 중단된 위치부터 재시작할 수 있습니다.
  • 이를 위해 JobRepository(DB 테이블)에 실행 이력이 저장되며, 프로덕션 환경에서는 H2 대신 MySQL, PostgreSQL 같은 RDBMS를 권장합니다.
  1. 운영 모니터링
  • Job 실행 로그, Step별 처리 건수, 에러 내역 등을 수집/모니터링하는 체계를 구축해야 장애 대응이 수월합니다.

결론

Spring Batch는 대량 데이터 처리를 안정적이고 유연하게 지원하는 강력한 프레임워크입니다.
본 포스팅에서는 Spring Batch의 핵심 개념, 기본 설정 방법, 실무 적용 시 주의사항을 살펴보았습니다.

👉 요약: Spring Batch를 올바르게 이해하고 활용하면, 대규모 데이터 처리 업무를 안정적이고 효율적으로 수행할 수 있습니다.

Comments