- Spring Batch에 대해 알아보기 전에 먼저 Batch란 무엇인지부터 알아보도록 하자
Batch Program
- 미리 정해진 작업들을 순서에 따라 일괄적으로 처리하는 것
- 필수 요소
- 대용량 데이터
- 자동화
- 견고성 : 중단되는 일 없이 수행되어야 한다
- 안정성/신뢰성 : 오류의 발생 위치, 시간 등을 추척할 수 있어야 한다
- 성능 : 다른 응용 프로그램의 수행을 방해하지 않아야 하고 지정된 시간 내에 처리 완료되어야함
Batch Scheduler / Job Scheduler
- Scheduler : Job을 특정 시간마다 실행하도록 도와주는 프로그램
- 종류
- Spring Scheduler
- Quartz Scheduler
- Cron
Spring Batch
- Spring에서 대용량 데이터를 일괄적으로 처리하는 기능
- Job과 Step을 기준으로 배치 단위를 실행
- 보통 별도의 배치 서버를 두고 배치 작업만 수행하도록 작성
- ex) 로깅, 추적, 트랜잭션 관리, 통계 작업, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 데이터 처리에 필수적인 기능 제공
Spring Batch와 Scheduler의 차이는?
Job을 유발하는 트리거가 Scheduler이고 Job을 실행시키는 주체가 Spring Batch이다
즉, Scheduler를 통해 Spring Batch를 주기적으로 동작시킨다
Spring Batch 용어
Job / Flow
- 배치 작업을 나타내는 객체
- 최소 하나의 Step을 가져야 한다
JobInstance
- Job의 실행 단위 (1개의 Job 실행 = 1개의 JobInstance 생성)
- 예를들어 세개의 Job을 실행하면 3개의 JobInstance가 생성되고 만약 두 번째 작업이 실패해 다시 실행 되면 2번 작업에 대한 Job만 처리한다
JobParameters
- JobInstance를 구별하는 객체, JobInstance에 전달되는 매개변수 역할
- String, Double, Long, Date 4가지 형식 지원
JobExecution
- JobInstance에 대한 실행 시도에 대한 객체
- JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보를 가진다
- 작업 중 실패해 재실행 하면 동인한 JobInstace를 실행시키지만 JobExecution은 개별로 생긴다
Step
- Job의 실행 단위
- 하나의 트랜잭션과 유사하다
- 처리 방식
- Tasklet : 하나의 메서드로 구성 되어있는 간단한 인터페이스
- Chunk : commit row 수. Chunk 단위로 Transaction을 수행하기 때문에 실패시 Chunk 단위 만큼 rollback
StepExecution
- JobExecution과 동일하게 Step 실행 시도에 대한 객체
- Job이 여러개의 Step으로 구성되어 있고 중간에 실패된다면 실패 이후의 StepExecution은 생성되지 않는다
- Step이 시작이 될 때만 생성되고 JobExecution에 저장되는 정보 외에 read, write, commit, skip 수 등의 정보들이 저장된다
ExecutionContext
- Job에서 데이터를 공유 할 수 있는 데이터 저장소
- Step간 데이터 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있다
- 종류
- JobExecutionContext : commit 시점에 저장
- StepExecutionContext : 실행 사이에 저장
JobRepository
- 모든 배치 정보를 담고 있는 매커니즘
- Job이 실행 되면 JobExecution과 StepExecution을 생성 후 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 된다
JobLauncher
- Job과 JobParameters를 사용해 Job을 실행하는 객체
ItemReader
- Step에서 Item을 읽어오는 인터페이스
- 읽어오는 데이터를 반환하며 null을 반환할 경우 총 데이터의 마지막임을 나타낸다
- 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있다
ItemWriter
- 처리 된 Data를 Write 할 때 사용되는 인터페이스
- ItemReader/ItemProcessor로부터 전달 받은 데이터가 (step안에 chunk에 정의한)commit-interval 프로퍼티에 정의된 개수만큼 모이면 write메소드를 실행한다
- 처리 결과물에 따라 Insert,Update,Send(Queue 사용 시)가 될 수 있다
- 기본적으로 Item을 Chunk로 묶어 처리한다
ItemProcessor
- ItemReader에서 읽어 온 item을 처리 후 ItemWriter에게 넘겨준다
- 한 번에 하나의 아이템을 처리한다
- 배치를 처리하는데 필수요소는 아니다. 데이터를 가공할 필요가 없으면 ItemReader에서 ItemWriter로 넘겨준다
'java' 카테고리의 다른 글
JDK JRE JVM (0) | 2022.02.18 |
---|---|
HashTable | HashMap | ConcurrentHashMap 개념 정리 (0) | 2021.12.07 |