본문 바로가기
개발공부/JAVA Spring

Spring MVC vs WebFlux 패턴 비교하기

by bzerome240 2023. 8. 13.

 

 

MVC 패턴

 

https://www.researchgate.net/figure/The-Spring-MVC-architecture-as-depicted-in-16_fig5_349049076

  • 동기적으로 동작하는 블로킹 방식
  • 어플리케이션이 JPA, JDBC 또는 네트워킹 API에 의존하는 경우 spring MVC가 최선이다.
  • 사용자 요청마다 스레드를 계속 생성해야하므로 Thread pool이 만들어진다. 

 

장점

  • 모듈의 분리를 가능하게 하여 코드 가독성이 높아지고 협업에 유리하다.
  • 가장 많이 쓰이는 패턴이며 유지보수가 쉽다.

 

단점

  • view-model간 의존성
  • 대량 요청을 받아내는데 (Thread pool hell현상: 큐에 계속 요청이 쌓여있는 것) 한계가 있다. 시스템의 트래픽을 측정해서 Thread pool size를 잘 조정해야한다.

 

요즘은 webflux 방식을 사용한다고 한다.

 


 

WebFlux

 

https://blog.knoldus.com/spring-webflux-test-controllers/

 

  • 비동기적으로 동작하는 논블로킹 방식
  • spring 5 (spring boot 2)에서 새로 추가된 모듈이다.
  • Nodejs 처럼 이벤트 루프가 돌기때문에 클라이언트, 서버에서 reactive 스타일(반응형 프로그래밍)의 어플리케이션 개발을 도와주는 모듈
  • non-blocking에 reactive stream을 지원한다.
  • Java8 lambda 또는 kotlin과 함께 사용하는 가볍고 기능적인 웹 프레임워크에 유용하다.
  • 모든 코드가 Non Blocking 기반으로 동작해야만 효율적이다. 블로킹이 발생하는 구간이 있다면 MVC처럼 Thread pool hell 현상이 발생할 수 있다.

 

장점

  • 고성능
  • 비동기 메시지 처리

 

단점

  • 오류처리가 다소 복잡하다.

 


 

 

비교

  • 마이크로서비스 어플리케이션에서 우리는 spring mvc와 spring webflux 컨트롤러의 혼합 형태를 가질 수 있다.
  • mvc가 벽에다가 공던지고 공받기라면 webflux는 공을 기차에 실어보내고 레일을 따라 한바퀴 돌아서 공을 내려준다.

 

 


 

참고

 

 

[Spring] WebFlux의 개념 / Spring MVC와 간단비교

💡 WebFlux란? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈입니다. WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며 non-blocking에

devuna.tistory.com

 

 

⚽️MVC와 WebFlux의 차이점, MVC가 '벽에 공 던지기'라면 WebFlux는..?

webflux를 이제 막 살펴보고 있는데, 길가다 어떤분이 비유해주신 내용 보고 무릎을 탁! 하고 쳤다. 뭔가 신박하면서 명쾌한 설명인것 같아서 한번 알아보려고 한다. 기본 MVC가 벽에다가 공던지고

pearlluck.tistory.com

 

728x90
반응형

댓글