ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드
    기술과 산업/언어 및 프레임워크 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
Designed by Tistory.