[Spring] Spring Batch: 대용량 배치 처리의 핵심 프레임워크

2026. 8. 2. 01:47·Backend/Spring

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

Spring Batch란?

Spring Batch는 대용량 데이터를 효율적으로 처리하기 위한 배치 처리 프레임워크이다.
주기적으로 반복되는 작업(예: 통계 계산, 로그 분석, DB 정리 등)을 안정적으로 실행하고, 실패 복구 및 재시작 기능까지 제공합니다.

대량의 데이터를 "읽고 -> 가공하고 -> 저장하는" 흐름을 체계적으로 관리할 수 있게 도와주는 틀입니다.


언제 사용할까?

  • 매일 자정에 주문 데이터 정산
  • 100만 건 이상의 로그를 DB에 저장
  • CSV 파일을 읽어 데이터베이스에 이관
  • 사용자 가입 내역을 분석해 레포트 생성

Spring Batch의 기본 구조

Job: 전체 배치 작업의 단위

  • 하나의 Job은 여러 Step으로 구성

Step: Job 안의 실행 단위

ItemReader: 데이터 입력

  • CSV, DB, XML, API 등에서 데이터를 읽어옴

ItemProcessor (선택): 데이터 가공

  • 필터링, 변환, 유효성 검사 등 수행

ItemWriter: 데이터 출력

  • DB 저장, 파일 쓰기 등 출력 작업

청크 기반 처리

Spring Batch는 데이터를 청크(chunk) 단위로 처리한다.

예를 들어:

  • 청크 크기: 10
  • 10건의 데이터를 읽고 -> 처리하고 -> 저장
  • 하나의 청크는 트랜잭션 단위로 관리 (중간 실패 시 전체 청크 롤백)
[읽기] 10건 -> [가공] 10건 -> [저장] 10건 (커밋)

예시 코드

@Bean
public Job exampleJob(JobBuilderFactory jobBuilderFactory, Step step) {
    return jobBuilderFactory.get("exampleJob")
        .start(step)
        .build();
}

@Bean
public Step step(StepBuilderFactory stepBuilderFactory,
                 ItemReader<MyItem> reader,
                 ItemProcessor<MyItem, MyItem> processor,
                 ItemWriter<MyItem> writer) {
    return stepBuilderFactory.get("step")
        .<MyItem, MyItem>chunk(10)
        .reader(reader)
        .processor(processor)
        .writer(writer)
        .build();
}

스케줄링과 연동

Spring Batch 자체에는 스케줄링 기능이 없지만, 아래 도구들과 함께 사용 가능

  • @@cheduled (Spring Scheduler)
  • Quartz
  • cron (리눅스 기반)

트랜잭션 & 예외 처리

  • 트랜잭션은 청크 단위로 관리
  • 예외가 발생하면 해당 청크 전체가 롤백
  • skip, retry, listener 등을 통해 예외 상황에 유연하게 대응 가능

주의 사항

  • 청크 사이즈 조절: 너무 작으면 느리고, 너무 크면 메모리 부담 -> 서비스에 맞는 적당한 청크 사이즈 조절 필요
  • 로깅 필수: 처리된 건수, 실패 건수, 소요 시간 로그를 남기는 것을 추천
  • JobParameter 사용: 동일 Job을 반복 실행하려면 유니크한 파라미터 필요 (ex. UUID)
  • 병렬 처리 고려: 대용량 데이터는 TaskExecutor, Partitioner, Multi-threaded Step으로 병렬화 가능

'Backend > Spring' 카테고리의 다른 글

Spring Boot 4에서 사라진 ObjectMapper Bean  (0) 2026.08.05
[Spring] Filter & Interceptor  (0) 2026.08.01
✏️ [Spring] Bean 생명주기  (0) 2026.08.01
[Spring] 역할과 구현의 분리, 스프링 컨테이너의 필요성  (0) 2026.07.31
✏️ [Spring] Spring Security Testing  (0) 2026.07.31
'Backend/Spring' 카테고리의 다른 글
  • Spring Boot 4에서 사라진 ObjectMapper Bean
  • [Spring] Filter & Interceptor
  • ✏️ [Spring] Bean 생명주기
  • [Spring] 역할과 구현의 분리, 스프링 컨테이너의 필요성
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Book
    Project
    척척학사
    나의 작은 프로젝트
    interview
    HTTP WEB 기본 지식
    object
    Spring
    http
    Python
    개념 정리!
    java
    CS Interview
    BOJ
    트러블슈팅
    jpa
    Spring MVC
    Algorithm
    OS
    게시판
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
[Spring] Spring Batch: 대용량 배치 처리의 핵심 프레임워크
상단으로

티스토리툴바