공부/Spring

[Spring] Spring Web MVC, WebFlux 의존성 동시 사용

작은소행성 2024. 11. 28. 20:06

Spring Web MVC 와 WebFlux Reactive 환경에서 두 의존성을 같이 사용하면 문제가 발생한다. 

 

 

동기/비동기 처리 방식 차이 

MVC

  • 서블릿 기반 컨테이너 (Tomcat, Jetty 등) 사용 
  • 동기적 요청-응답 모델로 요청이 처리될 때까지 쓰레드가 블로킹됨

WebFlux

  • 비동기 서버 사용 (Netty 등)
  • Reactive Streams 사용
  • 요청-응답이 비동기적으로 처리되며 쓰레드 블로킹이 발생하지 않음

 

Spring Security 모듈 차이 

MVC 와 WebFlux는 서로 다른 모듈을 제공한다. 

두 모듈이 혼재하면 인증/인가 정보가 제대로 전달되지 않거나 null 로 처리될 가능성이 높다.

  • MVC : spring-boot-starter-security
  • WebFlux : spring-security-webflux 

 

라이브러리 의존성 충돌

WebFlux 환경에서 DispatcherServlet 과 같은 컴포넌트를 사용하면 안된다. 

WebClient 를 사용할 때 Webflux 가 아닌 RestTemplate 을 호출했는데 Security Context 가 손실되어 전달되었다. 

 

 

 

위의 이유 말고도 다양한 이유가 있겠지만 

프로젝트 성격에 따라 둘 중 하나를 선택해서 사용하는것을 추천한다. 

반응형