Repeat
Spring Batch는 얼마나 작업을 반복해야 하는지 알려 줄 수 있는 기능을 제공한다. 특정 조건이 충족될 때까지 Job 또는 Step을 반복하도록 설정할 수 있으며, 스프링 배치에서는 Step의 반복과 Chunk 반복을 RepeatOperation을 사용해서 처리하고 있다. 기본 구현체로는 RepeatTemplate를 제공한다.
반복을 종료할 것인지 여부를 결정하는 세 가지 항목
RepeatStatus | 스프링 배치의 처리가 끝났는지 판별하기 위한 열거형(enum) CONTINUABLE: 작업이 남아 있음 FINISHED: 더 이상의 반복 없음 |
CompletionPolicy | RepeatTemplate의 iterate 메소드 안에서 반복을 중단할지 결정한다. 실행 횟수 또는 완료 시기, 오류 발생 시 수행 할 작업에 대한 반복 여부 결정한다. 정상 종료를 알리는데 사용된다. |
ExceptionHandler | RepeatCallback 안에서 예외가 발생하면 RepeatTemplate가 ExceptionHandler를 참조해서 예외를 다시 던질지 여부 결정한다. 예외를 받아서 다시 던지게 되면 반복 종료한다. 비정상 종료를 알리는데 사용된다. |
FaultTolerant
스프링 배치는 Job 실행 중에 오류가 발생할 경우 장애를 처리하기 위한 기능을 제공한다. 오류가 발생해도 Step이 즉시 종료되지 않고 Retry 혹은 Skip 기능을 활성화 함으로써 서비스가 가능하다.
Skip | ItemReader / ItemProcessor / ItemWriter 에 적용 할 수 있다. |
Retry | ItemProcessor / ItemWriter 에 적용할 수 있다. |
FaultTolerant 구조는 청크 기반의 프로세스 기반 위에 Skip과 Retry 기능이 추가되어 재정의 되어 있다.
Skip
Skip은 데이터를 처리하는 동안 설정된 Exception이 발생했을 경우 해당 데이터 처리를 건너뛰는 기능이다. 데이터의 사소한 오류에 대해 Step의 실패 처리 대신 Skip을 함으로써 배치 수행의 빈번한 실패를 줄일 수 있게 한다.
오류 발생 시 스킵 설정에 의해서 Item2 번은 건너뛰고 Item3번부터 다시 처리한다. ItemReader는 예외가 발생하면 해당 아이템만 스킵하고 계속 진행한다. ItemProcessor와 ItemWriter는 예외가 발생하면 Chunk의 처음으로 돌아가서 스킵된 아이템을 제외한 나머지 아이템들을 가지고 처리하게 된다.
Skip 기능은 내부적으로 SkipPolicy를 통해서 구현되어 있다.
Skip 가능 여부를 판별하는 기준은 다음과 같다.
1. 스킵 대상에 포함된 예외인지 여부
2. 스킵 카운터를 초과했는지 여부
스프링 배치가 기본적으로 제공하는 SkipPolicy 구현체들이 있으며 필요시 직접 생성해서 사용할 수 있다. 그리고 내부적으로 Classfier 클래스들을 활용하고 있다.
Retry
Retry는 ItemProcess, ItemWriter에서 설정된 Exception이 발생했을 경우 지정한 정책에 따라 데이터 처리를 재시도하는 기능이다. Skip과 마찬가지로 Retry를 함으로써 배치 수행의 빈번한 실패를 줄일 수 있게 한다.
Retry 기능은 내부적으로 RetryPolicy를 통해서 구현되어 있다.
Retry 가능 여부를 판별하는 기준은 다음과 같다.
1. 재시도 대상에 포함된 예외인지 여부
2. 재시도 카운터를 초과했는지 여부
기본적으로 제공하는 RetryPolicy 구현체들이 있으며 필요시 직접 생성해서 사용할 수 있다.
출처
inflearn.com/course/스프링-배치/dashboard
스프링 배치 강의 | 정수원 - 인프런
정수원 | 초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를
www.inflearn.com
'Dev > Spring Framework' 카테고리의 다른 글
『Spring Boot』 선언적 트랜잭션(Declarative Transaction) (0) | 2025.01.12 |
---|---|
『Spring Boot』 application.yml과 Profile (0) | 2024.12.28 |
『Spring Batch』 스프링 배치 메타 데이터 스키마 (2) | 2024.12.09 |
『Spring Batch』 스프링 배치 도메인 이해 (0) | 2024.12.07 |
프레임워크와 라이브러리의 차이 (0) | 2024.12.06 |