스프링 배치는 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
JobParameter는 Job 실행 시 함께 제공되는 파라미터를 의미한다. JobParameter는 JobInstance를 구분하는 주요 키가 되며, 이를 통해 다른 인스턴스와 식별이 가능해진다.
특징
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
StepExecution은 Step에 대한 실제 실행 정보이다.
StepExecution은 각 Step별로 실행 상태, 처리한 아이템 수, 발생한 예외 등의 정보를 기록한다.
특징
StepExecution은 한 번의 Step 실행 결과를 담는다. |
동일한 Step을 여러 번 실행하면(재시도나 재시작) 각 실행마다 새로운 StepExecution이 생성된다. |
StepContribution
StepContribution은 StepExecution 과정에서 Step이 수행하는 "기여(contribution)"를 캡처하는 개념이다. 예를 들어, chunk 기반 Step에서는 몇 개의 아이템을 읽었고 썼는지 등의 통계 정보를 담아 StepExecution에 반영한다.
특징
Step이 실행되는 동안 readCount, writeCount, filterCount 등의 통계 정보가 StepContribution을 통해 기록된다. |
최종적으로 StepExecution에 합산되어 Step의 결과물로 남게 된다. |
ExecutionContext
ExecutionContext는 Job이나 Step 레벨에서 상태를 저장하는 공유 저장소 역할을 한다. 배치를 재실행하거나 Step을 재시작할 때 이전 상태를 기억해야 하는 경우가 많은데 이러한 상태 정보를 ExecutionContext에 저장한다.
특징
JobExecutionContext: JobExecution과 연관된 범용 Context. |
StepExecutionContext: 각 StepExecution과 연관된 Context. |
Map 형태의 key-value 구조로 임의의 Object를 저장할 수 있다. |
재시작 시에 이전 ExecutionContext를 불러와 상태를 복원할 수 있다. |
JobRepository
JobRepository는 스프링 배치 실행 정보를 관리하는 저장소 역할을 하며, JobExecution, StepExecution, ExecutionContext 등의 메타데이터를 데이터베이스나 다른 영속적 매체에 관리한다.
특징
스프링 배치의 전반적인 상태 관리(메타데이터 관리)의 핵심. |
트랜잭션 처리 하에 Job/Step 실행 정보를 기록하고 업데이트한다. |
JobLauncher
JobLauncher는 Job을 실제로 실행시키는 인터페이스이다. 외부에서 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
'Dev > Spring Framework' 카테고리의 다른 글
『Spring Batch』 스프링 배치 반복 및 오류 제어 (0) | 2024.12.10 |
---|---|
『Spring Batch』 스프링 배치 메타 데이터 스키마 (2) | 2024.12.09 |
프레임워크와 라이브러리의 차이 (0) | 2024.12.06 |
『MVC』 Bean Validation (0) | 2024.12.03 |
『Spring MVC』 필터, 인터셉터 (0) | 2024.11.26 |