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
'Spring' 카테고리의 다른 글
JWT 인증 필터를 왜 @Component로 등록하면 안 되는가? (0) | 2024.11.13 |
---|---|
[Spring] 스프링 @Schduled 사용법, 개념 및 구현해보자 (0) | 2024.06.14 |
[Spring] 스프링에서 네트워크 Ping 테스트 (0) | 2024.06.14 |
[Spring] Spring Quartz, Spring Batch, @Scheduled 개념 (0) | 2024.06.13 |
[Spring] dependencyManagement 와 dependencies의 차이점 (0) | 2024.02.27 |