Spring Batch

Spring Batch 입문!!

NEWDODORIPYO 2022. 8. 1. 23:03

Spring Batch

😉Batch가 필요한 상황 !!

  • 일정 주기로 실행해야 할 때
  • 실시간 처리가 어려운 대량의 데이터를 처리해야 할 떄
    • 이런 작업을 하나의 애플리케이션에서 수행하면 성능 저하를 유발할 수 있어서 배치로 구현한다

Batch 구성

  • Batch 작업을 Job 라고하고 Job 을 실행하기 위한 JobLauncher 을 구현해야한다.
  • 하나의 Jop은 여러개의 Step로 구성할 수 있다.
  • Step은 ItemReader , ItemProcessor , ItemWriter 로 구성할 수 있다.
  • JobLauncher 와 JobStep 에 대한 정보를 관리하는 JobRepository 를 구현해야한다.

Job 의 구조

Job

  • Job 이름을 정의
  • Step 을 정의하고 순서를 정의
  • Job의 재사용 가능성을 정의
  • Job은 배치처리 과정을 하나의 단위로 만들어 놓은 객체입니다. 또한 배치처리 과정에 있어 전체 계층 최상단에 위치하고 있습니다.

JobInstance

  • 논리적으로 Job을 실행
  • Jobparameters를 이용하여 구분
    • JobInstance는 Job의 실행 단위라고 했습니다. 그렇다면 JonInstance는 어떻게구별 할까요? 이는 바로 JobParameters 객체로 구분하게 됩니다. JobParameters는 JobInstance 구별 외에도 개발자 JobInstacne에 전달되는 매개변수 역할도 하고 있습니다.
    • 또한 JobParameters는 String, Double, Long, Date 4가지 형식만을 지원하고 있습니다.

JobExecution

  • Job을 실행하는 단일 시도
  • 실패했던 JobInstance에 대해 새로운 실행을 하면 새로운 JobExecution 이 생성
  • JobExecution은 JobInstance에 대한 실행 시도에 대한 객체입니다. 1월 1일에 실행한 JobInstacne가 실패하여 재실행을 하여도 동일한 JobInstance를 실행시키지만 이 2번에 실행에 대한 JobExecution은 개별로 생기게 됩니다. JobExecution는 이러한 JobInstance 실행에 대한 상태,시작시간, 종료시간, 생성시간 등의 정보를 담고 있습니다.

Step

Step

  • 배치 작업의 독립적이고 순차적인 단계를 캡슐화하는 도메인 객체
  • 모든 Job은 하나 또는 그 이상의 Step으로 구성된다
  • Step의 내용은 개발자의 재량이므로 복잡하거나 단순하게 구현 가능하다
  • Step은 Job의 배치처리를 정의하고 순차적인 단계를 캡슐화 합니다. Job은 최소한 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 모든 정보가 들어있습니다.

StepExecution

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

🎈ItemReader

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

🎈ItemWriter

  • ItemWriter는 처리 된 Data를 Writer 할 때 사용한다. Writer는 처리 결과물에 따라 Insert가 될 수도 Update가 될 수도 Queue를 사용한다면 Send가 될 수도 있다. Writer 또한 Read와 동일하게 다양한 인터페이스가 존재한다. Writer는 기본적으로 Item을 Chunk로 묶어 처리하고 있습니다.

🎈ItemProcessor

  • Item Processor는 Reader에서 읽어온 Item을 데이터를 처리하는 역할을 하고 있다. Processor는 배치를 처리하는데 필수 요소는 아니며 Reader, Writer, Processor 처리를 분리하여 각각의 역할을 명확하게 구분하고 있습니다.

ExecutionContext

ExecutionContext

  • ExecutionContext란 Job에서 데이터를 공유 할 수 있는 데이터 저장소입니다. Spring Batch에서 제공하느 ExecutionContext는 JobExecutionContext, StepExecutionContext 2가지 종류가 있으나 이 두가지는 지정되는 범위가 다릅니다. JobExecutionContext의 경우 Commit 시점에 저장되는 반면 StepExecutionContext는 실행 사이에 저장이 되게 됩니다. ExecutionContext를 통해 Step간 Data 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있습니다.

JobLauncher

JobLauncher

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

JobRepository

JobRepository

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

👏참고 

1.[10분 테코톡] 🍦라빈의 Spring Batch

 

2. https://khj93.tistory.com/entry/Spring-Batch%EB%9E%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Spring Batch란? 이해하고 사용하기(예제소스 포함)

들어가기 앞서.. Spring Batch에는 굉장히 많은 설정과 기능들이 존재합니다. 해당 포스팅에서는 기초적인 Spring Batch에 대해서 설명하고 사용하는 예제에 대해서 설명을 하려고 합니다. Spring Batch를

khj93.tistory.com

 

'Spring Batch' 카테고리의 다른 글

Spring Batch 도메인 Job  (0) 2022.08.19
Spring Batch 테이블 의미  (0) 2022.08.18
Spring Batch의 기본 구조와 DB 연결  (0) 2022.08.17
Spring Batch 스키마 생성  (0) 2022.08.17
Spring Batch 기본 구조  (0) 2022.08.13