HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/
Batch

Batch

progress
Done
Tags
Spring
 
이론적 개념동작 원리실전에 적용해보기REFER

이론적 개념

  • 대량 데이터를 처리하기 위해 설계된 기술
  • 주로 데이터 마이그레이션, 변환, 정산 과 같은 반복적이고 일괄적인 작업을 자동화하는데 쓰인다.
Batch VS QuartZ
Batch는 대용량 처리를 위한 기술이고, QuartZ는 주기적인 작업을 위한 기술이다.
Batch는 다양한 스케줄 기능을 지원하지 않으며 QuartZ는 대용량 처리를 지원하지 않는다.
그래서 두가지를 혼용하여 주기적으로 정해진 스케줄마다 Batch 처리를 조합해서 사용한다
 
아키텍처 구조 및 설명
notion image
Job
  • Batch에서 일괄 적용을 위한 일련의 프로세스를 요약하는 단일 실행 단위
  • Job에는 여러가지 Step이 들어갈 수 있다.
Step
  • Job을 구성하는 처리 단위
  • 재사용,병렬화, 조건 분기 등 수행 할 수 있다.
  • Tasklet 모델, Chunk 모델의 구현체가 탑재되어 실행된다.
JobLauncher
  • job을 수행하기 위한 인터페이스
  • 사용자에 의해 직접 제어된다
  • CommandLineJobRunner 를 실행하여 단순하게 배치 프로세스가 수행될 수 있다.
Item
  • reader: 청크 단위 모델에서 사용되며, 소스 데이터를 읽어 들이는 역할을 수행
  • processor: 데이터 정제
  • writer: 실제 쓰기 작업 실행
    • 새로운 데이터를 생성 혹은 기존 데이터를 수정, 혹은 파일로 처리할 수 있음
JobRepository
  • Job과 Step 상태를 관리하는 시스템
  • 메타 테이블을 기반으로 상태 정보를 저장하고 관리한다
 
☸︎ 배치 실행시 기본적으로 생성되는 메타 테이블
notion image
https://docs.spring.io/spring-batch/reference/schema-appendix.html
 
이외 다른 구성 요소
Tasklet: 단순한 배치 처리를 수행하는 작업을 수행하는 컴포넌트역할을 한다.
 

동작 원리

 
전반적인 처리 흐름
notion image
처리 순서
  1. JobScheudler 가 배치를 트리거 하면 JobLauncher가 실행된다.
  1. JobLauncher는 Job을 실행한다. 그리고 JobExecution을 ExecutionContext 정보를 이용한다
  1. Job 내부에 Step들을 실행한다. StepExecution을 ExecutionContext정보를 이용한다.
  1. Step은 Tasklet 또는 청크 모델을 가지고 있으며 각 작업을 수행한다
  1. 청크 모델일 경우, Reader → Processor → Writer 에 의해 일련의 작업이 연달아 실행된다.
 
데이터 영속화 흐름
  • 스프링 배치는 실행 정보를 데이터베이스에 저장하여 시스템 흐름을 관리하는 특성을 가지고 있다. 그렇기 때문에 재실행을 가능하게 한다.
 
JobInstance 등록
  • JobLauncher는 Job의 논리적인 실행단위를 나타내는 JobInstance를 데이터베이스에 저장
JobExecution 등록
  • Job의 물리적인 실행을 나타내는 JobExecution 정보를 데이터베이스에 저장
Step실행 정보 업데이트
  • 각 Step에서 읽기,쓰기,레코드수와 상태를 데이터베이스에 지속적으로 업데이트 한다
JobExecutio 완료 등록
  • 작업 완료 시, JobExecution 상태가 최종적으로 데이터베이스에 기록됨
 
 
주요 컴포넌트별 상세 설명
JobInstance
역할
  • 논리적인 Job 실행을 표현하는 단위이며, 동일한 Job이름과 파미터로 실행하면 같은 JobInstance로 간주된다.
특징
  • 실행이 실패한 JobInstance는 재 실행이 가능하며 중단점부터 재실행이 가능하다.
  • 성공적으로 완료된 JobInstance는 재실행이 불가능하며, JobInstanceAlreadyCompleteException 이 발생한다.
 
JobExecution
역할
  • Job의 물리적인 실행을 나타낸다.
특징
  • 동일한 JobInstance에서 여러번 실행될 경우, 각 실행은 별도의 JobExecution으로 기록된다.
  • ExecutionContext를 통해 실행중, 진행 중 이라는 상태를 가지고 메타데이터를 저장하고 공유한다.
StepExecution / ExecutionContext
역할
  • Step의 물리적인 실행을 나타낸다.
특징
  • 하나의 JobExecution 안에는 여러개의 StepExecution이 존재하며 이는 연결되어 있다.
  • Step의 ExecutionContext를 사용해 각 Step레벨에서 데이터를 저장하고 공유한다.
JobRepository
역할
  • Job및 Step읠 실행 결과와 상태를 관리하는 메인 저장소 역할을 한다.
특징
  • 실행 중 데이터를 데이터베이스와 메모리에 저장하여 작업 상태를 관리한다.
  • SpringBatch에서 제공하는 기본 메타데이터 기반으로 설정해야 한다.
  • 각 단계별 Context를 메타데이터 기반으로 관리 감독하고 있어 재실행 혹은 중단지점부터 실행가능하게 하는 핵심요소이다.
 
스프링 배치는 논리적, 물리적 단위를 체계적으로 분리하여 관리한다.
  • 논리적인 실행단위: JobInstance
  • 물리적인 실행단위: JobExecution, StepExecution
 
 
위 전반적인 흐름과 컴포넌트 상세 설명을 요약하자면, 스프링 배치는 성공적인 완료를 보장하며 재실행 그리고 중단점부터의 재실행 할 수 있도록 제공해주는 주요 기술중 하나이다.
 
 

청크모델과 테스트 모델의 차이는?
  • 처리하는 크기에 차이가 있다.
  • Chunk모델은 논리적인 단위인 청크(commit - interval) 단위로 나누어서 반복적으로 작업 처리하는 방식이고, Tasklet은 데이터를 하나씩 처리하거나 혹은 한번에 수행할때, 이용되며 하나의 레코드씩 읽어 써야하는 경우 적합하다.
  • 대량 데이터를 안정적으로 처리할때는 Chunk 모델을, 작은데이터를 간편하게 처리하기 위해서는 Tasklet 모델을 사용하는 것이 좋다.
 

실전에 적용해보기


Spring Batch with file(.csv) -basic tutorial
Spring Batch with OpenAPI, Feign
SpringBatch JdbcPagingItemReader 를 사용하면서 chunk 크기와 page 크기는 어떻게 설정하면 좋을까?
Spring Batch 내부 구현체의 흐름
SpringBatch 멀티쓰레드 환경에서의 Reader, Writer 선별 주의사항
SpringBatch Multi-threaded Step - 한개의 Step을 Multi Thread 로 처리하기
SpringBatch 작은 단위로 쪼개어 처리하는 Partition

REFER


Spring Batch Architecture
Spring Batch Architecture

Spring Batch Architecture

Spring Batch architecture acting as a base for TERASOLUNA Server Framework for Java (5.x) is explained.

Overview :: Spring Batch
Overview :: Spring Batch

Overview :: Spring Batch

Spring Batch architecture, general batch principles, batch processing strategies.