본문 바로가기
Dev/Spring Framework

『Spring Batch』 스프링 배치 도메인 이해

by 세대교체 2024. 12. 7.

 

스프링 배치Job을 중심으로 JobInstance, JobExecution, Step, StepExecution, 그리고 이들의 상태 정보인 ExecutionContext 등을 통해 배치 작업을 수행하고 관리할 수 있는 구조를 제공한다.

 

도메인 객체들의 관계를 이해하면 배치 실행 흐름에서 발생하는 상태 변화와 재시작 로직을 보다 명확히 파악할 수 있다.

도메인 객체들을 자세히 살펴보기 전에 간략하게 정리한 표를 우선적으로 보겠다.

도메인 객체 설명
Job 배치 작업 단위
JobInstance Job의 특정 파라미터로 실행한 인스턴스
JobParameter JobInstance를 식별하는 실행 파라미터
JobExecution JobInstance 별 실제 실행 정보
Step Job을 구성하는 실행 단위
StepExecution Step 실행 결과 정보
StepContribution StepExecution에 반영되는 처리 통계
ExecutionContext Job/Step 실행 상태 정보 저장소
JobRepository 실행 메타데이터를 영속화하는 저장소
JobLauncher Job 실행 트리거 역할

 

 

 

Job

Job은 스프링 배치 처리 과정의 최상위 개념으로 하나의 배치 작업 단위를 의미한다. 예를 들어 "매일 자정에 실행되어 고객 정보를 업데이트하는 배치"나 "주간 매출 리포트를 생성하는 배치"가 Job으로 표현될 수 있다.

 

특징

 
Job은 하나 이상의 Step으로 구성된다.
Job을 실행하기 위해서는 고유한 식별자를 갖는 JobInstance가 필요하다.
Job은 재시작 가능 여부, 실패 시 특정 Step부터 재실행하는 재시도 로직 등의 메타정보를 가진다.

 

 

 

 

JobInstance

 

JobInstance는 실제 Job의 "실행 단위"를 식별하는 개념이다.

JobInstance는 동일한 Job에 대해 서로 다른 실행 파라미터(JobParameter)로 실행할 때 구분되는 논리적 실행 단위를 의미한다.

 

특징

 
동일한 Job이라도 매번 다른 JobParameter로 실행한다면 각각의 실행은 새로운 JobInstance로 간주된다.
예를 들어, exampleJob을 date=2024-12-07이라는 파라미터로 실행하면 하나의 JobInstance가 생성되고 date=2024-12-08로 실행하면 또 다른 JobInstance가 생성된다.

 

 

 

 

JobParameter

 

JobParameterJob 실행 시 함께 제공되는 파라미터를 의미한다. JobParameterJobInstance를 구분하는 주요 키가 되며, 이를 통해 다른 인스턴스와 식별이 가능해진다.

 

특징

 
JobParameter변하지 않는 불변(immutable)한 특성을 갖는다.
Date, Long, String, Double 등의 기본 타입에 대해 지원한다.

 

 

 

 

JobExecution

 

JobExecution은 하나의 JobInstance에 대한 "실제 실행"을 나타내는 엔티티다. JobExecution은 Job 실행 상태, 시작 시간, 종료 시간, 실패 원인 등의 실행 메타데이터를 저장한다.

 

특징

 
JobInstance가 하나라도 여러 번 재시도하거나 재실행한다면 각 실행은 서로 다른 JobExecution으로 기록된다.
JobExecution을 통해 현재 Job이 정상적으로 완료되었는지 실패했는지 재시작 가능한 상태인지 추적할 수 있다.

 

 

 

 

Step

 

Step은 Job을 구성하는 실제 실행 단위로, "Reader-Processor-Writer" 패턴과 같이 개별 처리 로직을 담는다. 하나의 Job은 여러 개의 Step을 직렬 혹은 조건부로 실행할 수 있다.

 

특징

 
Step은 ItemReader, ItemProcessor, ItemWriter를 통해 chunk 단위로 데이터를 처리하거나, Tasklet을 통해 단일 작업을 수행할 수 있다.
Job내에서 Step 간 순서 혹은 조건부 흐름(예: 실패 시 다른 Step 실행)이 정의된다.
API를 설정할 때 Tasklet과 Chunk 기반 클래스를 동시에 설정할 수 없다.

 

 

 

 

StepExecution

 

StepExecutionStep에 대한 실제 실행 정보이다.

StepExecution은 각 Step별로 실행 상태, 처리한 아이템 수, 발생한 예외 등의 정보를 기록한다.

 

특징

 
StepExecution한 번의 Step 실행 결과를 담는다.
동일한 Step을 여러 번 실행하면(재시도나 재시작) 각 실행마다 새로운 StepExecution이 생성된다.

 

 

 

StepContribution

 

StepContribution은 StepExecution 과정에서 Step이 수행하는 "기여(contribution)"를 캡처하는 개념이다. 예를 들어, chunk 기반 Step에서는 몇 개의 아이템을 읽었고 썼는지 등의 통계 정보를 담아 StepExecution에 반영한다.

 

특징

 
Step이 실행되는 동안 readCount, writeCount, filterCount 등의 통계 정보StepContribution을 통해 기록된다.
최종적으로 StepExecution에 합산되어 Step의 결과물로 남게 된다.

 

 

 

ExecutionContext

 

ExecutionContextJob이나 Step 레벨에서 상태를 저장하는 공유 저장소 역할을 한다. 배치를 재실행하거나 Step을 재시작할 때 이전 상태를 기억해야 하는 경우가 많은데 이러한 상태 정보를 ExecutionContext에 저장한다.

 

특징

 
JobExecutionContext: JobExecution과 연관된 범용 Context.
StepExecutionContext: 각 StepExecution과 연관된 Context.
Map 형태의 key-value 구조로 임의의 Object를 저장할 수 있다.
재시작 시에 이전 ExecutionContext를 불러와 상태를 복원할 수 있다.

 

 

 

 

JobRepository

 

JobRepository스프링 배치 실행 정보를 관리하는 저장소 역할을 하며, JobExecution, StepExecution, ExecutionContext 등의 메타데이터를 데이터베이스나 다른 영속적 매체에 관리한다.

 

특징

 
스프링 배치전반적인 상태 관리(메타데이터 관리)의 핵심.
트랜잭션 처리 하에 Job/Step 실행 정보를 기록하고 업데이트한다.

 

 

 

 

JobLauncher

 

JobLauncherJob을 실제로 실행시키는 인터페이스이다. 외부에서 Job과 JobParameter를 전달받아 JobExecution을 시작하며 내부적으로 JobRepository를 이용해 실행 상태를 관리한다.

 

특징

 
JobLauncher의 run() 메서드를 통해 Job과 JobParameters를 전달하면 새로운 JobInstance/JobExecution이 생성되고 실행이 시작된다.
동기/비동기 실행이 가능하며 스케줄러나 기타 트리거 로직과 연계해 정기 배치 실행에 활용할 수 있다.

 

 


출처

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard

 

스프링 배치 강의 | 정수원 - 인프런

정수원 | 초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를

www.inflearn.com