Spring Batch

iy·2024년 6월 28일
0

Spring Batch

  • 대용량 데이터를 처리하기 위한 프레임워크

  • 스프링 프레임 기반으로 작동

  • 실시간 처리가 어려운 대용량 데이터 처리 필요할 때 사용

  • 일정 주기로 실행이 필요할 때 사용

    ❗ Spring Batch 와 Quartz는 동일상에서 비교하는 건 올바르지 않음
    Quartz는 스케줄링 프레임워크로 앞서 말한 일정 주기의 사용에서 batch와 혼동이 올 수 있지만 batch의 일정 주기 처리는 기간 동안 쌓인 데이터의 처리가 핵심으로
    대용량 사용이 기반이 될 때를 말함!
    즉, batch 사용의 핵심은 대용량 데이터 처리
    batch와 quartz를 같이 사용해 일정 주기 대용량 데이터 처리하게끔 개발할 수 있음

    💡 Web과 batch의 차이

  • web: 사용자와의 상호 작용이 중요(사용자의 요청을 응답해 주는 과정이 중요)

  • batch: 사용자의 요청이 한 번 주어지면 나머지 과정은 batch 프로그램이 알아서 작동함

    webbatch
    처리과정실시간 처리후속 처리
    속도상대적절대적
    QA용이복잡

    Spring Batch 주요 용어

  1. Job
  • 여러 step으로 구성된 배치 작업 단위
  • JobLauncher에 의해 실행
  1. Step
  • Job을 구성하는 실행 단위
  • ItemReader, ItemProcessor, ItemWriter로 구성
  • state transition을 통해 다음 step으로 이동 가능
  1. JobInstance
  • 특정 Job 실행으로 동일한 Job 여러 번 실행될 때 개별 JobInstance로 관리됨
  1. JobExecution
  • JobInstance의 실행을 나타내고 실행 상태 및 메타데이터를 포함
  • Job이 실행을 시작하면 새로운 JobExecution이 생성됨
  1. StepExecution
  • Step 실행이 시작되면 StepExecution이 생성됨
  1. ItemReader
  • 데이터 읽어오는 인터페이스로 데이터베이스, 파일 등 다양한 소스로 데이터 읽어올 수 있음
  1. ItemProcessor
  • 읽어온 데이터 처리하는 인터페이스로 데이터 변환, 필터링 등 작업을 수행 가능함
  1. ItemWriter
  • 처리된 데이터 저장하는 인터페이스로 데이터베이스, 파일, 메시지 큐 등에 데이터 기록 가능
  1. Chunk
  • 데이터 처리 단위
  • 여러 개 데이터를 읽고 처리한 후 한번에 저장함
  1. JobRepository
  • Job, Step의 실행 상태를 저장하고 관리하는 컴포넌트
  • JobExecution, StepExecution 등의 메타데이터를 저장
  1. JobLauncher
  • Job 실행시키는 컴포넌트
  • run() 메서드를 통해 특정 Job 시작 가능
  1. JobParameters
  • Job 실행 시 필요한 파라미터를 갖고 있는 객체
  1. Tasklet
  • 간단한 단일 작업을 수행하는 컴포넌트

  • 주로 Step 내부에서 사용

  • 반복되지 않는 작업 처리 시 유용


    Spring Batch 동작 과정


    SpringBatch Architecture 출처

    주요 흐름

  1. JobScheduler가 배치 처리 실행을 위해 JobLauncher를 사용해 주기적으로 또는 일정 시간에 Job을 실행 시킴
  2. Job이 실행되면 내부의 각 Step이 순차적으로 실행됨
    a. ItemReader가 데이터를 chunk 단위로 읽어오며 이때 chunk크기는 설정에 따라 달라짐
    b. ItemProcessor는 읽어온 데이터를 가공하거나 변환함(선택적으로 사용)
    c. ItemWriter는 처리된 데이터를 저장하거나 외부 시스템으로 출력함

영구 저장하는 과정

  1. JobLauncher가 JobRepository를 통해 JobInstance를 데이터베이스에 등록
  2. JobLauncher가 Job 실행이 시작할 때 이를 데이터베이스에 등록
  3. JobStep이 입출력 레코드 수, 상태 등을 JobRepository를 통해 업데이트함
  4. JobLauncher가 Job 실행 완료를 데이터베이스에 등록함

💡JobRepository의 역할과 중요성
1. 메타데이터 관리에 용이함
2. 실행 상태 추척 가능: JobRepository를 통해 각 Job과 Step의 실행 상태를 영구 저장 가능 -> 해당 정보 조회와 추적 가능
대규모 데이터 처리에서 장애 발생 시 복구 및 디버깅을 용이하게 함
3. 오류 발생 시 재시도 가능

💡 영구 저장 중요성
1. 데이터 일관성 보장
2. 추척 가능
3. 보안 및 검색에 용이


현재 진행 중인 프로젝트에서 SpringBatch 서비스를 이용해 구현하고 싶은 기능이 생겨서 공부를 시작했다.
오늘은 간단하게 정의, 용어 정리, 동작 과정을 짧게 공부했는데 이후 적용 과정도 정리해야겠다.

👀 참고
1. https://docs.spring.io/spring-batch/reference/domain.html#job
2. https://terasoluna-batch.github.io/guideline/5.0.0.RELEASE/en/Ch02_SpringBatchArchitecture.html
3. https://dkswnkk.tistory.com/707

0개의 댓글