IT/Spring WebFlux

Spring WebFlux

밝은내일 2020. 11. 6. 23:17

Overview

Spring WebFlux는 Spring 5에 추가되었습니다. 이로써 Spring은 리액티브 스택(Reactive Stack) & 서블릿 스택(Servlet Stack) 두 가지 형태의 웹 프래임워크를 제공하게 되었습니다.

WebFlux는 기본적으로 Netty, Undertow 그리고 Servlet 3.1+ containers 이상의 서버에서 동작합니다. 또한, WebFlux는 Reactive Streams를 사용하여 Non-Blocking과 Back Pressure를 지원합니다. Reactive Streams, Non-Blocking, Back Pressure의 의미는 다음 기회에 보다 자세히 정리하도록 하겠습니다.

Features

WebFlux는 비동기 논블러킹(asynchronous non-blocking)이면서 이벤트 기반(event-driven)이기 때문에 효율적으로 동작합니다. 특히 리액티브에서 강조하는 응답성이 크게 향상되므로 상호간 커뮤니케이션이 빈번한 MSA(Micro Service Architecture)에서 더욱 효과적으로 알려져 있습니다.

아래 그림은 DZone에서 고전적인 Spring MVC를 이용한 Boot1과 Spring WebFlux를 이용한 Boot2의 성능을 비교한 그래프입니다. 주목할 점은 동시 사용자 수가 1000미만일 경우는 성능의 차이가 거의 없지만, 사용자 수가 늘어날수록 성능의 차이가 월등히 커지는 현상입니다.

성능상 명확한 장점이 있지만, WebFlux를 사용하는 것이 필수사항은 아닙니다. (심지어 Spring 전문가들의 의견) 이미 잘 동작하고 있는 servelet 기반의 서비스가 있는데 WebFlux로 무리해서 옮긴다고 하면 득보다 오히려 실이 많을 수 있습니다. (이관에 많은 공수가 든다고 합니다.) 따라서 WebFlux는 비교적 새로운 서비스에 적용하는 것이 좋아 보입니다.

WebFlux는 비동기의 스트림 기반이다보니 디버깅이 쉽지 않고, 개발자의 사고방식이 비동기 처리에 맞게 바뀌어야 합니다. 마지막으로, WebFlux를 사용할 수 없는 경우가 있는데 non-blocking을 지원하지 않는 RDBMS를 사용하는 경우입니다. (R2DBC를 제외한 일반적인 모든 RDBMS가 사용불가) 현재 WebFlux에서 non-blocking을 지원하는 NoSQL은 MongoDB, Redis, Cassandra, Couchbase가 있습니다.

References

https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

https://share.navercorp.com/techtalk698/lecture/44750

https://alwayspr.tistory.com/44

반응형

'IT > Spring WebFlux' 카테고리의 다른 글

Project Reactor  (0) 2020.12.13
Event-Driven & WebFlux  (1) 2020.11.10
Back Pressure  (0) 2020.11.07
Non-Blocking  (0) 2020.11.07
Reactive?  (0) 2020.11.05