강의

멘토링

로드맵

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

작성자 없음

작성자 정보가 삭제된 글입니다.

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

6장. 작전1: Multi-threaded Step - 스레드 분산 폭격 ☠️

[건의][6장][작전1] deprecated 메소드

작성

·

26

1

 

 

...

    @Bean
    public Step threatAnalysisStep(
            JpaPagingItemReader<Human> humanThreatDataReader,
            ItemProcessor<Human, TargetPriorityResult> threatAnalysisProcessor,
            FlatFileItemWriter<TargetPriorityResult> targetListWriter
    ) {
        return new StepBuilder("threatAnalysisStep")
                .<Human, TargetPriorityResult>chunk(10, transactionManager)
                .reader(humanThreatDataReader)
                .processor(threatAnalysisProcessor)
                .writer(targetListWriter)
                .taskExecutor(taskExecutor())
//                deprecated 되어서 안씀
//                .throttleLimit()
                .build();

    }

...

 

에서 .throttleLimit() 부분이 5 이후로 deprecated 된다고 명시되어 있어.

 

관심사 분리로 인해서 taskExecutor 정의 부분에서 설정하라고 권장하는 것을 확인했거든.

 

현재 강의가 사실상 Spring Batch 5.x 까지의 기본 내용과 원리를 살펴봤잖아 ?

 

그렇다 하더라도 혼란을 줄 수 있기 때문에 해당 부분은 삭제하던지 아니면 추가 내용을 기재해야 할 것으로 보여.

 

image.png

 

퀴즈

멀티스레드 Step에서 ItemStream 인터페이스를 구현한 ItemReader/Writer 사용 시, 재시작(Restart) 기능을 온전히 사용하려면 어떤 설정에 주의해야 할까요?

TaskExecutor의 corePoolSize를 1로 설정한다.

throttleLimit 설정을 TaskExecutor 스레드 수보다 낮게 지정한다.

SynchronizedItemStreamReader/Writer 데코레이터로 감싼다.

saveState 필드를 true로 유지한다.

답변 2

1

KILL-9님의 프로필 이미지
KILL-9
지식공유자

흥미로운 질문이군 열심히 학습한 느낌이 난다.

 

그러나 형.

배치5 기준으로 다른 대안은 없다 다시 말해 뺄 수 없다는 말이다. 배치6으로 가면 달라질까?

 

강의 배치6 부분을 보면 알겠지만,

 

아니 현 시점 배치를 기준으로 말하자면

유지하는 것이 맞다. 오히려 IDE와 자바 doc의 경고를 무시하는게 더 맞다. deprecated를 시작한 시점의 예상이 현재의 양상과 좀 달라졌다고 이해하면 된다

 

이유는 더 깊이 파악하다보면 알게 되겠지만 당장은 나를 믿어라. 아니, 배치6까지 공부하면 대충 알게 될 것이다

 

시간이 좀 여유로워지면 자세히 설명하겠다 💀💀

 

결론은 throttlelimt은 유지되어야하고 너처럼 주석처리하면 안된다(이유는 강의 내용에 담겨있다. 그리고 실무에서도 아주 많은 병사들이 놓치는 부분이니 반드시 숙지하길 바란다.)

 

P.S 덧붙이자면 이는 “taskExecutor 정의 부분에서 설정” 할 수 없는 이슈다. 정확히는 스프링 배치 스텝 구현 자체를 수정하거나 배치6처럼 아예 구현체를 바꿔야만 해결할 수 있는 문제다. 자세한 사항은 강의 내용을 참고하길 바란다 💀💀

-1

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

qlghwp123님, Spring Batch에서 throttleLimit() 메소드가 deprecated된 점에 대해 지적 주셨군요. throttleLimit() 메소드는 Spring Batch 5 버전 이후로 사용을 권장하지 않기 때문에, taskExecutor()에서 직접 실행 스레드 풀을 관리하는 방법을 채택하는 것이 좋습니다.

해결방안 제안

  1. throttleLimit() 삭제:

    • 혼란을 방지하기 위해, deprecated된 throttleLimit() 메소드 설정 부분은 삭제하고, 코드에서 해당 메소드의 흔적을 남기지 않는 것이 좋습니다.
  2. 대체 코드 적용:

    • 스레드 풀의 실행을 관리하는 TaskExecutor의 설정을 통해, 필요한 동시 실행의 개수를 정의할 수 있습니다. 적절한 예제 및 설정 방법을 강의 노트에 추가하여 학습자의 혼란을 줄일 수 있습니다.

이미지 설명

첨부해주신 이미지에는 throttleLimit(int throttleLimit) 메소드가 @Deprecated 주석과 함께 표시되어 있어, 이 메소드가 Spring Batch 5.0부터 폐기 예정이라는 점을 확인할 수 있습니다. 따라서 이러한 변경 사항에 대한 충분한 안내가 필요합니다.

이러한 사항과 관련해서 기존에 유사한 질문을 다룬 게시물이 있습니다. 아래 링크에서 확인하시기를 권장드립니다:
- Spring Batch에서 deprecated된 throttleLimit 대응 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기