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

목동 개발자님의 프로필 이미지

작성한 질문수

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

Blocking I/O 방식과 Non-Blocking I/O 방식 이해하기(2): Spring MVC vs Spring WebFlux

예시코드는 webflux의 이점보단 webclient의 이점 아닌가요?

24.06.18 21:39 작성

·

136

·

수정됨

1

 

for문 5번 도는데, resttemplate은 blocking / webclient은 non-blocking 이라 결과가 달라진 것 같아서요

 

보내는게 non-blocking 이면 mvc도 결과가 동일 했을 것 같아요

답변 1

1

Kevin님의 프로필 이미지
Kevin
지식공유자

2024. 06. 18. 22:29

안녕하세요.

좋은 질문 주셔서 감사드립니다.

말씀하신대로 클라이언트 쪽이 Non-Blocking이고, 서버 쪽이 MVC(Blocking)일 경우, 동일한 결과가 나올겁니다.(논리적으로 생각해 본 것이고, 사정상 제가 직접 돌려보지는 못했으니 양해 부탁드릴게요.)

단, MVC 쪽에서 들어오는 요청에 thread가 1대 1로 매핑 된다는 전제가 깔려있어야 될겁니다. MVC 쪽에서는 톰캣이 들어오는 요청 당 thread 하나를 매핑 시켜 줄텐데 이 경우에는 요청이 동시 다발적으로 들어올 때 각각 다른 thread가 매핑될테니 말씀하신대로 동일한 결과가 나올텐데요.

 

만약에 톰캣 쪽에 들어오는 요청에 사용되는 thread가 딱 하나만 존재한다면 말씀하신대로의 결과가 나오지 않을겁니다.

 

물론 Fully Non-Blocking 구조에서는 서버 쪽에서 worker thread가 하나만 있어도 Blocking 되지 않구요.(예제에서 System.setProperty("reactor.netty.ioWorkerCount", "1"); 를 통해서 요청을 처리하는 thread 개수를 1로 지정했습니다.)

 

강의에 나오는 예시는 Blocking I/O와 Non-Blocking I/O를 쉽게 설명드리기 위한 단순 예제라고 이해해 주시면 감사드릴게요.

 

다시 한 번 좋은 질문 주셔서 감사드립니다!