[Spring Batch] 스프링 배치 동작 구조

2024. 9. 16. 22:51프로그래밍(Backend)/Spring Batch

https://www.youtube.com/@xxxjjhhh
개발자 유미님의 유튜브를 참고하여 스프링 배치 공부를 시작..

스프링 배치(Spring Batch)는 대규모 데이터를 효율적으로 처리하기 위한 프레임워크로, 주기적으로 실행되는 배치 작업을 통해 데이터를 읽고, 처리하고, 쓰는 작업을 반복적으로 수행합니다. 스프링 배치의 동작 구조는 크게 다음과 같은 요소들로 구성됩니다.

1. 핵심 요소와 흐름

  • 읽기 (ItemReader): 데이터를 소스에서 읽어오는 역할을 담당합니다. 주로 데이터베이스, 파일, API 등 다양한 소스에서 데이터를 읽습니다.
  • 처리 (ItemProcessor): 읽어온 데이터를 가공하거나 변환하는 작업을 수행합니다. 여기서 데이터를 필터링하거나, 형식을 변환하는 등의 처리가 가능합니다.
  • 쓰기 (ItemWriter): 처리된 데이터를 데이터베이스나 파일, 외부 시스템 등에 저장합니다.

이 세 가지 작업을 반복적으로 수행하여 배치 작업을 완료합니다. 이때 대량의 데이터를 한 번에 처리하지 않고, 일정 단위로 나누어 메모리 부담을 줄이고 실패 시 복구 가능성을 높이는 방식으로 설계되어 있습니다.

2. 메타 데이터 (Meta Data)

  • 스프링 배치에서 중요한 개념은 배치 작업의 기록입니다. 배치 작업은 주기적으로 실행되기 때문에 중복 처리를 방지하고, 어디까지 작업했는지를 기록하는 것이 필수적입니다.
  • 이를 위해 메타 데이터가 사용됩니다. 배치 작업의 진행 상태, 성공 여부, 실패 내역 등을 기록하여 추후 작업이 다시 실행될 때 중복 처리를 피하고, 작업의 연속성을 유지할 수 있습니다.
  • 예를 들어, 은행 이자 계산 시스템에서는 매일 자정에 이자 계산 작업이 실행됩니다. 이때 이전에 계산한 계좌에 다시 이자를 지급하지 않도록, 처리된 계좌 정보가 메타 데이터로 기록됩니다.

3. 스프링 배치 구성 요소

  • JobLauncher: 배치 작업을 실행시키는 시작점입니다. Job을 실행하는 역할을 합니다.
  • Job: 배치 작업의 전체 흐름을 정의하는 객체입니다. 하나의 배치 작업은 여러 개의 Step으로 구성될 수 있습니다.
  • Step: 하나의 "읽기 → 처리 → 쓰기" 과정을 나타내는 개별 단위입니다. 하나의 Job은 여러 Step을 포함할 수 있어, 복잡한 배치 작업을 여러 단계로 나누어 처리할 수 있습니다.
  • ItemReader: 데이터를 읽어오는 역할을 담당합니다.
  • ItemProcessor: 데이터를 가공하거나 변환하는 역할을 합니다.
  • ItemWriter: 가공된 데이터를 저장하는 역할을 합니다.
  • JobRepository: 배치 작업의 상태와 메타 데이터를 관리하는 곳입니다. 배치 작업의 진행 상태나 완료 여부 등을 기록하여, 재시작하거나 중복 작업을 방지할 수 있게 도와줍니다.

4. 스프링 배치 동작 예시

  1. JobLauncher가 Job을 시작합니다.
  2. Job은 여러 개의 Step으로 구성될 수 있으며, 각 Step은 "읽기 → 처리 → 쓰기" 단계를 수행합니다.
  3. 각 Step에서 ItemReader가 데이터를 읽고, ItemProcessor가 이를 가공한 후, ItemWriter가 최종 데이터를 저장합니다.
  4. 이 과정에서 JobRepository는 작업의 상태와 메타 데이터를 기록하여, 배치 작업이 중복되거나 중단된 작업을 다시 수행하는 문제를 방지합니다