BackEnd/Spring Batch

Spring Batch 실행 순서 정리

Raconer 2025. 6. 24. 23:23
728x90

Spring Batch는 Job → Step → Reader/Processor/Writer 구조로 구성되며, 실행 시 각 컴포넌트가 정의된 순서와 스프링 컨텍스트 초기화 흐름에 따라 동작합니다. 이 글에서는 클래스 단위 기준으로 실행 순서를 정리합니다.


✅ 실행 순서 흐름 (클래스 단위)

BatchApplication
└─ BatchConfig                         ← @Configuration: Job, Step, Reader 등 Bean 등록
└─ UserJobLauncher                     ← @Component: JobLauncher로 수동 Job 실행
   └─ ImportUserJob                    ← BatchConfig에서 정의된 Job
      ├─ JobCompletionNotificationListener.beforeJob()  ← Job 실행 전 로직
      └─ ImportUserStep                ← Job 내 단일 Step
         ├─ UserReader                 ← ItemReader: 입력 데이터 읽기
         ├─ UserProcessor 또는 PersonItemProcessor  ← ItemProcessor: 데이터 가공 처리
         └─ UserWriter                 ← ItemWriter: 처리된 데이터 저장
      └─ JobCompletionNotificationListener.afterJob()   ← Job 실행 후 로직


🧩 실행 단계별 설명

1. BatchApplication

  • Spring Boot 애플리케이션의 진입점
  • @SpringBootApplication@ComponentScan 포함

2. BatchConfig

  • @Configuration 클래스
  • SpringContext 초기화 시 가장 먼저 실행되어 Bean 등록
  • 등록 대상:
    • Job, Step, ItemReader, ItemProcessor, ItemWriter, JobListener

3. UserJobLauncher

  • @Component로 등록된 실행 트리거
  • JobLauncher.run(importUserJob, ...) 형태로 Job을 수동 실행

4. ImportUserJob

  • 실제 실행되는 Job 정의
  • 내부에 Step 및 Listener 포함

5. JobCompletionNotificationListener

  • beforeJob(): Job 시작 전 실행
  • afterJob(): Job 완료 후 실행

6. ImportUserStep

  • Job 내 단일 Step
  • 일반적으로 chunk 기반 구성

7. UserReader, UserProcessor, UserWriter

구성 요소 역할
UserReader 데이터를 읽음 (CSV, DB 등)
UserProcessor or PersonItemProcessor 데이터 가공, 필터링
UserWriter 최종 데이터 저장

📌 정리 요약

  • BatchConfig는 컨텍스트 초기화 시 가장 먼저 실행됨
  • UserJobLauncher는 구성된 Job을 수동 실행
  • Job → Step → Chunk(ItemReader → Processor → Writer) 순으로 처리됨
  • 각 단계에서 필요한 컴포넌트는 클래스 단위로 명확히 분리됨

🔚 마무리

Spring Batch는 실행 순서가 명확하며, 클래스와 Bean 등록 시점을 이해하면 디버깅과 유지보수가 매우 용이해집니다. 위 구조는 수동 Job 실행 방식 기반이지만, 자동 실행(JobLauncherApplicationRunner) 방식과도 거의 동일한 실행 흐름을 따릅니다.

728x90