Post
KO

Spring batch 관련 까먹었던 내용들

batch작업에 대한 정의는 스킵

Batch job을 동작시키는 방법은 애플리케이션 자채 스케줄링을 걸거나 외부 스캐줄링 잡을 만들고 API를 호출해서 실행시키는 방법등이 있다.

Batch 구조

- ItemReader

- ItemProcessor

- ItemWriter

형태로 구성할 수 있음

그리고 Spring에서 Batch Job을 정의하는 데에는 아래와 같이 가능하다.

Job (작업 단위)

├── Step 1 (처리 단계)

│ ├── Reader → Processor → Writer

├── Step 2 (…)

└── Step 3 (…)

Job이란

Job은 Spring Batch에서 실행할 전체 배치 작업의 논리적 단위입니다.

아래처럼 여러 스텝을 이어서 만들 수 있음

@Bean

fun sampleJob(jobRepository: JobRepository, step1: Step, step2: Step): Job {

return JobBuilder("sampleJob", jobRepository) .start(step1) .next(step2) .build()

}

Step이란

Step은 Job을 구성하는 하나의 처리 단위입니다.

Reader → Processor → Writer 세 구성요소를 기반으로 실제 데이터를 처리합니다.

ItemReader

데이터 읽기 (DB, 파일, API 등)

ItemProcessor

데이터 가공, 필터링, 변환

ItemWriter

데이터 쓰기 (DB 저장, 파일 출력 등)

Chunk Size

몇 개 아이템을 한 트랜잭션으로 묶을지 결정

Listeners

before/after read/write/step 등 훅 포인트

하나의 batch job이 수행할 때 파라미터 정보를 넘길 수 있다. 이것을 job parameter라고 하고, reader나 writer등에서 값을 넘겨 받아서 사용할 수 있다.

@StepScope는

Step 실행 시점에 동적으로 Bean을 생성해서 JobParameter나 StepContext에 접근할 수 있게 하는 스코프”입니다.

실무에서는 거의 필수적으로 사용돼요 👇

• Reader/Processor/Writer에 파라미터 주입이 필요할 때

다른 Step마다 Bean 동작을 다르게 해야 할 때

Step 재시작/리트라이 시 독립된 Bean 컨텍스트가 필요할 때

This article is licensed under CC BY 4.0 by the author.