WebFlux란 무엇인가?

dev-well-being·2023년 9월 13일
1

WebFlux란 무엇인가?

  • WebFlux는 Spring 5에서 새롭게 추가된 Reactive-stack의 웹 프레임워크이며, 클라이언트/서버에서 리액티브(reactive) 애플리케이션 개발을 위한 논블로킹 리액티브 스트림을 지원한다.

WebFlux의 등장

  • 논블로킹으로 동작하는 웹 스택의 필요성 때문에 등장하게 되었다.
  • 기존 SpringMVC의 Servlet API는 v3.1부터 논블로킹을 위한 API제공해왔지만 동기적으로 처리하는 모듈(Filter, Servlet)과 블로킹 방식의 API(getParameter, getPart)들이 있기에 완벽한 논블로킹 환경의 개발을 할 수 없었다.
  • 비동기 논블로킹 환경의 서버 Netty가 부상하고 있었으며 Netty와의 연동을 위해 Spring은 새로운 API가 필요했다.

WebFlux를 사용해야 하는 경우

  • 비동기, non-blocking reactive 개발에 사용하는 경우
  • 효율적으로 동작하는 고성능 웹어플리케이션 개발에 사용
  • 서비스간 호출이 많은 마이크로서비스 아키텍처에 적합

Spring MVC와 WebFlux의 차이

Spring MVC

  • Spring MVC는 하나의 요청에 대해 하나의 스레드가 사용된다(thread-per-request).
  • 그래서 다량의 요청을 대비해 미리 스레드 풀을 생성해놓으며, 각 요청마다 스레드를 할당하여 처리
  • 1 request:1thread
  • sync + blocking

WebFlux

  • 리액티브 프로그래밍은 논블로킹과 고정된 스레드 수 만으로 모든 요청을 처리함으로 Spring MVC의 문제들을 해결
  • 서버는 스레드 한개로 운영하며, 디폴트로 코어 수 개수의 스레드를 가진 워커 풀을 생성하여 해당 워커 풀 내의 스레드로 모든 요청을 처리
  • 제약이 있다면 논블로킹으로 동작해야만 하며, 블로킹 라이브러리가 필수적으로 사용되어야 한다면, 워커 스레드가 아닌 별도의 스레드로 요청을 처리해야 한다.
  • many request:1thread
  • async+nonblock

참고 자료

profile
안녕하세요!! 좋은 개발 문화를 위해 노력하는 dev-well-being 입니다.

0개의 댓글