스프링 MVC + Servlet 3.1 이상 모델을 사용할 경우 비동기, 논블록킹이 가능하다고 들었습니다. Spring mvc내의 일부 getParameter, Filter 등의 함수나 일부 지원 api 들이 블로킹 api 들이 많기 때문에 Servlet 3.1 이상의 버전을 쓰더라도 Webflux만큼의 성능이 나오지 않는다고 구글링 하다보니 찾게 되었는데 이 정보가 정확한지 궁금합니다.
Spring MVC + Servlet 3.1 이상 model과 Spring Webflux
박건호
작성일
23.10.28 22:26
조회수
242
댓글 1
건호님, 안녕하세요?
솔직히 말씀드리면 Netty 이외에 Servlet 3.1 이상의 서버 엔진을 사용해 보지는 않았습니다. ^^;
다만, Spring MVC Framework은 기본적으로 Servlet API를 기반(서블릿이 Blocking I/O 방식을 사용하는 전통적인 방식)으로 하기 때문에 Fully Non-Blocking I/O 방식보다 성능이 떨어진다고 예상할 수 있습니다.
서버 엔진은 디폴트 서버 엔진인 Netty에서 다른 엔진으로 바꾼다고 하더라도 웹 프레임워크는 Spring MVC가 아닌 Spring WebFlux를 사용하는 것이 더 나은 성능을 위한 적절한 선택일 것 같다는 생각이 듭니다.
참고로 어느 구간에서 blocking이 되는지 궁금하시다면 BlockHound 같은 Java agent로 blocking 포인트를 찾아보시면 좋을 것 같습니다.
감사합니다.
답글