본문 바로가기
Spring/Batch

Spring Batch(스프링배치) Chunk방식의 Repeat과 Skip(1) - 실패한 작업 제어

by 딘딘은딘딘 2024. 9. 24.
반응형

스프링 배치의 Step을 실행하는 도중

특정 요인 ( Ex) 일시적 네트워크 지연, 처리 도중 상태 변경 등 ) 에 따라 작업이 실패하는 경우가 발생한다.

스프링 배치는 이를 해결하기 위해 Spring의 Retry와 Skip을 제공하고 있다.

 

먼저 Retry와 Skip을 사용하기 전에

연관 관계가 있는  FaultTolerant와 Repeat을 알고 시작해야 한다. 

 

Repeat

 

Repeat는 작업이 성공하거나 특정 조건이 만족될 때까지 작업을 반복하는 기능으로, RetrySkip과 함께 사용된다.

이를 통해 작업이 실패했을 때 다시 시도하거나 건너뛰면서도, 설정된 완료 정책에 따라 반복을 제어한다.

RepeatOperations는 이러한 반복 로직을 제어하는 인터페이스로, RepeatTemplate가 기본 구현체로 제공 되며,

RepeatTemplate이 사용되는 케이스는 Step이 생성되고 시작하는 흐름에서 볼 수 있다.

 

청크기반 처리(Chunk-oriented processing) 의 Step이 실행되는 흐름

Step을 실행하기 위해서는 StepBuilder를 빌더 패턴으로 생성하게 되는데 StepBuilder의 부모 클래스는 SimpleStepBuilder 이다.

 

SimpleStepBuilder의 build() 메서드를 보면 내부에서 부모 클래스의 build를 호출한다.

SimpleStepBuilder 의 super.build()

 

추상클래스인 AbstractTaskletStepBuilder의 build를 보면 기본 값으로 RepeatTempleate가 설정되는 것을 볼 수 있다.

 

 

이 후 TaskletStep이 생성되고 TaskletStepdoExecute 메서드를 실행하는데

doExecute 내부에서 RepeatTemplate를 구현한 stepOperations.iterate 메서드를 실행하게 된다.

 

stepOperations.iterate()반복 처리를 제어하는 핵심 메서드로, 배치 작업에서 반복 및 오류 처리 로직을

내부적으로 세밀하게 제어한다. 

주요 역할:

  1. 반복 수행: 배치 작업에서 지정된 조건이 충족될 때까지, 혹은 RepeatStatus에 따라 반복적으로 Tasklet을 실행.
  2. 상태 확인: 각 작업이 완료될 때마다 RepeatStatus를 통해 반복을 중지할지 계속할지 판단한다. 예를 들어, RepeatStatus.CONTINUABLE이면 계속 반복하고, RepeatStatus.FINISHED면 반복을 종료.
  3. 예외 처리: 작업 중 발생하는 예외에 대한 복구 또는 재시도 정책을 처리.

 

즉, 아래와 같은 흐름을 실행하게 된다.

 

 

FaultTolerant

 

FaultTolerant는 배치 작업 중 일부 오류가 발생해도 배치 전체가 중단되지 않고 계속 진행할 수 있도록 도와주는

내결함성을 제공하는 기능이다

 

내결함성이란?

특정 아이템 처리 중에 발생한 예외로 인해 전체 배치가 중단되지 않고, 오류를 건너뛰거나 재시도하여 작업이 끝까지 수행되도록 한다.

즉, 배치 작업이 부분적인 실패에 견디고 끝까지 수행한다는 의미

 

FaultTolerant와 Retry / Skip은 주로 함께 사용되지만, 독립적으로도 사용 가능하다.

FaultTolerant를 사용한 재시도 및 스킵과 사용하지 않은 경우의 차이는 다음과 같다

 

  • FaultTolerant 없이: Retry와 Skip은 설정된 예외와 횟수에 따라 단순히 예외가 발생하면 정해진 방식으로 재시도하거나 건너뛰는 로직만 수행한다.
  • FaultTolerant 사용 시: 복잡한 복구 메커니즘이 추가되어 배치가 더 안정적으로 동작하고, 시스템이 특정 오류 상황에서도 중단되지 않도록 Retry와 Skip 정책이 결합된 복잡한 전략을 설정할 수 있다.

아래와 같이 핸들링이 가능하다.

https://dgjinsu.tistory.com/57

 

 

Repeat과 FaultTolerant 그리고 청크방식의 Step 흐름에 대한 설명이 길어져

Skip과 Retry의 방식은 다음 글에서 이어서 작성하도록 하겠습니다.

 

 

 

참고 : https://dgjinsu.tistory.com/57

반응형