본문 바로가기

Spring/SpirngBatch

SpringBatch

Batch Application 이란?

사용자의 개입없이 원하는 동작을 '일괄적으로 처리'한다는 의미이다.

매일 전날의 데이터를 집계해야 하는 상황을 위하여 API를 구성한다면

  1. 방대한 양의 데이터를 읽고 가공한다면 해당 서버는 순식간에 CPU, I/O 등의 자원을 다 소비하여 Request를 받지 못하는 현상이 발생
  2. 5만번째에서 실패했다면 처음부터 다시 시작
  3. 누군가 이미 집계함수를 실행하여 집계함수를 2번 실행

위와 같은 문제 해결을 위해 한번에 대용량의 데이터를 처리하는 어플리케이션을배치 어플리케이션이라고한다.

 

배치 어플리케이션의 조건

  • 대용량 데이터 - 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리 가능해야 함.
  • 자동화 - 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 함.
  • 견고성 - 잘못된 데이터를 충돌/중단 없이 처리해야 함.
  • 신뢰성 - 무엇이 잘못되었는지를 추적 가능해야 함. (로깅, 알림)
  • 성능 - 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되야 함.

 

JobRepository

배치 처리 정보를 담고 있는 매커니즘

어떤 Job이 실행되었으며 몇번 실행되었고 언제 끝나는지 등에 대한 메타 데이터를 저장/ 관리

API문서를 보면, Job, Step에 대한 Execution을 생성하거나/ 이것들의 정보를 확인할 수 있는 등의 Method들이 존재한다는 것을 알 수 있다.

* Job/Step Execution은 Job Instance, Step, 배치 실행 상태, 시작 시간, 끝난 시간, 실패했을 때 메시지 등의 정보를 담고 있다.

 

JobLancher

run( ) method를 이용하여 Job, JobParameters와 함께 배치를 실행하는 인터페이스

 

Job

Spring Batch에서 가장 큰 일

Step 인스턴스를 모아놓는 컨테이너

JobRepository의 여러 builder를 통하여 Job을 생성할 수 있다.

 

Step

Job을 처리하는 실질적인 단위

실질적인 배치 처리를 정의하고 제어하는데 필요한 모든 정보가 들어있는 도메인 객체

한 개의 Job에는 한 개 이상의 Step이 무조건 존재하고 ( Job 1 : Step N )
한 개의 Step에는 Read / Process / Writer 하는 과정이 무조건 존재한다. (Step 1 : RPW 1)


ItemReader

Step의 대상이 되는 배치 데이터를 읽어오는 인터페이스

FILE, XML, DB등 여러타입의 데이터를 읽어올 수 있다.

 

ItemProcessor

ItemReader로 읽어온 배치 데이터를 변환하는 역할

ItemProcessor를 넣는 이유

  1. ItemWriter는 저장만 수행하고, ItemProcessor는 로직 처리만 수행해 역할을 명확하게 분리
  2. 읽어온 배치 데이터와 쓰여질 데이터의 타입이 다를 경우에 대응하기 위해서

 

ItemWriter

ItemWriter는 배치 데이터를 저장 (일반적으로 DB나 파일에 저장)

List타입의 매개변수로 받으며, 리스트의 데이터 수는 설정한 청크의 단위로 불러온다. write() 메서드의 반환값은 따로 없고 매개변수 받은 데이터를 저장하는 로직을 구현하면 된다.


JobBuilderFactory

Job을 생성하는 곳

API 문서를 살펴보면 get() Method를 사용하면 JobBuilder를 생성하고 초기화 할 수 있다고 한다.

그렇다면 JobBuilder란 무엇인가?

 

JobBuilder

어떤 Flow와 Step을 생성할 수 있는 Method가 존재한다.

 

 

 

 

 

[참고 문서]

Spring Batch API
Spring Batch 공식문서
Spring Batch 공식Example

cheese10yun.github.io/spring-batch-basic/

[ Yun Blog ] (https://cheese10yun.github.io/spring-batch-basic/)

wan-blog.tistory.com/51

jojoldu.tistory.com/324?category=902551

'Spring > SpirngBatch' 카테고리의 다른 글

Spring Batch (4) - MetaData  (0) 2021.05.30
Spring Batch (3)  (0) 2021.05.06
Spring Batch (2)  (0) 2021.05.06