본문 바로가기
Spring

[Spring] Spring Batch - 스프링 배치

by soro.k 2021. 11. 2.

'스프링 배치 완벽 가이드'의 내용을 바탕으로 작성된 개인 공부를 위한 기록용 포스트입니다.


각 스텝은 잡을 구성하는 독립된 작업의 단위
  • Tasklet 기반 스텝
    • 구조가 더 간단, tasklet을 구현하면 스텝이 중지될 때까지 execute 메서드가 계속 반복해서(execute 메서드를 호출할 때마다 독립적인 트랜잭션이 얻어짐) 수행된다.
    • 태스크릿 기반 스텝은 초기화, 저장 프로시저 실행, 알림 전송 등과 같은 잡에서 일반적으로 사용
  • Chunk 기반 스텝
    • 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용
    • ItemReader, ItemProcessor(생략 가능), ItemWriter라는 3개의 주요 부분으로 구성될 수 있음
  • 스프링의 잡 구조화 방법이 가진 장점 중 하나는 각 스텝이 서로 독립적으로 처리될 수 있도록 분리했다는 점 → 각 스텝은 자신에게 필요한 데이터를 가져와 필요한 업무 로직을 수행하고 적절한 위치에 데이터 기록
    • 유연성(Flexibitily) : 스프링 배치는 개발자가 재사용이 가능하게 구성할 수 있도록 여러 빌더 클래스 제공
    • 유지 보수성(Maintainablility) : 각 스텝의 코드는 이전 스텝이나 다음 스텝과 독립적이므로 다른 스텝에 거의 영향을 미치지 않으면서 쉽게 각 스텝의 단위 테스트, 디버그, 변경을 할 수 있다.
    • 확장성(Scalability) : 잡 내에 존재하는 독립적인 스텝은 확장 가능한 다양한 방법 제공, 스텝을 병렬로 실행 할 수 있어 코드의 변경을 최소화하면서도 업무의 확장성에 대한 요구 사항 충족 가능
    • 신뢰성(Reliability) : 스프링 배치는 오류 처리 방법 제공

 

잡 실행

 

 

 

  • JobRepository : 스프링 배치 아키텍처 내에서 공유되는 주요 컴포넌트.
    • 다양한 배치 수행과 관련된 수치 데이터(시작 시간, 종료 시간, 상태, 읽기/쓰기 횟수 등)뿐만 아니라 잡의 상태를 유지 관리
    • 일반적으로 관계형 데이터베이스를 사용하며 스프링 배치 내의 대부분의 주요 컴포넌트 공유
    • 실행된 스텝, 현재 상태, 읽은 아이템 및 처리된 아이템 수 등이 모두 저장
  • JobLauncher : 실행하는 역할
    • Job.execute 메서드를 호출하는 역할 이외에도, 잡의 재실행 가능 여부 검증, 잡의 실행 방법(현재 스레드에서 수행할지 스레드 풀을 통해 실행할지 등), 파라미터 유효성 검증 등의 처리 수행
    • 스프링 부트 환경이라면 스프링 부트가 즉시 잡을 시작하는 기능을 제공하므로, 일반적으로 직접 다룰 필요가 없는 컴포넌트
  • JobInstance : 스프링 논리적인 실행
    • 잡의 논리적 실행을 위해 제공되는 고유한 식별 파라미터 모임
  • JobExecution : 스프링 배치 잡의 실제 실행, 잡을 구동할 때마다 매번 새로운 JobExecution을 얻게 됨.
  • Step Execution : 스텝의 실제 실행.