CS

[Spring] Batch

KJihun 2023. 12. 7. 16:39
728x90

 



 

Spring Batch

대용량 데이터를 일괄(batch) 처리를 위한 프레임워크.

 

1. 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수 기능 제공

 

2. 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능 제공

 

3. 작업 실패시 작업 재시작을 하게 된다면 실패지점부터 실행한다.

  • 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생한다.
 

 

 

 

 

출처: https://hororolol.tistory.com/513

 

주요 구성 요소

 

 

JobLauncher

Job과 Job Parameters를 사용하여 Job을 실행하는 객체

 

Job

배치 처리 과정의 전체를 하나의 단위로 만들어 놓은 객체. 하나 이상의 Step으로 구성된다.

배치처리 과정에서 전체 계층 최상단에 위치하고 있다.

ItemReader, ItemProcessor, ItemWriter 등의 구성 요소들을 함께 사용하여 특정한 작업을 수행한다.

 

Job Instance

Job의 실행 단위. Job 실행 시 하나의 Job Instance가 생성된다.

작업 성공 유무를 Job Instance에 기록하여 작업 재시작 지점을 구분하는 데 사용된다.

 

Job Parameters

  • Job Instance를 식별하고 구분한다.
  • Job 실행 시 전달되는 매개변수들로 구성되며, 이를 통해 각각의 Job Instance를 식별하고 구분한다.
  • 예를 들어, 같은 Job을 실행하더라도 Job Parameters가 다르다면 새로운 Job Instance가 생성된다.
  • String, Double, Long, Date 4가지 형식만을 지원하고 있습니다.

 

Job Execution

Job Instance에 대한 실행 시도에 대한 객체.

Job이 실패하여 재실행 시 같은 Job Instance를 실행시키지만 Job Execution은 시도 횟수에 따라 생성된다.

Job Instance 실행에 대한 상태,시작 및 종료시간, 생성시간 등의 정보를 담고 있다.

 

 



Step

Job의 배치처리를 순차적으로 정의하고 캡슐화 한 것. Job을 제어하는 모든 정보가 들어있다.

ItemReader, ItemProcessor, ItemWriter 등을 통해 데이터 처리를 담당한다.

 

Step Execution

Job Execution과 동일하게 Step 실행 시도에 대한 객체이다.

하지만 Job이 여러개의 Step으로 구성되어 있을 경우, 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않으으로 실패 이후 Step Execution은 생성되지 않는다.

Step Execution 또한 Job Execution과 동일하게 실제 시작이 될 때만 생성된다.

JobExecution에 저장되는 정보 외에 read 수, write 수, commit 수, skip 수 등의 정보들도 저장된다.

 

Execution Context

Job에서 데이터를 공유 할 수 있는 데이터 저장소.

Step간 Data 공유가 가능하도록 하며 Job 실패시 Execution Context를 통한 마지막 실행 값을 재구성 할 수 있다.

Spring Batch에서 제공하는 Execution Context는 Job Execution Context, Step Execution Context 2가지 종류가 있다.

  • Job Execution Context: Commit 시점에 저장된다
  • Step Execution Context: 실행 사이에 저장된다.

 


 

Job Repository

위에서 말한 모든 배치 처리 정보를 담고있는 매커니즘이다.

Job이 실행되면 Job Repository에 Job Execution과 Step Execution을 생성 및 저장하여 조회시 사용한다.

 

 


 

 

Item

배치 작업에서 처리되는 각각의 데이터 단위.

주로 ItemReader에서 읽어들인 데이터를 ItemProcessor를 통해 가공하고, 그 결과를 ItemWriter로 전달하여 처리된다.
DB의 레코드, MQ의 한 메시지 등이 Item으로 취급되어 처리된다.

ItemReader

Step에서 Item을 읽어오는 인터페이스.

다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있다.

 

ItemProcessor

Reader에서 읽어온 Item을 가공 및 변환하는 역할을 담당한다.

필수 요소는 아니지만 역할을 명확하게 구분하기 위해 사용된다.

 

ItemWriter

가공된 데이터를 저장하거나 외부 시스템에 기록하는 역할을 담당한다.

처리 결과물에 따라 Insert, Update, Queue를 사용한다면 Send가 될 수도 있다.

Read와 동일하게 다양한 인터페이스가 존재한다. Writer는 기본적으로 Item을 Chunk로 묶어 처리한다.

 

 

 


 

 

 

Spring Batch는 Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하고 있지 않다.

실행시키기 위해서는 Quartz, Scheduler, Jenkins등 전용 Scheduler를 사용하여야 한다.