인프런 커뮤니티 질문&답변

유열님의 프로필 이미지

작성한 질문수

스프링 배치

Retry (1)

Retry 동작 관련 문의

24.05.28 10:02 작성

·

206

·

수정됨

0

안녕하세요. Retry 관련해서 궁금증이 있어 문의 드립니다.

FaultTolerant 을 사용하여 Retry 관리를 하려고 하는데 Processor에 인입되는 Item을 아래와 같이 조작하여 Writer에 넘겨줄 경우 Writer에서 문제 발생 시 RetryState의 키가 바뀌어 '무한루프'가 도는 현상이 발생합니다.
Listener 나 별도 Custom RetryPolicy 등을 활용하여 해결해보려 했지만 실패하여 고민끝에 글 남깁니다.

혹시 관련하여 고려해야 할 점이나, 방안에 대하여 알 수 있을까요.

public class PersonItemProcessor implements ItemProcessor<Person, Person> {

    @Override
    public Person process(final Person person) {
        person.setFirstName(person.getFirstName()+"A");
       
        return person;
    }

}

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

2024. 06. 05. 16:12

해당 전체 소스를 공유해 주시면 테스트 해 보도록 하겠습니다.

유열님의 프로필 이미지
유열
질문자

2024. 06. 07. 17:56

안녕하세요. 위 문의 드렸던 case의 재현을 위한 코드 작성 중 하기 코드로 인한 무한루프가 발생됨을 확인하여 공유 드립니다.

  • Processor에 사용된 Entity 객체 내 @EqualsAndHashCode 어노테이션으로 인한 무한루프 발생

     

@EqualsAndHashCode(callSuper = false)

참고 : https://github.com/vflag21c/RetryTest-Batch

강사님 강의 덕분에 스프링배치 내부 동작 방식의 많은 부분을 이해하였고, 트러블슈팅 시 많은 시간을 세이브 할 수 있었습니다. 감사합니다.

정수원님의 프로필 이미지
정수원
지식공유자

2024. 06. 07. 18:27

아 네 jpa 를 사용하고 계셨군요

해결되어서 다행입니다.^^

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 30. 10:06

안녕하세요, 인프런 AI 인턴입니다.

유열님의 재시도(Retry) 관련 질문에 대해, 제공된 정보에는 스프링 배치에 대한 직접적인 내용이 없지만, 스프링 메시징 처리(AMQP, JMS)와 관련하여 Retry 설정 및 예외 처리 방법에 대한 정보가 있습니다. 스프링 배치에서 RetryTemplate이나 RetryPolicy를 사용하여 재시도 로직을 구현하는 것과 비슷한 맥락에서, 메시징 처리에서의 재시도 설정 방법을 참고할 수 있습니다.

특히 메시징에서는 예외가 발생했을 때 재시도 메커니즘이 활성화되어 있으면, MessageRecoverer를 커스터마이징 할 수 있고, RetryTemplate을 프로그래밍 방식으로 커스터마이징하는 방법을 제공합니다. 스프링 배치에서도 유사한 방식으로 재시도 로직을 세밀하게 조정할 수 있을 것입니다.

Processor에서 아이템을 수정하여 Writer에 전달하는 과정에서 키가 변경되어 무한 루프가 발생하면, 다음과 같은 방안을 고려해 볼 수 있습니다:
- RetryPolicy를 커스터마이징하여 재시도 횟수, 재시도 간의 딜레이, 재시도 조건 등을 세밀하게 제어합니다.
- 실패한 작업에 대한 RetryContext 또는 RetryState 관리가 중요합니다. 이를 통해 같은 작업에 대한 재시도가 특정 횟수를 넘지 않도록 제어할 수 있습니다.
- 문제가 되는 작업을 넘어가거나 별도의 로깅, 알림 또는 복구 로직을 구현할 수 있는 SkipPolicyBackOffPolicy를 활용할 수 있습니다.

스프링 배치의 공식 문서 및 관련 가이드를 참조하여 보다 구체적인 구현 방법을 탐색하는 것이 도움이 될 수 있습니다. 또한, 실제 배치 작업의 요구 사항에 맞게 재시도 로직을 세심하게 조정하는 것이 중요합니다.

직접적인 해결책을 제공하지 못해 죄송합니다. 추가적인 정보나 스프링 배치에 관련된 구체적인 가이드가 필요하시다면, 스프링 배치 공식 문서 또는 관련 커뮤니티의 도움을 받아보시는 것을 추천드립니다.

유열님의 프로필 이미지
유열
질문자

2024. 05. 30. 13:52

말씀드린 case의 경우 RetryPolicy의 재시도 횟수를 설정하여도 매번 RetryState의 키가 새롭게 생성되면서 첫번째 Count로 인지되어 반복되게 됩니다.

유열님의 프로필 이미지

작성한 질문수

질문하기