인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

감자1님의 프로필 이미지
감자1

작성한 질문수

스프링 배치

AsyncItemProcessor / AsyncItemWriter

Multithread step과 AsyncItemProcessor

작성

·

55

0

read 작업이 무겁고(느림) processor 작업에는 I/O(api call 등,,)가 많다고 가정했을때
Multithread step(reader는 스레드안전)과 AsyncItemProcessor를 함께 사용해도 문제가 없을까요??

Multithread step 자체도 별도의 스레드 풀에서 동작하고

AsyncItemProcessor도 다른 스레드 풀에서 작동하고
reader(reader는 스레드안전)에서 데이터를 가져올때 이미 작업범위가 정해져있기 때문에 동시성으로 부터도 안전해 보여서요!

답변 2

0

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

시도 자체는 좋습니다.

문제는 이게 실무적으로 얼마만큼의 효율성을 가지느냐 문제입니다

멀티 스레드 작업이 컨텍스트 스위칭 문제부터 동시성, 락 등 여러가지 고려해야 할 사항들이 많고 오히려 성능이 더 저하될 수 도 있습니다.

비동기 프로그래밍도 논블록킹이라는 이점은 있지만 규모가 커질수록 비동기 지점과 블록킹 지점이 혼재된다면 큰 성능상의 이점을 가져가기 어렵습니다.

결론적으로 멀티스레딩은 확연하게 대용량의 데이터가 존재하고 이것을 분할하여 동시적으로 처리해야 하는 근거가 확실할 때 시도하는 것이 좋습니다.

0

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

감자1님께서 질문하신 내용에 대해 설명드리겠습니다. Multithreaded Step과 AsyncItemProcessor는 각각 비동기적으로 작업을 처리하여 성능을 향상시킬 수 있는 유용한 기능입니다.

Multithreaded Step과 AsyncItemProcessor를 함께 사용하는 것

  1. Multithreaded Step은 주로 ItemReader, ItemProcessor, ItemWriter 모든 단계에서 병렬 처리를 가능하게 합니다. 이를 통해 I/O나 데이터베이스 접근이 많은 경우 성능 향상을 기대할 수 있습니다. 작업이 여러 스레드에서 동시에 처리되기 때문에 스레드 안전한 Reader를 사용하는 것이 중요합니다.

  2. AsyncItemProcessor는 ItemProcessor 단계에서 비동기 처리를 지원함으로써 I/O 바운드 작업의 성능을 최적화할 수 있습니다. 특히 API 호출과 같은 경우에 유리합니다.

두 가지를 함께 사용할 때의 고려사항

  • 성능 장점: 두 기능을 함께 사용하여 다른 스레드 풀을 활용함으로써 병렬 처리를 극대화할 수 있습니다. 두 기능이 별도의 스레드 풀을 사용하도록 설정하면, 서로 간섭 없이 독립적으로 처리 가능해집니다.

  • 구성 관리: 두 시스템의 스레드 풀 크기 관리가 중요합니다. 스레드 개수를 적절히 조정하지 않으면 스레드 오버헤드가 발생할 수 있습니다.

  • 동시성 문제: Reader가 스레드 안전하게 동작한다면 대부분의 경우 동시성 문제는 걱정하지 않으셔도 됩니다. 하지만 Reader 구성에 의해 데이터 처리 시 중복되거나 누락되는 경우가 없는지 테스트가 필요합니다.

관련 학습 자료

두 자료 모두 멀티스레드 환경과 관련하여 성능, 트랜잭션 관리 등의 주제를 다루고 있으니 참고하시면 도움이 될 것입니다.

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

감자1님의 프로필 이미지
감자1

작성한 질문수

질문하기