Spring Batch 입문 48편 — FAQ + 시리즈 완주 종합

2026-05-17Spring Batch 입문에서 운영까지

Spring Batch 입문에서 운영까지 시리즈 마지막 48편. 공식 FAQ 7가지 + 자주 만나는 운영 Q&A, 1~48편 완주 회고, 입문자 → 운영자 학습 경로, Spring Batch 6.0 의 핵심 변경 종합, 시리즈 1 (자바 백엔드 입문 59편) + 시리즈 2 (데이터 인프라 130편) + 시리즈 3 (Spring Batch 48편) 의 통합 학습 그림, 더 깊은 학습 자료까지. 237편 누적 학습 노트의 마무리.

📚 Spring Batch 입문에서 운영까지 · 48편 — FAQ + 시리즈 완주 종합

Spring Batch 입문에서 운영까지 시리즈 48편 중 마지막 48편. 1편 Spring Batch 입문 부터 시작해 48주제 의 학습 노트를 마무리해요. FAQ + 회고 + 학습 가이드.

Part 1: 공식 FAQ 7가지

Spring Batch 공식 문서의 자주 묻는 질문 정리 + 시리즈 글 연결.

Q1: 여러 thread · process 로 Job 실행 가능?

A — 3가지 방법. 단 정말 필요한지 검토 우선.

  1. Step 에 TaskExecutor 추가 (37편 Multi-threaded Step) — TaskExecutor(쓰레드 풀 실행기) 를 끼우는 방식이고, Step 이 idempotent (같은 입력 = 같은 결과) 일 때만 안전
  2. PartitionStep (37편 Partitioning) — Step 을 partition 단위로 쪼개 병렬 실행하는 구조라 IO 집약 batch 권장, scope="step" 필수
  3. Remote Chunking (44편) — chunk 를 원격 worker 에 분배하는 패턴이라 JMS (Java Messaging Service) 등 durable middleware (메시지 유실 없는 미들웨어) 필요

→ 측정 후 결정. Partitioning 이 가장 안전.

Q2: ItemReader 를 thread-safe 하게?

Aread()synchronized wrapping (동기화로 감싸기).

→ 25편 SynchronizedItemStreamReader. 단: - 재시작 안전성 잃음 - step 을 non-restartable 로 mark - saveState=false 권장 (36편)

Q3: 프레임워크 클래스 extend 권장?

A비권장. Composition (조합) 또는 fork (포크) 권장.

Generally you can expect anything at the top level of org.springframework.batch.* to be public, but not necessarily sub-classable. Extending our concrete implementations is discouraged. — 공식 reference

인터페이스만 의존 = 최대 portability (이식성).

Q4: Spring Batch vs Quartz?

A서로 다른 목적. 함께 사용 가능.

Spring Batch Quartz
목적 대용량 데이터 처리 task scheduling
chunk·transaction X
Cron · 시간 trigger X

일반적 조합 — Quartz 가 cron trigger + Spring Batch 가 처리. 또는 43편 Spring Integration messaging trigger.

Q5: Spring Batch Job scheduling?

A별도 scheduling 도구 사용. Spring Batch 는 scheduler 가 아님.

옵션: - Quartz — Java 표준 - OS cron — 가벼움 - Control-M · Autosys — enterprise scheduler (기업용 스케줄러) - Spring @Scheduled — 가장 단순

@Scheduled(cron = "0 0 2 * * *")
public void launchDailyJob() throws Exception {
    JobParameters params = new JobParametersBuilder()
        .addLong("run.id", System.currentTimeMillis())
        .toJobParameters();
    jobLauncher.run(dailyJob, params);
}

Q6: 성능 · 확장성 최적화?

A — Step 의 책임. 37편 6가지 scaling 전략 종합:

  • Multi-threaded Step
  • Parallel Steps
  • Local Chunking (v6 신규)
  • Remote Chunking
  • Partitioning
  • Remote Step (v6 신규)

측정 + 적절한 전략 선택.

Q7: Messaging 으로 batch 확장?

ASEDA (Staged Event-Driven Architecture) 패턴.

A pipeline approach to batch processing is highly beneficial, leading to resilience and high throughput. — 공식 reference

→ 42·43·44편 Spring Batch Integration. 메시지 기반 batch.

Part 2: 운영 Q&A — 자주 만나는 자리

Q: 같은 parameter 로 Job 다시 못 돌리나요?

AJobInstance already exists — 같은 identifying parameter (식별용 파라미터) 의 COMPLETED JobInstance 가 재실행 불가.

해결: 1. run.id timestamp 추가 (가장 흔함) — 21편·43편 2. JobParametersIncrementer (파라미터 자동 증가기) — 자동 증가 3. JOB_KEY 직접 정리 (실수 위험) — 47편

Q: Job 이 STARTED 상태로 멈췄어요

A — JVM crash · kill -9 · OOM 가능성. abnormal termination (비정상 종료).

해결 (47편):

UPDATE BATCH_JOB_EXECUTION
SET STATUS = 'ABANDONED',
    EXIT_CODE = 'ABANDONED',
    END_TIME = NOW(),
    VERSION = VERSION + 1
WHERE JOB_EXECUTION_ID = ?;

→ 그 후 재시작 가능 상태.

Q: Chunk size 어떻게 정하나요?

A측정 + 데이터 특성.

권장 시작점: - DB → DB = 500~1000 - 외부 API 호출 = 10~50 (API rate-limit) - 큰 객체 (메모리 부담) = 50~200 - 단순 라인 변환 = 1000+

측정 — chunk size 변경 + throughput (처리량) 측정 + 메모리 모니터링.

Q: Skip vs Retry 언제?

A — 데이터의 근본 성격.

Skip Retry
의미 invalid (영구) transient (일시)
잘못된 데이터 row DB deadlock · API 503
입력 같은 입력 다시 = 같은 실패 같은 입력 다시 = 성공 가능

→ 14편·15편·39편. 둘 다 적용 가능 (다른 예외 type).

Q: ExecutionContext vs DB column?

A — 데이터의 크기·중요도.

자리 권장
소량 state (position·count) ExecutionContext
대량 데이터 DB column
다른 batch 와 공유 DB column
운영자 가시성 필요 DB column
Spring Batch 내부 사용 ExecutionContext

→ 24편·36편 Process Indicator (처리 표시자) 비교.

Q: 운영 환경 schema 자동 생성?

Aspring.batch.jdbc.initialize-schema: never + DBA 명시 schema.

자동 생성 = 실수 시 prod 데이터 손실. 운영 안전선.

Q: Multi-threaded Step 에서 Reader thread-safety?

A — 대부분 reader NOT thread-safe:

Reader thread-safe
FlatFileItemReader X
JdbcCursorItemReader X
StaxEventItemReader X
JdbcPagingItemReader
KafkaItemReader (partition 단위 안전)

해결 = 25편 SynchronizedItemStreamReader wrap 또는 Partitioning 전환.

Part 3: 1~48편 완주 회고

Part 1 — 입문·기본 (1~4편)

무엇을 배웠나 — Spring Batch 의 존재 이유, 기본 도메인 객체 5개 (Job · JobInstance · JobExecution · Step · StepExecution), Spring Batch 6 의 새 기능들.

핵심대량 처리 + restart 안전성 + transaction 관리 = Spring Batch 의 3대 가치.

Part 2 — Job 설정·실행 (5~10편)

무엇을 배웠나 — JobRepository · JobOperator · JobLauncher 의 역할 분담, ResourcelessJobRepository (v6), CommandLineJobOperator (v6), Job parameter validation, JobExplorer 의 metadata 조회.

핵심Job 의 lifecycle + 실행 컨트롤 plane. @EnableBatchProcessing vs DefaultBatchConfiguration 선택.

Part 3 — Step·Chunk Processing (11~18편)

무엇을 배웠나 — chunk-oriented processing 의 내부 메커니즘, restart 위치 추적, skip · retry · transaction attributes, ItemStream 등록의 6가지 자리, Step Listener 6종.

핵심chunk 가 Spring Batch 의 심장. transaction · skip · retry · ItemStream 이 한 chunk 안에서 함께 동작.

Part 4 — TaskletStep · Flow Control (19~21편)

무엇을 배웠나 — TaskletStep 의 단발 작업, Flow Control 의 5 패턴 (sequential · conditional · decision · split · stop&restart), Late Binding + StepScope/JobScope.

핵심chunk 외 자리 + Job 의 흐름 설계. Late Binding 으로 Job 시작 시점에 동적 주입.

Part 5 — ItemReader · ItemWriter 기본 (22~26편)

무엇을 배웠나read()·write(Chunk) 의 contract, Delegate Pattern 의 ItemStream 등록 함정, 표준 구현체 카탈로그, Custom Reader/Writer 작성, idempotency 원칙.

핵심데이터 입출력 의 표준 추상화. 대부분 운영에서는 표준 구현체 + Late Binding 으로 충분.

Part 6 — File · DB Reader/Writer 심화 (27~34편)

무엇을 배웠나 — Flat File · XML · JSON · Multi-file 의 reader/writer 옵션, Database 의 cursor vs paging, JdbcBatchItemWriter UPSERT 패턴, flush 시점 함정.

핵심실전 데이터 포맷 별 깊은 옵션. 운영 환경의 80% 이상이 이 자리.

Part 7 — ItemProcessor · 재사용 (35~36편)

무엇을 배웠나 — ItemProcessor 의 3가지 반환 (non-null · null filter · 예외 skip), CompositeItemProcessor 체인, ValidatingItemProcessor, 기존 Service wrap (ItemReaderAdapter), Process Indicator 패턴.

핵심변환·필터·검증의 자리. null = filter, 예외 = skip 의 명확 분리.

Part 8 — Scaling · Parallel (37편)

무엇을 배웠나 — 6가지 scaling 전략 (Multi-threaded · Parallel Steps · Local Chunking v6 · Remote Chunking · Partitioning · Remote Step v6). 결정 트리.

핵심측정 우선. 대부분 환경 = Partitioning 권장.

Part 9 — Repeat · Retry · Testing (38~40편)

무엇을 배웠나 — RepeatTemplate · CompletionPolicy · ExceptionHandler 의 building block, Spring Batch 6 의 Spring Retry 제거 + Framework core retry, @SpringBatchTest + StepScopeTestExecutionListener + MetaDataInstanceFactory.

핵심Spring Batch 의 내부 building block + 테스트. Repeat 이해 = 프레임워크 이해.

Part 10 — Patterns · Integration · Observability (41~45편)

무엇을 배웠나 — Common Patterns 8가지 카탈로그, Spring Batch Integration 의 6 결합점, 메시지 기반 Job 실행, AsyncItemProcessor + Async Writer, Remote Chunking · Partitioning 구체 구현, Micrometer (메트릭 라이브러리) Observability + Tracing.

핵심현장 운영 패턴 + 분산 처리 + 관측성. Micrometer 가 가장 즉시 도입할 가치.

Part 11 — 운영·완주 (46~48편)

무엇을 배웠나 — JFR (Java Flight Recorder, JVM 프로파일러) · Meta-Data Schema 6 테이블 · 운영 SQL · Glossary.

핵심DB metadata 와 JVM profiling 으로 운영 troubleshooting. Micrometer + JFR 결합.

Part 4: 학습 경로 가이드

입문자 — "Spring Batch 처음 봐요"

1주차: 1~4편 (입문) + 11편 Step Overview + 12편 Chunk Configuring.

2주차: 5~10편 (Job 설정) + 19편 TaskletStep + 20편 Flow Control.

3주차: 22~26편 (ItemReader/Writer 기본) + 27·28·29·30편 (Flat File).

4주차: 34편 (Database) + 35편 (ItemProcessor) + 13편 (Restart) + 14·15편 (Skip · Retry).

최소 학습 분량 = 20편. 이것만으로도 간단한 batch 운영 가능.

중급 — "기본 알아요, 운영 자신감 ↑"

추가 학습 = +15편:

  • 16편 Transaction Attributes
  • 17·24편 ItemStream 깊이
  • 18편 Step Listener
  • 21편 Late Binding
  • 31·32편 XML · JSON
  • 33편 Multi-file
  • 36편 Process Indicator
  • 37편 Scaling
  • 38·39편 Repeat · Retry building block
  • 40편 Testing
  • 41편 Common Patterns
  • 45편 Observability

→ 누적 35편. 운영 자신감.

상급 — "분산 batch · 큰 시스템 설계"

남은 +13편:

  • 25편 Reader/Writer 카탈로그
  • 26편 Custom
  • 42~44편 Spring Batch Integration
  • 46편 JFR
  • 47편 Schema

48편 완주. 어떤 batch 환경도 자신 있게 설계.

Part 5: Spring Batch 6.0 핵심 변경

4편 whatsnew-v6 의 요약 + 시리즈 통틀어 등장한 변경:

의존성 변경

  • Spring Retry 제거 → Spring Framework 7 core retry (39편)
  • Jackson 3 — XML 처리 등 (31편)
  • JUnit 4 미지원 → Jupiter (5) 필수 (40편)

신규 기능

  • ResourcelessJobRepository (47편) — DB 없이 in-memory
  • CommandLineJobOperator (8편) — 새 CLI runner
  • JFR support (46편) — JVM 프로파일링
  • Local Chunking (37편) — single-process chunk parallel
  • Remote Step (37편) — Step 자체 원격 실행
  • CompositeItemReader (22편·26편) — 여러 reader 순차

deprecated

  • batch-integration XML namespace — v7 제거 예정 (42편)
  • @EnableBatchProcessing(dataSourceRef = ...) 옵션 일부 변경

→ Spring Batch 5 → 6 upgrade 시 이 4가지 영역 점검.

Part 6: 시리즈 1·2·3 통합 학습 그림

시리즈 1 — 자바 백엔드 입문 (59편)

자바 백엔드 입문 1편 부터 — Spring Framework · Spring Boot · JPA · MyBatis 기초.

→ Spring Batch 의 underlying framework 기초. Bean lifecycle · DI · AOP · Configuration · Component scanning 이해.

시리즈 2 — 백엔드 데이터 인프라 (130편)

PostgreSQL · Redis · Kafka 각각데이터 저장소 · 캐시 · 메시지 brokers 깊이.

→ Spring Batch 의 주요 데이터 소스: - PostgreSQL = JdbcBatchItemWriter · JdbcPagingItemReader 의 typical 대상 (34편) - Redis = caching · enrichment processor 의 helper (35편) - Kafka = KafkaItemReader/Writer · Remote Chunking message channel (25편·44편)

시리즈 3 — Spring Batch (48편)

이 시리즈. batch 처리 자체.

3 시리즈 통합 = 백엔드 엔지니어 완성

[시리즈 1: 자바 백엔드 입문 (59편)]
   기초 framework 이해
       ↓
[시리즈 2: 데이터 인프라 (130편)]
   PostgreSQL · Redis · Kafka 깊이
       ↓
[시리즈 3: Spring Batch (48편)]
   batch 처리 완성
       ↓
[운영 환경 자신감]
   - online 시스템 (시리즈 1)
   - 데이터 layer (시리즈 2)
   - 야간 batch · 정산 · ETL (시리즈 3)

237편 누적 학습 노트. 백엔드 엔지니어의 full stack 그림.

Part 7: 더 깊은 학습 자료

공식

  • Spring Batch in Action (Manning) — 깊은 실전 (조금 오래된 버전)
  • Definitive Guide to Spring Batch (Apress, Michael Minella) — 최신 운영 패턴

학습 자료

  • Spring Tips by Josh Long (YouTube)
  • Spring Boot 의 spring-boot-starter-batch source code
  • Spring Batch GitHub issues — 운영 자주 만나는 자리 검색

Part 8: 마지막 한 마디

48편을 마치며 — Spring Batch 의 진짜 가치single-threaded 단순함 + chunk 의 transaction 안전성 + 확장 가능성균형. 측정 + 점진적 개선.

대부분 운영 환경:

  1. 단순 batch = @Scheduled + JobLauncher + FlatFileItemReader/Writer + JdbcBatchItemWriter
  2. 확장 필요 = Multi-threaded Step → Partitioning
  3. 이벤트 기반 = Spring Integration messaging
  4. 관측성 = Micrometer + Prometheus + Grafana
  5. troubleshooting = JFR + JMC (Java Mission Control, JFR 분석 GUI)

이 5단계가 Spring Batch 운영의 일반적 진화 경로.

237편 누적 학습 노트 — 짧은 글로 압축 한 운영 지식. 실무에서 책상에 펼쳐 둘 참고자료가 되었으면 합니다.

시리즈 인덱스 — 48편 한눈에

Part 1 — 입문·기본

  1. Spring Batch 입문
  2. Architecture
  3. Domain Language
  4. What's New in v6

Part 2 — Job 설정·실행

  1. Infrastructure
  2. Configuring Job
  3. Job Repository
  4. Job Operator
  5. Running Job
  6. Advanced Metadata

Part 3 — Step · Chunk Processing

  1. Step Overview
  2. Chunk Configuring
  3. Step Restart
  4. Skip Logic
  5. Retry Logic
  6. Transaction Attributes
  7. ItemStream Registering
  8. Step Listeners

Part 4 — TaskletStep · Flow Control

  1. TaskletStep
  2. Controlling Flow
  3. Late Binding

Part 5 — ItemReader · ItemWriter 기본

  1. Item Reader
  2. Item Writer
  3. Item Stream
  4. Reader/Writer Impls 카탈로그
  5. Custom Reader/Writer

Part 6 — File · DB Reader/Writer

  1. Flat Files Overview
  2. Field Set
  3. Flat File Reader
  4. Flat File Writer
  5. XML Reader/Writer
  6. JSON Reader/Writer
  7. Multi-File Input
  8. Database Reader/Writer

Part 7 — ItemProcessor · 재사용

  1. Item Processor
  2. Reusing Services

Part 8 — Scaling · Parallel

  1. Scaling Parallel

Part 9 — Repeat · Retry · Testing

  1. Repeat
  2. Retry
  3. Testing

Part 10 — Patterns · Integration · Observability

  1. Common Patterns
  2. Integration Overview
  3. Launching via Messages
  4. Async · Externalization
  5. Observability · Micrometer

Part 11 — 운영·완주

  1. Java Flight Recorder
  2. Meta-Data Schema
  3. 이 글 — FAQ + 완주 종합 (현재 글)

시리즈 완주

1편 부터 시작한 48편 학습 노트 가 여기서 마무리. 누적 237편 (시리즈 1·2·3 합산) 의 백엔드 학습 자산.

시리즈를 처음부터 다시 읽거나 특정 자리만 다시 찾을 때 47편 인덱스 가 빠른 검색 도움. 시험·실무 직전 압축 노트 가 각 글 끝에 있으니 그 자리만 펼쳐 보기 도 권장.

읽어 주셔서 감사합니다. 모든 글에 작성자의 책상 위 운영 노트 같은 마음으로 담았습니다.

공식 문서: Spring Batch FAQ · Spring Batch Reference 에서 원문을 확인할 수 있어요.

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

답글 남기기

error: Content is protected !!