본문 바로가기

Spring

[개념] Spring Batch 란?

Spring Batch 란?

벡엔드의 배치처리 기능을 구현하는 데 사용하는 프레임워크

출처 : https://blog.woniper.net/356

  • Job
    • Batch에서 실행 가능한 실행 단위.
    • 여러 개의 Step을 포함하고 있는 객체.
    • JobBuilderFactory로 원하는 Job을 쉽게 만들 수 있음.
  • JobLauncher
    • Job을 실행하는 책임이 있다.
    • JobRepository를 통해 Job, Step, Item* 등을 생성하고 조립.
  • JobRepository
    • DB 또는 어딘가에 저장된 Job, Step 등을 조회(select) 또는 생성(insert), 수정(update).
    • 어떤 Job이 실행되었으며 몇 번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타데이터 저장
    • 예를 들어 Job 하나가 실행되면 JobRepository에서는 배치 실행에 관련된 정보를 담고 있는 도메인 JobExecution을 생성
    • Step의 실행 정보를 담고 있는 StepExecution도 저장소에 저장하여 전체 메타데이터를 저장/관리하는 역할을 수행
  • JobInstance
    • JobRepository를 통해 조회 또는 생성
    • Job의 논리적인 실행 단위 객체
  • JobExecution
    • JobRepository를 통해 조회 또는 생성
    • Batch가 Job을 한번 실행할 때마다 생성
    • Job 실행 시 필요한 정보를 담고 있고, 현재 실행되고 있는 Batch 상태를 BatchStatus에 담고 있음
  • JobParameter
    • Job을 실행하는데 필요한 parameter 정보를 key, value 형태로 담고 있음
  • Step
    • Job은 1개 이상의 Step을 포함(1:N)할 수 있고, 하나의 큰 실행 단위가 Job이라면 Step은 Job의 통제를 받으며 Job 안에서 실행 가능한 Job보다 작은 실행 단위.
    • 모든 Job에는 1개 이상의 Step이 있어야 함.
  • StepExecution
    • Step을 실행하기 위한 속성을 포함
  • Item
    • 처리할 데이터의 가장 작은 구성 요소
    • ex) 파일의 한 줄, DB의 한 Row
  • ItemReader
    • 하나의 Step은 0~1개의 ItemReader를 포함하며, 데이터를 어디선가 (DB, file, memory 등) 조회하는 역할.
  • ItemProcessor
    • 하나의 Step은 0~1개의 ItemProcessor를 포함하며, ItemReader를 통해 조회한 데이터를 중간에서 가공하는 역할.
  • ItemWriter
    • 하나의 Step은 0~1개의 ItemWriter를 포함하며, ItemProcessor를 통해 가공된 데이터를 Write하는 역할. 이름이 Writer 지만, 쓰기만 가능한 건 아니다.
  • Chunk
    • 하나의 Transaction 안에서 처리할 Item의 덩어리.
  • Tasklet
    • Step에서 실행되는 작업을 의미
    • Chunk Oriented Processing Tasklet을 기본으로 제공
      • Chunk-Oriented Processing : 트랜잭션 범위내에서 Chunk를 만든 후 한번에 쓰는 방식
    • Tasklet을 별도로 구현하여 사용하는 것도 가능

 

Batch vs Quartz?

Quartz는 스케줄러의 역할이지, Batch 와 같이 대용량 데이터 배치 처리에 대한 기능을 지원하지 않습니다.
반대로 Batch 역시 Quartz의 다양한 스케줄 기능을 지원하지 않아서 보통은 Quartz + Batch를 조합해서 사용합니다.
정해진 스케줄마다 Quartz가 Spring Batch를 실행하는 구조라고 보시면 됩니다.

 

 

장점

  • 대용량 데이터 처리에 최적화되어 고성능을 발휘
  • 효과적인 로깅, 통계 처리, 트랜잭션 관리 등 재사용 가능한 필수 기능을 지원
  • 수동으로 처리하지 않도록 자동화되어 있음
  • 예외사항과 비정상 동작에 대한 방어 기능이 있음
  • 반복적인 작업 프로세스를 이해하면 비지니스로직에 집중할 수 있음

 

 

 

 

 

 

 

 

 

 

참고

https://jojoldu.tistory.com/324?category=635883

 

https://blog.woniper.net/356

 

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

 

 

 

'Spring' 카테고리의 다른 글

[Spring Batch] ItemWriter  (0) 2020.01.09
[Spring Batch] ItemReader  (0) 2020.01.09
[Spring Batch] Dynamic Scheduler 다이나믹 스케쥴링  (0) 2020.01.09
[Spring Batch] MongoItemWriter 구현  (0) 2020.01.09