기술과 산업/언어 및 프레임워크

Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드

B컷개발자 2025. 5. 13. 16:34
728x90

Spring Boot에서 Spring Batch를 활용해 대용량 데이터 처리 및 배치 시스템을 설계하는 방법을 소개합니다. Step, Job, Reader, Processor, Writer의 기본 개념과 실전 예시 포함.


Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드

많은 서비스에서는 다음과 같은 대용량 데이터 처리 요구가 발생합니다.

  • 매일 회원 데이터 분석
  • 거래 내역 일괄 업데이트
  • 외부 시스템으로 데이터 전송

이러한 요구를 효율적이고 안정적으로 해결하는 대표적인 프레임워크가 Spring Batch입니다.
이번 글에서는 Spring Batch의 핵심 개념과 실무에서 사용하는 방법을 단계적으로 정리합니다.


1. Spring Batch의 핵심 아키텍처

[Job] → [Step] → [Reader] → [Processor] → [Writer]

구성 요소 역할

Job 하나의 배치 작업 단위
Step Job을 구성하는 작업 단계
Reader 데이터 읽기 (DB, 파일, API 등)
Processor 데이터 가공, 검증
Writer 데이터 저장 (DB, 파일, API 등)

2. Spring Batch 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
  • H2 Database는 예제용 (실무에서는 Oracle, MySQL 등 사용)

🛠️ 3. 기본 Job/Step 구성 예시

Job Configuration

@Configuration
@RequiredArgsConstructor
public class BatchConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job sampleJob() {
        return jobBuilderFactory.get("sampleJob")
                .start(sampleStep())
                .build();
    }

    @Bean
    public Step sampleStep() {
        return stepBuilderFactory.get("sampleStep")
                .<String, String>chunk(10)
                .reader(sampleReader())
                .processor(sampleProcessor())
                .writer(sampleWriter())
                .build();
    }
}

Reader, Processor, Writer 구성

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

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

@Bean
public ItemWriter<String> sampleWriter() {
    return items -> items.forEach(System.out::println);
}
  • Reader → List 데이터 읽기
  • Processor → 소문자로 변환
  • Writer → 콘솔 출력

 4. 실무 데이터베이스 기반 배치 예시

@Bean
public JdbcPagingItemReader<User> userReader(DataSource dataSource) {
    JdbcPagingItemReader<User> reader = new JdbcPagingItemReader<>();
    reader.setDataSource(dataSource);
    reader.setPageSize(100);
    reader.setRowMapper(new BeanPropertyRowMapper<>(User.class));
    reader.setQueryProvider(queryProvider(dataSource));
    return reader;
}

private PagingQueryProvider queryProvider(DataSource dataSource) {
    SqlPagingQueryProviderFactoryBean factory = new SqlPagingQueryProviderFactoryBean();
    factory.setDataSource(dataSource);
    factory.setSelectClause("SELECT *");
    factory.setFromClause("FROM users");
    factory.setSortKey("id");
    return factory.getObject();
}

5. Job 실행 방법

Application 실행 시 자동 실행

spring:
  batch:
    job:
      enabled: true

CommandLineRunner로 수동 실행

@Component
@RequiredArgsConstructor
public class BatchJobRunner implements CommandLineRunner {

    private final JobLauncher jobLauncher;
    private final Job sampleJob;

    @Override
    public void run(String... args) throws Exception {
        jobLauncher.run(sampleJob, new JobParameters());
    }
}

실무 적용 전략

항목 전략

데이터 크기 Chunk 기반으로 대량 데이터를 나눠 처리
장애 대응 JobExecution, StepExecution을 통해 중단/재시작 가능
스케줄링 Spring Scheduler 또는 외부 Scheduler 연동
멀티 쓰레드 처리 TaskExecutor를 설정해 병렬 처리 가능
로깅 Batch Job 별 실행 로그를 DB 또는 파일로 저장

마무리 요약

항목 요약

핵심 구성 Job → Step → Reader → Processor → Writer
장점 대용량 데이터 안정적 처리, 장애 복구 가능
실무 팁 Chunk 사이즈 조절, 멀티 쓰레드 설정, 외부 시스템 연동
확장성 Spring Scheduler, Cloud Batch 서비스와 연계 가능
추천 시나리오 정기 리포트, 데이터 마이그레이션, 파일 → DB 대량 적재

다음 편 예고

Spring Boot 시리즈 31편: Spring Scheduler – 정기 작업 자동화 및 서비스 운영 효율화 전략

728x90