[INTRO] 2. Job, Step, 그리고 프레임워크의 역할

y001·2026년 2월 2일

Spring Batch Guide

목록 보기
2/19
post-thumbnail

1. Job과 Step

Job은 하나의 완결된 배치 처리를 의미한다. 운영 환경에서 “배치를 실행한다”라고 말할 때의 기준 단위가 Job이다. 일일 매출 집계, 휴면 회원 정리, 정기 결제 처리, 대용량 데이터 이관과 같은 작업은 각각 하나의 Job으로 정의된다. Job은 단순한 메서드 호출이 아니라, 실행 이력과 상태를 포함한 하나의 배치 시나리오를 대표하는 개념이다.

Step은 Job을 구성하는 실행 단위이다. 하나의 Job은 하나 이상의 Step으로 구성되며, 각 Step은 Job 내부에서 순차적으로 실행된다. 예를 들어 일일 매출 집계 Job은 전일 주문 데이터를 집계하는 Step, 집계 결과를 알림으로 전달하는 Step, 캐시를 갱신하는 Step으로 분리할 수 있다. Job이 성공적으로 완료되기 위해서는 구성된 모든 Step이 정상적으로 완료되어야 한다. 이러한 구조로 인해 Spring Batch는 Job 단위뿐 아니라 Step 단위로도 실행 상태와 이력을 관리한다.

2. Spring Batch가 제공하는 영역

Spring Batch는 배치 실행을 위한 핵심 시스템과 인프라를 프레임워크 차원에서 제공한다. 개발자는 이 영역을 직접 구현하지 않고, 제공되는 구조 위에서 배치를 구성한다.

구성 요소역할의미
Job배치 처리의 최상위 단위하나의 완결된 배치 시나리오를 표현한다
StepJob을 구성하는 실행 단위Job 내부의 처리 흐름을 단계적으로 분리한다
JobLauncher배치 실행의 진입점Job과 파라미터를 받아 실행을 시작한다
JobRepository배치 메타데이터 저장소Job/Step 실행 이력, 상태, 결과를 관리한다
ExecutionContext실행 중 상태 저장소Step 간 데이터 공유 및 재시작 시 상태 복원을 담당한다
ItemReader 구현체데이터 읽기 인프라JDBC, JPA, 파일, NoSQL 등 다양한 소스를 지원한다
ItemWriter 구현체데이터 쓰기 인프라처리된 데이터를 저장하는 표준화된 방식 제공

이 영역에서 가장 중요한 컴포넌트는 JobRepository이다. Spring Batch는 Job과 Step의 실행 상태를 데이터베이스에 저장하는 것을 전제로 설계되었다. 이를 통해 배치 실행 이력을 추적하고, 실패한 배치를 재시작하며, 중복 실행을 방지할 수 있다. ExecutionContext 역시 이러한 설계를 보완하는 역할을 하며, 실행 중 상태를 안전하게 보존한다.

3. 개발자가 제어하는 영역

Spring Batch가 실행 시스템의 뼈대를 제공한다면, 그 위에 어떤 배치를 만들지는 개발자가 제어해야 한다.

개발자는 @Configuration을 통해 Job과 Step을 빈으로 정의하고, 실행 순서와 조건을 조합한다. 데이터 처리 배치의 경우 Spring Batch가 제공하는 ItemReader와 ItemWriter를 사용하되, 실제로 어떤 데이터를 읽고 어떻게 저장할지는 개발자가 결정한다. 특히 ItemProcessor는 비즈니스 로직의 핵심이기 때문에 대부분 직접 구현하게 된다.

또한 모든 배치가 read-process-write 패턴만을 따르지는 않는다. 파일 정리, 디렉토리 관리, 알림 발송과 같은 작업은 Tasklet 기반 Step으로 구현되며, 이 역시 개발자의 책임 영역이다. 단순한 작업처럼 보여도 트랜잭션, 재실행, 중복 실행 여부를 고려하지 않으면 운영 환경에서 문제를 일으킬 수 있다.

0개의 댓글