Spring MVC와 WebFlux의 차이

2021. 10. 29. 21:46Java/Spring

Spring WebFlux

Spirng WebFlux는 Event driven 방식이고 비동기 논블로킹 방식입니다. WebFlux는 Node.js처럼 이벤트 루프가 돌아서 요청이 발생할 경우 그것에 맞는 핸들러에게 처리를 위임하고 처리가 완료되면 callback 메소드 등을 통해 응답을 반환합니다. 그래서 이 방식의 경우 Spirng MVC에 비해 적은 스레드로 많은 사용자의 요청을 받아낼 수 있습니다.

Spirng MVC

Spring Mvc는 사용자의 요청이 들어왔을 때마다 Thread를 생성하여 요청을 처리합니다. 하지만 다수의 사용자 요청이 들어왔을 때, Thread를 계속 생성하는 것은 리소스가 굉장히 많이 들어갑니다. 그래서 Spring MVC의 경우 어플리케이션이 실행되면서 Thread Pool에 미리 Thread를 만들어둡니다. 요청이 들어오면 그 요청을 Queue에 쌓고 이것을 Thread Pool의 Thread들이 요청을 가져가 처리합니다.
하지만 엄청나게 많은 사용자가 동시에 요청을 보내서 Pool Size를 초과하여 Queue에 계속 요청이 쌓이는 현상이 발생할 수 있습니다. 따라서 Spring MVC의 경우, 개발하는 해당 시스템의 트래픽을 측정하여 Pool Size를 조정하는 것이 매우 중요합니다.

Spring MVC VS Spring WebFlux

위의 설명을 참고하자면 Spring WebFlux는 Spring MVC보다 처리 효율이 더 좋기 때문에 Spring WebFlux를 사용하는 것이 더 좋아보일 수도 있습니다. 하지만 Spring WebFlux의 성능을 끌어내려면 요청을 처리하는 파이프라인의 요소들이 모두 논블로킹하게 동작해야만 의미가 있습니다. 따라서 어떤 특정한 구간에서 블로킹이 발생하는 구간이 있다면 거기서부터 Thread Pool Hell 같은 문제들이 발생하는 것입니다.

728x90

'Java > Spring' 카테고리의 다른 글

Spring Security - Rest API에 csrf protection을 사용하지 않는 이유  (0) 2022.05.02
Spring MVC  (0) 2021.11.02
Spring Batch Chunk 지향 처리  (0) 2021.03.22
Spring + Hibernate Validator Custom Message  (0) 2020.09.15
Spring Integration  (0) 2020.09.15