• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

배치 작업 도중 실패할때

22.01.05 14:18 작성 조회수 229

0

안녕하세요 강의 잘 보고있습니다.

 

데이터가 100개 있고, 청크 사이즈가 10이라고 할 때

 

0~9, 10 ~ 19 까지 성공하고 애플리케이션 문제 등으로 프로그램이 종료  혹은 실패가 되었을 때,

다시 0번부터 실행 안 하고, 20번 부터 실행을 하려면 어떻게 해야될까요? 몇번부터 몇번까지 실행했는지 기록하는 메타데이터용 테이블을 만들어서 기록해야되는 거 말고는 없나요??

(예를 들어 실패했을때 다시 실행하면, 실패한 곳부터 알아서 스프링 배치가 실행해주는..)

답변 2

·

답변을 작성해보세요.

1

스프링 배치에서 ExecutionContext 객체를 통해서 데이터를 읽을 때 기본적으로 readcount 를 기록해 줍니다.

즉 청크 단위로 데이터를 읽어서 커밋이 성공한 것 까지의 개수를 인서트 해 주고 있는데 이 정보를 활용해서 여러가지 기능을 활용하는 것은 개발자의 몫입니다.

일단 최종적으로 커밋한 것 까지의 개수가 참조 가능하기 때문에 다시 배치를 재실행 했을 때 이미 성공한 지점은 건너뛰고 실패한 지점부터 다시 커밋이 가능하도록 구현할 수 있습니다.

근데 실패한 곳부터  스프링 배치가 알아서 스스로 실행해 주는 역할의 범위와 실패의 위치를 명확하게 정할 수 있는지는 의문입니다.

스프링 배치는 청크 단위로 데이터를 읽어서 청크 단위로 커밋을 해 주고 실패했을 경우 청크 단위로 롤백처리는 해줍니다.

거기에다 실패한 지점까지의 데이터 위치를 기록해 주고 이를 활용할 수 있는 InputStream 과 ExecutionContext 를 제공해 줍니다.

이 정도까지 기본 구현이 되어 있는 것도 대단한 지원이라고 개인적으로 생각합니다.

실제로 배치 프로그램을 만든다면 위의 사항을 구현하기도 그리 녹록치 않기 때문입니다.

0

단무지님의 프로필

단무지

2022.01.19

감사합니다. 즉 데이터 청크단위로 데이터 롤백이 발생하기 때문에 청크 사이즈가 100인데, 50번째 데이터에서 롤백이 발생하면 readcount는 0이되니까 실질적으로 기록하기 힘들다는 뜻으로 해석하면 될까요?