Spring Batch

짱구·2023년 4월 25일
2

JAVA

목록 보기
1/1
post-thumbnail

배치란

데이터를 모아서 처리하는 방식입니다.
스케쥴이나 이벤트에 맞춰 실행됩니다. (트리거)

배치 서비스 기본 3단계

배치 서비스는 크게 3단계로 나뉘어져 있습니다.

  1. [Read] : 데이터를 파일, 데이터베이스, 메세지로부터 읽어옵니다.
  2. [Processing] : 읽은 데이터를 비즈니스 로직에 의해 처리합니다.
  3. [Write] : 처리된 데이터를 수정된 형태로 출력하고 삽입합니다.

배치의 특징

  • UI가 없습니다. (별도 UI툴 사용 가능)
  • 대량의 데이터를 모아서 처리합니다.
  • 정해진 스케쥴에 맞춰 동작합니다.
  • 한번 시작하면 어떻게든 종료됩니다.

Spring Batch

Spring Batch 대표 구성 요소

  • Job, Step, Tasklet
  • ItemReader
  • ItemProcessor
  • ItemWriter

Spring Batch 지원 기능

  • 트랜잭션 관리
  • 청크 단위의 처리
  • 선언적 입출력 지원
  • 병렬처리
  • 시작, 중지, 재시작 지원
  • 재시도 또는 건너뛰기 지원
  • 웹기반 관리 인터페이스 제공 (Spring Cloud Data Flow)

Spring Batch 아키텍처

  • 3개의 티어로 구성된 아키텍처
  • 어플리케이션, 코어, 인프라스트럭처
    • 어플리케이션
      • 코어와 상호 작용
    • 코어
      • 잡, 스텝, 잡 런처, 잡 파라미터 등의 배치 도메인 요소들
    • 인프라스트럭처
      • 배치 처리를 위해 필요한 공통 인프라 제공

Spring Batch 필요 요소

Job

  • 외부 의존성 없이 독립성을 갖습니다.
  • 스프링 배치에서 실행되는 처리 단위입니다.
    • 상호 작용없이 처음부터 끝까지 실행됩니다.
  • 스텝을 담는 컨테이너 개념입니다.
  • 하나 또는 여러 개의 스텝으로 구성됩니다.

JobInstance

  • Job의 논리적 실행 단위입니다.
  • Job이 성공적으로 완료되면 다시 실행시킬 수 없습니다.
  • Job 이름과 Job 파라미터로 구분됩니다.
  • 동일한 Job 이름에 동일한 파라미터를 사용하여 단 한번만 실행합니다.

JobExecution

  • Job을 실행한 것을 의미합니다.
  • 실패든 성공이든 시도한 것을 나타냅니다.

JobParameter

  • 잡에 전달되는 파라미터입니다.

JobListener

  • Job 실행과 관련한 이벤트를 받을 수 있는 기능을 제공합니다.

JobListener 예시 코드

@BeforeJob
    public void beforeJob(JobExecution jobExecution) {
        if (jobExecution.getStatus() == BatchStatus.STARTED) {
            log.info("============================================");
        }
    }

    @AfterJob
    public void afterJob(JobExecution jobExecution) {
        if(jobExecution.getStatus() == BatchStatus.COMPLETED) {
            log.info("============================================");
        }
    }

Step

Job을 구성하고 있는 배치 작업의 독립적이고 순차적인 단위입니다.

  • Tasklet 기반 Step
    • 간단한 실행 처리
  • Chunk 기반 Step
    • 아이템 기반의 처리
    • ItemReader
    • ItemProcessor
    • ItemWriter

Tasklet

  • 단한 실행 처리
  • execute 메서드
  • 하나의 트랜잭션 단위로 동작

ItemReader

  • 스텝에서 한 번에 한 항목씩 입력을 나타내는 추상화 인터페이스

    • 아이템 읽기와 관련한 전략 인터페이스
    • 다양한 입력소스로부터 Read
    • Step에서 처리할 아이템 한 개를 반환

ItemReader 흐름

ItemProcessor

스텝에서 아이템에 대한 비지니스 처리를 나타내는 추상화 인터페이스

  • 입력 소스에서 읽은 아이템 기반으로 특정 작업을 수행
  • 처리를 완료 후 결과 아이템을 반환
  • 입력 아이템의 타입과 결과 아이템의 타입이 다를 수 있다
  • 여러번 전달되더라도 동일 결과를 갖는 멱등성을 갖어야 한다

ItemWriter

스텝에서 한 번에 하나의 배치 또는 묶음의 출력을 나타내는 추상화 인터페이스

  • 스프링 배치에서 출력을 담당하는 전략 인터페이스
  • 아이템을 하나하나 쓰지 않고 묶어서 쓴다.
  • Chunk 단위

ItemWriter 흐름

스프링 배치의 잡 처리 흐름

스프링 배치의 스텝 처리 흐름

Processer가 없는 경우 : Step → ItemReader → ItemWriter

Processer가 존재하는 경우 : Step → ItemReader → ItemProcessor → ItemWriter

순서

스텝은 각각 순서를 지정 가능

분기

Step은 스텝의 종료(ExitStatus)를 패턴 매칭하여 다른 스텝으로 분기 가능

출처 : FastCampus
Git 주소

profile
코드를 거의 아트의 경지로 끌어올려서 내가 코드고 코드가 나인 물아일체의 경지

0개의 댓글