Spring Batch

최은지·2023년 12월 27일
0

Spring Batch?

  • 대용량 일괄처리의 편의를 위해 설계된 배치 프레임워크

Spring Batch 의 두가지 방식

  • Tasklet
  • Chunk

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을 수행하도록 구성.

🙃 대략 순서

  1. SimpleBatchConfiguration
    • JobBuilderFactory와 StepBuilderFactory를 생성
    • 스프링 배치의 주요 구성 요소를 프록시 객체로 생성
  2. BatchConfigurerConfiguration
    • BasicBatchConfigurer
      - SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정클래스로 빈으로 의존성을 주입받아 주요 객체를 참조하여 사용할 수 있다.
    • JpaBatchConfigurer
      - JPA 관련 객체를 설정하는 설정클래스
  3. 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

profile
배고파

0개의 댓글