24.06.18 21:39 작성
·
136
·
수정됨
1
for문 5번 도는데, resttemplate은 blocking / webclient은 non-blocking 이라 결과가 달라진 것 같아서요
보내는게 non-blocking 이면 mvc도 결과가 동일 했을 것 같아요
답변 1
1
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를 쉽게 설명드리기 위한 단순 예제라고 이해해 주시면 감사드릴게요.
다시 한 번 좋은 질문 주셔서 감사드립니다!