Spring Batch?
- 대용량 일괄처리의 편의를 위해 설계된 배치 프레임워크
Spring Batch 의 두가지 방식
Spring Batch 아키텍쳐

- Application
스프링 배치 프레임워크를 통해 개발자가 만든 모든 배치 Job과 커스텀 코드를 포함
- Batch Core
배치작업에 대한 관리에 필요한 핵심 API를 가지고 있으며, JobLauncher, Job, Step, Flow 등이 속한다,
- Batch Infrastructure
Application 과 Core 모두 공통 Infrastructure 위에서 빌드한다.
Job 실행의 흐름과 처리를 위한 틀을 제공하며, 개발자와 애플리케이션이 사용하는 일반적인 Reader, Process Writer, Skip, Retry 등이 속한다.
Tasklet

- 하나의 메서드로 구성된 간단한 인터페이스. 실패를 알리기 위해 예외를 반환하거나 throw 할 때까지 execute를 반복적으로 호출하게 된다.
- @BeforeStep, @AfterStep을 통해 execute 배치 실행 전 후에 Event를 등록하여 실행 시킬 수 있다.
Chunk
Chunk는 처리되는 커밋 row수를 의미한다. Batch 처리에서 커밋되는 row 수라는건 chunk 단위로 Transaction을 수행하기 때문에 실패시 Chunk 단위만큼 Rollback된다.
- Chunk 지향 처리에서는 다음과 같은 3가지 시나리오로 실행된다.
- Read : Database, File Queue 에서 다량의 데이터를 조회한다.
- Write : 데이터를 수정된 양식으로 다시 저장한다.
- Process : 특정한 방법으로 데이터를 가공한다.

- Job
- 배치 처리 과정을 하나의 단위로 표현한 객체로 여러 Step을 포함하는 컨테이너
- 반드시 하나이상의 Step으로 구성해야한다.
- JobRepository
- 배치 작업 중의 정보를 저장하는 저장소 역할
- 저장 정보는 배치 수행과 관련된 수치 데이터와 잡의 상태
- JobLauncher
- 배치 Job 실행하는 역할
- Job과 Job Parameter를 인자로 받으며 요청된 배치 작업 수행 후 최종 client에게 JobExecution을 반환한다.
- Job의 재실행 가능 여부나 실행 방법, 파라미터 유효성 검증등도 같이 수행
- Step
- Batch Job을 구성하는 독립적인 하나의 단계로 스프링 배치에서 가장 일반적인 상태단위
- 배치 작업을 어떻게 구성하고 실행할 것인지 Job의 세부 작업을 Task 기반으로 설정하고 명세해 놓은 객체이다.
- Tasklet, Chunk 기반으로 2가지가 존재.
- ItemReader, ItemProcessor, ItemWriter
- 청크모델을 구현하면서 데이터의 입력/처리/출력 3가지 프로세스로 분할하기 위한 인터페이스
- 데이터 IO를 담당하는 ItemReader와 ItemWriter는 데이터베이스와 파일 Java 객체 컨버팅 제공
- ItemProcessor는 입력 확인 및 비즈니스 로직 구현

- Reader에서 데이터를 하나 읽어온다
- Processer에서 가공한다
- Chunk 단위만큼 쌓이게 되면 Writer에 전달하고 Writer는 일괄저장
@EnableBatchProcessing
- 스프링 배치가 작동하기 위해서는 위의 어노테이션이 선언되어야 한다.
- 프로젝트가 구동하면서 총 4개의 설정 클래스를 실행시켜 스프링 배치 초기화에 필요한 실행 및 구성이 동작한다.
- 자동 설정 클래스가 실행되면서 빈으로 등록된 모든 Job을 검색, 초기화와 동시에 Job을 수행하도록 구성.
🙃 대략 순서
- SimpleBatchConfiguration
- JobBuilderFactory와 StepBuilderFactory를 생성
- 스프링 배치의 주요 구성 요소를 프록시 객체로 생성
- BatchConfigurerConfiguration
- BasicBatchConfigurer
- SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정클래스로 빈으로 의존성을 주입받아 주요 객체를 참조하여 사용할 수 있다.
- JpaBatchConfigurer
- JPA 관련 객체를 설정하는 설정클래스
- BatchAutoConfiguration
- 스프링 배치가 초기화 될 때 자동으로 실행되는 설정클래스로 Job을 수행하는 JobLauncherApplicationRunner 빈을 생성한다.
reference
https://medium.com/finnq-tech/spring-batch-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-7319f810f808
https://catsbi.oopy.io/d1890b5f-68d0-4002-9eae-e4b8662014a3