본문 바로가기

Spring Batch

Spring Batch 개요

반응형

Spring Batch 용어

1. Job

  • Job은 배치처리 과정을 하나의 단위로 만들어 놓은 객체이다.
  • 배치처리 과정에서 전체 계층 최상단에 위치한다.

2. JobInstance

  • JobInstance는 Job의 실행의 단위를 나타낸다. 
  • Job을 실행시키게 되면 하나의 JobInstance가 생성된다. 
  • 어떤 하나의 JobInstance가 실패하여 다시 실행을 시키게 되면 이 JobInstance는 실행 시점의 데이터만 처리한다.

3. JobParameters

  • JobInstance를 구분하는 구분자이다.
  • JobInstance에 전달되는 매개변수 역할이다.
  • JobParameters는 String, Double, Long, Date 4가지 형식만을 지원한다.

4. JobExecution

  • JobExecution은 JobInstance에 대한 실행 시도에 대한 객체이다. 
  • JobInstance가 실패하여 재실행 시켰을 때, 재실행에 대한 JobExecution은 개별로 생긴다.
  • JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보를 담는다.

5. Step

  • Step은 Job의 배치처리를 정의하고 순차적인 단계를 캡슐화 한다.
  • Job은 최소한 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 정보가 들어있다.

6. StepExecution

  • Step실행 시도에 대한 객체를 나타낸다.
  • Job이 여러개의 Step으로 구성되어 있을 경우 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않음으로 실패 이후 StepExecution은 생성되지 않는다. 
  • StepExecution또한 JobExecution과 동일하게 실제 시작이 될 때만 생성된다.
  • JobExecution에 저장되는 정보 외에 read수, write수, commit수, skip 수 등의 정보들이 저장된다.

7. JobRepository

  • 모든 배치 처리 정보를 담고 있는 매커니즘이다.
  • Job이 실행되게 되면 JobRepository에 JobExecution과 StepExecution을 생성하게 된다.
  • JobRepository에서 Execution 정보들을 저장하고 조회하며 사용한다.

8. JobLauncher

  • JobLauncher는 Job과 JobParameters를 사용하여 Job을 실행하는 객체이다.

9. ItemReader

  • Step에서 Item을 읽어오는 인터페이스이다.
  • ItemReader에 대한 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어올 수 있다.

10. ItemWriter

  • ItemWriter는 처리된 Data를 Writer할 때 사용한다.
  • Writer는 기본적으로 Item을 Chunk로 묶어 처리한다.

11. ItemProcessor

  • Reader에서 읽어온 Item을 데이터 처리하는 역할을 한다.
  • Processor는 배치를 처리하는데 필수 요소는 아니다.

 

 


Spring Batch에서의 Job은 여러가지 Step의 모음으로 구성되어있으며, Job은 순차적인 Step을 수행하며 Batch를 수행한다. Step은 Tasklet 처리 방식과 Chunk 지향 처리 방식을 지원하고 있다.

Step을 구성하는 Tasklet과 Chunk지향 처리

Tasklet

  • Tasklet은 하나의 메서드로 구성되어 있는 간단한 인터페이스이다.
  • 이 메서드는 실패를 알리기 위해 예외를 반환하거나 throw할 때까지 execute를 반복적으로 호출한다.

Chunk

  • Spring Batch에서 Chunk란 처리 되는 커밋 row수를 의미한다.
  • Batch 처리에서 커밋 되는 row수라는건 chunk 단위로 transaction 수행한다는 것을 의미한다.
  • 실패시 chunk 단위만큼 rollback된다.
  • chunk 지향 처리에서는 Read, Processing(필수x), Wrtie 의 시나리오로 실행된다.

@JobScope, @StepScope

  • @JobScope은 Step 선언문에 사용 가능하며, @StepScope은 Step을 구성하는 ItemReader, ItemProcessor, ItemWriter에 사용 가능하다.
  • @JobScope과 @StepScope은 Bean 생성 시점을 스프링 애플리케이션이 실행되는 시점이 아닌, Annotation이 명시된 메서드가 실행될 때까지 지연시키는 것을 말한다. 
  • @JobScope과 @StepScope Bean이 생성될 때 JobParameter가 생성되기 때문에, JobParameter를 사용하기 위해서는 반드시 Scope을 지정해 주어야 한다.
  • LateBinding을 하여 JobParameter를 비즈니스 로직 단계에서 할당하여 보다 유연한 설계를 가능하게 하고 서로 다른 Step이 서로 침범하지 않고 병렬로 실행되게 하기 위함이다.

LateBinding의 장점

  • JobParameter를 특정 메서드가 실행하는 시점까지 지연시켜 할당시킬 수 있다.
  • 병렬처리에 안전하다. Step 의 구성요소인 ItemReader, ItemProcessor, ItemWriter가 있고, ItemReader에서 데이터를 읽어 오는 메서드를 서로 다른 Step으로부터 동시에 병렬 실행이 된다면 서로 상태를 간섭받게 될 수 있다.하지만 @StepScope을 적용하면 각각의 Step에서 실행될 때 서로의 상태를 침범하지 않고 처리를 완료할 수 있다.
반응형