Spring Batch 란?
벡엔드의 배치처리 기능을 구현하는 데 사용하는 프레임워크
- 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://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 |