Spring Batch 입문 시리즈 1편. Spring Batch 가 어떤 문제를 풀고 한국 회사 백엔드에서 왜 표준이 됐는지, 어떤 자리에 안 어울리는지까지 풀어쓴 학습 노트. 시리즈 1 자바 백엔드 입문 + 시리즈 2 백엔드 데이터 인프라 를 다 본 분의 자연스러운 다음 단계.
이 글은 Spring Batch 입문에서 운영까지 시리즈 48편 중 1편이에요. 자바 백엔드 입문 59편 으로 Spring 코드 짜는 법 을, 백엔드 데이터 인프라 130편 으로 데이터를 어디에 담느냐 를 끝냈다면, 그 위에 "대량 데이터를 어떻게 정기적으로 처리하느냐" 가 이번 시리즈예요.
이 시리즈는 Spring Batch 6.0.3 공식 reference 와 여러 학습 자료를 참고해 한국어 학습 노트로 풀어쓴 자료입니다.
로컬에 Spring Boot 프로젝트를 만들어 *간단한 Job·Step* 을 직접 한두 개 작성·실행해 보면 본문이 머리에 훨씬 잘 박혀요.
Spring Batch가 처음 어렵게 느껴지는 이유
처음 Spring Batch (대량 데이터 일괄 처리용 자바 프레임워크) 를 들으면 세 가지가 함께 흐릿해요.
첫째, "Spring 인데 또 다른 Spring?". Spring Framework·Spring Boot·Spring Data·Spring Security 처럼 프로젝트 이름이 비슷비슷 해서 어디에 위치하는지가 한눈에 안 잡혀요. Spring Batch 는 Spring 위에서 동작하는 별도 프로젝트 인데, 정확한 자리가 처음에는 모호하게 느껴져요.
둘째, "Scheduler 아닌가?". Scheduler (정해진 시각에 작업을 실행해주는 도구) 라 하면 "매일 새벽 2시에 데이터 처리" 같은 시나리오가 떠오르는데, Quartz 같은 게 그 자리고 Spring Batch 도 같은 자리인지 헷갈리죠. 정답은 "Spring Batch ≠ Scheduler". 둘은 함께 쓰는 도구 예요.
셋째, "왜 별도 framework 가 필요한가". 그냥 for loop 로 데이터 읽어 처리하면 되는 것 아닌가 싶죠. 그런데 대량 데이터 + 트랜잭션 + 재시작 + 로깅 + 에러 처리 가 한꺼번에 필요해지면 직접 짜는 코드가 폭증해요. Spring Batch 는 이 모든 반복 코드 를 재사용 가능한 형태 로 묶어줘요.
이 글에서 위 세 가지 의문을 한 번에 정리하고, 어떤 상황에 Spring Batch 가 빛나는지 큰 그림을 그려요. 다음 2편에서 Architecture (구성 요소의 큰 그림) 를 살펴보고, 3편에서 Job·Step·Item 같은 핵심 어휘 를 잡습니다.
Spring Batch가 뭔가 — 한 줄 정의
Spring Batch = 대량 데이터를 안정적으로 일괄 처리 하기 위한 경량(lightweight) 배치 프레임워크.
핵심:
- Lightweight — 자체 server·daemon 안 띄움, 일반 Java 애플리케이션 안에서 실행
- 재사용 가능 컴포넌트 — Reader·Processor·Writer 같은 표준 인터페이스
- 트랜잭션·재시작·skip·retry 같은 반복 로직 framework 가 처리
- Spring Framework 위 — DI·@Configuration·@Bean 등 익숙한 패턴 그대로
비유로 보면, Spring MVC (웹 요청을 받는 Spring 모듈) 가 사용자 요청을 처리하는 framework 라면 Spring Batch 는 대량 데이터를 정기적으로 처리하는 framework 예요. 둘 다 Spring 의 backbone 위에 올라간 특정 영역 전문 도구 죠.
어떤 일을 해주나
공식 문서의 표현:
"Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging and tracing, transaction management, job processing statistics, job restart, skip, and resource management."
요점:
- Logging·Tracing — 어떤 데이터가 언제 처리됐는지 추적
- Transaction Management — chunk 단위 commit·rollback
- Job 통계 — 처리 건수·실패 건수·소요 시간 자동 기록
- Job Restart — 중단된 지점부터 재개
- Skip·Retry — 일부 레코드 실패 시 건너뛰거나 재시도
- Resource Management — 파일·DB connection 등 자원 관리
직접 짜면 수천 줄 boilerplate. Spring Batch 는 그걸 설정 + 인터페이스 구현 으로 압축해줘요.
"전형적 배치 프로그램" 의 모양
공식 문서가 짧게 정리한 전형적 batch 흐름:
- Read — DB·파일·queue 에서 대량 record 읽기
- Process — 어떤 방식으로 데이터 가공·검증
- Write — 수정된 형태로 다시 저장
이 Read → Process → Write 흐름이 Chunk-oriented Processing (정해진 묶음 단위로 읽고 쓰는 방식) 의 핵심 모델이고, Spring Batch 에서 가장 많이 쓰는 패턴 이에요. 11~18편에서 깊이 풀어 가요.
Spring Batch가 안 맞는 자리
여기서 시험 함정이 하나 있어요 — Spring Batch ≠ Scheduler.
공식 문서의 명시:
"Spring Batch is not a scheduling framework. There are many good enterprise schedulers (such as Quartz, Tivoli, Control-M, and others) available in both the commercial and open source spaces. Spring Batch is intended to work in conjunction with a scheduler rather than replace a scheduler."
즉:
- "매일 새벽 2시에 실행" = Scheduler 영역 (Quartz·Spring
@Scheduled·Kubernetes CronJob·airflow 등) - "실행되었을 때 대량 데이터를 안정적으로 처리" = Spring Batch 영역
운영 환경 흔한 조합:
[Cron / Kubernetes CronJob / Spring @Scheduled]
↓ (트리거)
[Spring Batch Job 실행]
↓ (대량 처리)
[DB·파일·외부 시스템]
또 다른 안 맞는 자리:
- 실시간 처리 (이벤트 한 건씩 즉시) — Kafka Streams·일반 메시지 큐 영역 (시리즈 2의 121~129편)
- 사용자 요청 응답 — Spring MVC·WebFlux
- 작은 데이터 (수십 건) —
forloop 한 줄로 충분
대량(수만~수억) 데이터 + 정기적 처리 + 트랜잭션·재시작 보장 이 모이면 그제서야 Spring Batch.
자주 만나는 비즈니스 시나리오
공식 문서가 정리한 Business Scenarios:
- Commit batch process periodically — 주기적 batch commit
- Concurrent batch processing — 한 job 의 병렬 처리
- Staged, enterprise message-driven processing — 단계별 메시지 기반 처리
- Massively parallel batch processing — 대규모 병렬
- Manual or scheduled restart after failure — 실패 후 재시작
- Sequential processing of dependent steps — 의존 step 순차 처리
- Partial processing: skip records — 일부 record 건너뛰기
- Whole-batch transaction — 전체 batch 가 한 트랜잭션 인 경우
한국 회사 백엔드에서 자주 보는 자리는 야간 결산·월말 정산·신규 가입자 일일 통계·외부 시스템 동기화·리포트 생성·레거시 시스템 ETL (시스템 간 데이터 추출·변환·적재) 같은 것들이에요.
Spring Batch의 역사 — Accenture + SpringSource
여기까지 따라오셨다면 한 가지 의문이 들 거예요 — "왜 framework 자체가 견고해 보일까?". 답은 기원 에 있어요.
- Accenture (글로벌 IT 컨설팅 회사) — 컨설팅·SI 회사. COBOL (옛 기업용 프로그래밍 언어) on mainframes → C++ on Unix → Java 로 이어지는 수십 년 배치 처리 경험
- SpringSource (지금의 VMware, Spring 을 만든 회사) — Spring Framework 의 본거지
- 두 회사가 공동 협력 으로 Accenture 의 사설 batch 프레임워크 와 Spring 의 프로그래밍 모델 을 결합해 만든 게 Spring Batch
그러니 교과서 같은 framework 가 아니라 수십 년 실전 노하우의 응축 이에요. 운영 환경에서 검증된 패턴 이 framework 안에 들어 있어요.
시리즈 1·2와 어떻게 이어지나
이 시리즈를 보는 가장 자연스러운 경로:
- 시리즈 1 자바 백엔드 입문 59편 — Spring·JPA·Web MVC 기본
- 시리즈 2 백엔드 데이터 인프라 130편 — PostgreSQL·Redis·Kafka
- 이 시리즈 (시리즈 3) 48편 — 대량 데이터의 일괄 처리
시리즈 1·2 에서 익힌 모든 도구를 결합 해 실전 batch 를 짜는 영역이에요. JPA (자바 ORM 표준) ·JdbcTemplate (Spring JDBC 헬퍼) ·Kafka 같은 도구를 Spring Batch 의 Reader·Writer 로 쓰는 패턴이 자주 등장해요.
작성 환경·버전 안내
이 시리즈는 Spring Batch 6.0.3 (2026년 stable 기준) 으로 작성:
- Spring Framework 7 기반
- Spring Retry 라이브러리 제거 — Spring Framework core 의 retry 사용 (v6 신규)
- 기존 v5 와 약간의 API 변경 있음 (4편 What's New 에서 깊이)
- 기존 v4.x·v5.x 도 대부분 코드 호환
학습용은 6.0 권장이고, 운영 환경은 회사 버전 확인 후 맞춰 가세요.
시리즈 48편 로드맵
11개 Part:
- Part 1 입문 (1~4) — intro·architecture·domain language·v6 신규
- Part 2 Job 설정·실행 (5~10) — infrastructure·repository·operator·running
- Part 3 Step·Chunk Processing (11~18) — skip·retry·tx·stream·listener
- Part 4 TaskletStep·Flow Control (19~21) — 비-chunk·조건부 flow·late binding
- Part 5 ItemReader/Writer 기본 (22~26)
- Part 6 File·DB Reader/Writer (27~34) — flat file·XML·JSON·DB·custom
- Part 7 ItemProcessor·재사용 (35~36)
- Part 8 Scaling·Parallel (37) — multi-threaded·partitioning·remote chunking
- Part 9 Repeat·Retry·Testing (38~40)
- Part 10 Patterns·Integration·Observability (41~45)
- Part 11 운영·완주 (46~48) — schema·FAQ·종합
각 편 마지막 = 시리즈 다른 편 (앞뒤 5편씩) 자동 링크.
시험 직전 한 번 더 — Spring Batch 입문자가 매번 헷갈리는 것
- Spring Batch = 대량 데이터 일괄 처리 lightweight 프레임워크
- 경량 — 자체 server X, 일반 Java 애플리케이션 안에서 실행
- 핵심 기능 = logging·transaction·통계·restart·skip·retry·resource 관리
- 전형적 batch = Read → Process → Write (Chunk-oriented Processing)
- Spring Batch ≠ Scheduler — Quartz·
@Scheduled·Cron 과 함께 사용 - Scheduler = 언제 실행할지, Spring Batch = 실행되었을 때 어떻게 처리할지
- 실시간 처리 = Kafka Streams·일반 메시지 큐 (시리즈 2 121~129편)
- 사용자 요청 = Spring MVC·WebFlux
- 작은 데이터 (수십 건) =
forloop 한 줄 - 적합 조건 = 대량 + 정기적 + 트랜잭션·재시작·skip·retry 보장
- 비즈니스 시나리오 = 야간 결산·월말 정산·일일 통계·시스템 동기화·리포트 생성·ETL
- 기원 = Accenture (수십 년 batch 경험) + SpringSource 공동 협력
- 시리즈 기준 = Spring Batch 6.0.3 (Spring Framework 7, Spring Retry 제거)
- 시리즈 1 (자바 백엔드 입문) + 시리즈 2 (백엔드 데이터 인프라) 다 본 분에게 자연스러운 다음 단계
- 학습 부담 = 핵심 어휘 (Job·Step·Item·Chunk·Reader·Processor·Writer) 7개부터
- 학습 권장 = 본문 읽기 + 직접 작은 Job 한두 개 손으로
공식 문서: Spring Batch Introduction 에서 원문을 확인할 수 있어요.
시리즈 다른 편 (앞뒤 글 모음)
다음 글: