'스프링 배치 완벽 가이드'의 내용을 바탕으로 작성된 개인 공부를 위한 기록용 포스트입니다.
각 스텝은 잡을 구성하는 독립된 작업의 단위
- Tasklet 기반 스텝
- 구조가 더 간단, tasklet을 구현하면 스텝이 중지될 때까지 execute 메서드가 계속 반복해서(execute 메서드를 호출할 때마다 독립적인 트랜잭션이 얻어짐) 수행된다.
- 태스크릿 기반 스텝은 초기화, 저장 프로시저 실행, 알림 전송 등과 같은 잡에서 일반적으로 사용
- Chunk 기반 스텝
- 구조가 약간 더 복잡하며, 아이템 기반의 처리에 사용
- ItemReader, ItemProcessor(생략 가능), ItemWriter라는 3개의 주요 부분으로 구성될 수 있음
- 스프링의 잡 구조화 방법이 가진 장점 중 하나는 각 스텝이 서로 독립적으로 처리될 수 있도록 분리했다는 점 → 각 스텝은 자신에게 필요한 데이터를 가져와 필요한 업무 로직을 수행하고 적절한 위치에 데이터 기록
- 유연성(Flexibitily) : 스프링 배치는 개발자가 재사용이 가능하게 구성할 수 있도록 여러 빌더 클래스 제공
- 유지 보수성(Maintainablility) : 각 스텝의 코드는 이전 스텝이나 다음 스텝과 독립적이므로 다른 스텝에 거의 영향을 미치지 않으면서 쉽게 각 스텝의 단위 테스트, 디버그, 변경을 할 수 있다.
- 확장성(Scalability) : 잡 내에 존재하는 독립적인 스텝은 확장 가능한 다양한 방법 제공, 스텝을 병렬로 실행 할 수 있어 코드의 변경을 최소화하면서도 업무의 확장성에 대한 요구 사항 충족 가능
- 신뢰성(Reliability) : 스프링 배치는 오류 처리 방법 제공
잡 실행
- JobRepository : 스프링 배치 아키텍처 내에서 공유되는 주요 컴포넌트.
- 다양한 배치 수행과 관련된 수치 데이터(시작 시간, 종료 시간, 상태, 읽기/쓰기 횟수 등)뿐만 아니라 잡의 상태를 유지 관리
- 일반적으로 관계형 데이터베이스를 사용하며 스프링 배치 내의 대부분의 주요 컴포넌트 공유
- 실행된 스텝, 현재 상태, 읽은 아이템 및 처리된 아이템 수 등이 모두 저장
- JobLauncher : 잡을 실행하는 역할
- Job.execute 메서드를 호출하는 역할 이외에도, 잡의 재실행 가능 여부 검증, 잡의 실행 방법(현재 스레드에서 수행할지 스레드 풀을 통해 실행할지 등), 파라미터 유효성 검증 등의 처리 수행
- 스프링 부트 환경이라면 스프링 부트가 즉시 잡을 시작하는 기능을 제공하므로, 일반적으로 직접 다룰 필요가 없는 컴포넌트
- JobInstance : 스프링 잡의 논리적인 실행
- 잡의 논리적 실행을 위해 제공되는 고유한 식별 파라미터 모임
- JobExecution : 스프링 배치 잡의 실제 실행, 잡을 구동할 때마다 매번 새로운 JobExecution을 얻게 됨.
- Step Execution : 스텝의 실제 실행.
'Spring' 카테고리의 다른 글
[Spring] 제어의 역전(IoC)과 의존관계 주입(DI) (0) | 2022.09.14 |
---|---|
[Spring] 객체지향의 5가지 원칙(SOLID), 관심사의 분리 (0) | 2022.09.14 |
[Spring] 스프링이란 (0) | 2022.09.14 |
[Spring] Spring Batch - 잡과 스텝 이해하기 (0) | 2021.11.10 |
[Spring] Spring Batch - 스프링 배치에 관하여 (0) | 2021.11.01 |