Spring Batch

윤준혁·2024년 5월 15일
0

Spring Batch란?

  • 대용량 데이터를 처리하기 위한 프레임워크로 스프링 프레임워크 기반에서 동작
  • 일반적으로 대량의 데이터 처리나 주기적·반복적 작업을 실행하는데 사용

    대표적 기능

    • 로깅 및 추적
    • 트랜젝션 관리
    • 작업 처리 통계
    • 작업 재시작
    • 건너뛰기
    • 리소스 관리

Batch와 Scheduler의 차이

  • Batch는 논리적 또는 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 방법을 의미
  • Scheduler는 주어진 작업을 미리 정의된 시간에 실행할 수 있게 해주는 도구나 소프트웨어를 의미

    주의할 점

    • Batch는 대량의 데이터를 일괄적으로 처리할 뿐, 특정 주기마다 자동으로 돌아가는 스케줄링과는 관련이 없음
    • Batch는 Scheduler와 함께 사용할 수 있도록 설계되어 있을 뿐 스케줄러 자체를 대체하지 않음
    • Scheduler는 Batch의 보완제 역할이라고 볼 수 있음

Batch 용어

Job

  • Job

    • 전체 배치 처리 과정을 추상화한 개념으로, 하나 이상의 Step을 포함
    • Spring Batch 계층에서 가장 상위에 위치
    • 고유한 이름을 가져야하며 실행에 필요한 파라미터와 함께 JobInstance를 구별하는데 사용
  • JobInstance

    • 특정 Job의 실제 실행 인스턴스를 의미(실행될 때마다 새로운 JobInstance가 생성)
  • JobParameters

  • JobExecution

    • JobInstance의 한 번의 시행 시도를 표현
    • 실행 상태, 시작 시간, 종료 시간, 생성 시간 등 JobInstance의 실행에 대한 세부 정보를 담고있음
  • JobRepository

    • 배치 작업에 관련된 모든 정보를 저장하고 관리하는 메커니즘
    • Job 실행정보(JobExecution), Step 실행정보(StepExecution), Job 파라미터(JobParameters)등을 저장하고 관리
    • Job이 실행될 때, JobRepository는 새로운 JobExecution과 StepExecution을 생성하고, 이를 통해 실행 상태를 추적
  • JobLauncher

    • Job과 JobParameters를 받아 Job을 실행하는 역할
    • 전반적인 Job의 생명 주기를 관리하며, JobRepository를 통해 실행 상태를 유지
  • JobOperator

    • 외부 인터페이스로, Job의 실행과 중지, 재시작 등의 배치 작업 흐름제어를 담당
    • 이 인터페이스를 통해 JobLauncher와 JobRepository에 대한 직접적인 접근 없이도 배치 작업을 수행하고 상태를 조회할 수 있음
  • JobExplorer

    • Job의 실행 이력을 조회하는 데 사용
    • JobRepository에서 제공하는 정보와 유사하지만, JobRepository는 주로 Job의 실행 도중인 상태에 대해 업데이트하고 관리하는 반면, JobExplorer는 주로 읽기 전용 접근에 초점을 맞추고 있음

Step

  • Step
    • Job의 하위 단계로 실제 배치 처리 작업이 이루어지는 단위
    • 한 개 이상의 Step으로 Job이 구성되며, 각 Step은 순차적으로 처리
    • 각 Step 내부에서는 ItemReader, ItemProcessor, ItemWriter를 사용하는 chunk방식 또는 Tasklet 하나를 가질 수 있음
  • StepExcution
    • Step의 한 번의 실행을 나타내며, Step의 실행 상태, 실행 시간 등의 정보를 포함
    • JobExecution과 유사하게, 각 Step의 실행 시도마다 새로운 StepExecution이 생성(읽은 아이템의 수, 쓴 아이템의 수, 커밋 횟수, 스킵한 아이템의 수 등의 Step 실행에 대한 상세 정보도 포함)

Item

  • ItemReader
    • 배치 작업에서 처리할 아이템을 읽어오는 역할
    • 여러 형식의 데이터 소스(예: 데이터베이스, 파일, 메시지 큐 등)로 부터 데이터를 읽어오는 다양한 ItemReader 구현체가 제공
  • ItemProcessor
    • ItemReader로부터 읽어온 아이템을 처리하는 역할
    • 선택적인 부분으로서, 필요에 따라 사용할 수 있으며, 데이터 필터링, 변환 등의 작업을 수행할 수 있음
  • ItemWriter
    • ItemProcessor에서 처리된 데이터를 최종적으로 기록하는 역할
    • 다양한 형태의 구현체를 통해 데이터베이스에 기록하거나, 파일을 생성하거나 메시지를 발행하는 등 다양한 방식으로 데이터를 쓸 수 있음

etc

  • Tasklet

    • 간단한 단일 작업, 예를 들어 리소스의 정리 또는 시스템 상태의 체크 등을 수행할 때 사용
    • Batch의 Step 내에서 단일 작업을 수행하기 위한 인터페이스로 일반적으로 ItemReader, ItemProcessor, ItemWriter의 묶음을 가지는 Chunk 기반 처리 방식과는 다름
    • Tasklet의 execute 메서드는 Step의 모든 처리가 끝날 때까지 계속 호출
  • ExecutionContext

    • Step 간 또는 Job 실행 도중 데이터를 공유하는 데 사용되는 저장소
    • JobExecutionContext와 StepExecutionContext 두 종류가 있으며, 범위와 저장 시점에 따라 적절하게 사용됨
    • Job이나 Step이 실패했을 경우, ExecutionContext를 통해 마지막 실행 상태를 재구성하여 재시도 또는 복구 작업을 수행할 수 있음

메타 테이블

  • Batch는 작업의 상태를 관리하기 위한 메타 데이터를 저장하는 6개의 테이블들을 자동으로 생성
  • 작업을 수행하면 자동으로 생성된 테이블들의 컬럼 값들이 채워짐

0개의 댓글

관련 채용 정보