강의

멘토링

커뮤니티

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

콩코드여객기님의 프로필 이미지
콩코드여객기

작성한 질문수

Spring WebFlux + LLM 실전 구현

스케줄의 스레드를 최대한 사용하지 않고 WebFlux를 사용해야 되는 게 맞는지 궁금합니다.

작성

·

23

·

수정됨

0

안녕하세요. 강의 잘들었습니다.

강의를 듣고나서 궁금한 점이 있어서요.

WebFlux의 스케줄을 통해서 스레드를 분리해서 JPA를 사용한다고 봤고, 그리고 신뢰성이 떨어져도 괜찮은 데이터는 R2DBC를 사용한다고 보았습니다.

그렇다면, 스케쥴의 스레드를 최대한 사용하지 않고 WebFlux에서 지원해 주는 컴포넌트를 사용하는게 최적이라고 생각되는데 맞을까요?

 

제 짧은 생각으로는 JDBC를 사용하면 결국에는 스레드 풀을 사용할 것이고, 사용자가 많아지면 많아질수록 스레드는 부족할 것이라고 생각이 돼서요. 이렇게 되면 WebFlux를 사용하는 이유가 점점 퇴색될 것 같다는 생각이 듭니다.

그렇다면 제가 생각하기로는 WebFlux를 사용하면서 지원하는 컴포넌트(Netty가 지원해 주는 컴포넌트)를 잘 알고, 적절한 Stream 함수를 알고 사용하는 게 제일 중요하다고 생각되는데, 이게 맞는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 콩코드여객기님.

WebFlux의 비동기 및 논블로킹 모델은 스레드 사용을 최소화하여 높은 동시성을 제공하는 데 강점을 가지고 있습니다. 질문하신 내용에 대해 자세히 설명드리겠습니다:

  1. 스레드 사용 최소화: WebFlux는 넷티(Netty)를 기본으로 한 이벤트 루프 기반의 비동기 프레임워크입니다. 이는 적은 수의 스레드로 많은 요청을 처리할 수 있으며, 스레드 컨텍스트 스위칭을 최소화합니다. 이를 통해 스레드 풀 고갈의 우려를 줄여줍니다.

  2. 논블로킹 I/O의 중요성: WebFlux의 장점을 최대한 활용하기 위해서는 논블로킹 I/O 메커니즘을 사용하는 것이 중요합니다. R2DBC와 같은 논블로킹 데이터베이스 드라이버를 사용하면, 스레드가 데이터베이스 대기 상태에서 블로킹되지 않고 효율적으로 다른 작업을 처리할 수 있게 됩니다.

  3. JDBC의 한계: 반면, 전통적인 JDBC는 블로킹 I/O 기반으로 작동하기 때문에, WebFlux와 결합하면 스레드 풀의 고갈을 초래할 수 있습니다. 따라서, 가능한 경우 네티 기반 또는 논블로킹 드라이버를 사용하는 것이 적절합니다.

  4. 컴포넌트의 활용: WebFlux와 Netty의 컴포넌트를 효과적으로 사용하여 스트림 처리 논리를 최적화하는 것은 중요합니다. 이를 위해 다양한 오퍼레이터와 컴포넌트의 사용 방법을 이해하고 적절히 활용하는 것이 좋습니다.

관련된 내용을 좀 더 심도 있게 이해하시려면 아래의 기존 질문 답변을 참고하실 수 있습니다:
- WebFlux에서 비동기 논블로킹 처리의 최적화 방법

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

콩코드여객기님의 프로필 이미지
콩코드여객기

작성한 질문수

질문하기