Spring Framework 5에서 새롭게 추가된 모듈
클라이언트, 서버에서 Reactive 스타일의 애플리케이션 개발을 도와주는 모듈이며 non-blocking으로 Reactive Stream을 지원
-
적은 스레드로 동시성을 처리하고, 보다 적은 하드웨어 자원으로 확장하기 위해
-
함수형 프로그래밍 - Java 8에서 람다식 추가 됨으로 함수 API 가능성 확장
-
MSA 아키텍처로 가면서 작고 많은 모듈로 쪼개지고, 배로 증가한 통신 트래픽을 기존 blocking 방식에서 처리 한계(스레드풀 발생 확률 ↑)
Webflux 는 Asynchronous Non-blocking I/O 방식을 활용하여 성능을 끌어 올릴 수 있는 장점
- 동작하는 Spring MVC 애플리케이션이 있다면 Spring WebFlux로 변환 필요 ❌
- Spring WebFlux는 Java 8 lambda 또는 Kotlin과 함께 사용하는 가볍고 기능적인 웹 프레임 워크에 유용
- 애플리케이션이 JPA, JDBC 또는 네트워킹 API에 의존하는 경우 Spring MVC가 최선의 선택
Spring Webflux에서 사용하는 Reactive Library 👉 Reactor
Reactor = Reactive Streams의 구현체
Flux와 Mono는 Reactor 객체이며, 차이점은 발행하는 데이터 갯수
Mono | Flux |
---|---|
0 ~ 1 개의 데이터 전달 | 0 ~ N 개의 데이터 전달 |
![]() |
![]() |
// 10만건 데이터 Redis에 로드
curl -i localhost:8080/load
// Servlet 조회
curl -i localhost:8080/normal-list
// Reactive 조회
curl -i localhost:8080/reactive-list
Servlet Stack | Reactive Stack |
---|---|
![]() |
![]() |
- IOTest.java
Servlet Stack | Reactive Stack |
---|---|
![]() |
![]() |