๐ก WebFlux๋?
Spring WebFlux๋ Spring 5์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ชจ๋์ ๋๋ค.
WebFlux๋ ํด๋ผ์ด์ธํธ, ์๋ฒ์์ reactive ์คํ์ผ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋์์ฃผ๋ ๋ชจ๋์ด๋ฉฐ,
reactive-stack web framework์ด๋ฉฐ non-blocking์ reactive stream์ ์ง์ํฉ๋๋ค.
์ฅ์ : ๊ณ ์ฑ๋ฅ, spring ๊ณผ ์๋ฒฝํ ํตํฉ, netty ์ง์, ๋น๋๊ธฐ non-blocking ๋ฉ์ธ์ง ์ฒ๋ฆฌ
๋จ์ : ์ค๋ฅ์ฒ๋ฆฌ๊ฐ ๋ค์ ๋ณต์กํ๋ค.
์คํ๋ง5๋ Spring Boot 2 ๋ถํฐ ๋์ ์ด ๋์์ผ๋ฉฐ, Spring Boot 2 ์ stack ๋ ์๋์ ๊ฐ์ต๋๋ค.
Reactive Stack ๋ฅผ ์ฌ์ฉํ ์ง, Servlet Stack ๋ฅผ ์ฌ์ฉํ ์ง ์ ํ์ด ํ์ํฉ๋๋ค.
๐กSpring MVC vs. WebFlux
Spring MVC์ WebFlux์ ๊ณตํต์ ์ @Controller, Reactive ํด๋ผ์ด์ธํธ์ ๋๋ค. ๋ ๋ค Tomcat, Jetty, Undertow์ ๊ฐ์ ์๋ฒ์์ ์คํํ ์ ์์ต๋๋ค. Spring MVC์์๋ ๋ช ๋ นํ ๋ ผ๋ฆฌ, JDBC, JPA๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. Spring WebFlux์์๋ ๊ธฐ๋ฅ์ ์๋ ํฌ์ธํธ, ์ด๋ฒคํธ ๋ฃจํ, ๋์์ฑ ๋ชจ๋ธ์ ๊ฐ์ง ์ ์์ต๋๋ค. Spring WebFlux๋ Netty ์๋ฒ์์ ์คํํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
<Spring MVC ๋๋ WebFlux๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ>
1. ์ด๋ฏธ ์๋์ค์ธ Spring MVC ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ค๋ฉด Spring WebFlux๋ก ๋ณํ ํ ํ์๊ฐ ์์ผ๋ฉฐ, Spring MVC๋ ์์ฑํ๊ณ ๋๋ฒ๊ทธํ๋ ์ฌ์ด ๋ฐฉ๋ฒ ์ธ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํฉ๋๋ค.
2. non-blocking ์น ์คํ์ ์์ฑํ๊ณ ์ํ๋ค๋ฉด, ์ ํ ๊ฐ๋ฅํ ์๋ฒ (Netty, Tomcat, Jetty, Undertow ๋ฐ Servlet 3.1+ ์ปจํ ์ด๋)๋ฅผ ์ ๊ณตํ๋ Spring WebFlux๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์น ์๋ ํฌ์ธํธ) ๋ฐ ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (Reactor, RxJava ๋๋ ๊ธฐํ)๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
3. Spring WebFlux๋ Java 8 lambda ๋๋ Kotlin๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฐ๋ณ๊ณ ๊ธฐ๋ฅ์ ์ธ ์น ํ๋ ์ ์ํฌ์ ์ ์ฉํฉ๋๋ค.
4. ๋ง์ดํฌ๋ก ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฐ๋ฆฌ๋ Spring MVC์ Spring WebFlux ์ปจํธ๋กค๋ฌ์ ํผํฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ง ์ ์์ต๋๋ค. Spring WebFlux ์๋ ํฌ์ธํธ๋ ๊ฐ์ง ์ ์์ต๋๋ค.
5. ์ ํ๋ฆฌ์ผ์ด์ ์ด JPA, JDBC ๋๋ ๋คํธ์ํน API์ ์์กดํ๋ ๊ฒฝ์ฐ Spring MVC๊ฐ ์ต์ ์ ์ ํ์ด๋ค.
(Webflux ๋ Asynchronous Non-blocking I/O ์ ๋ฐฉ์์ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ๋์ด ์ฌ๋ฆด ์ ์๋ ์ฅ์ ์ด ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ง์ ์ฆ, Non Blocking ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ๋ง์ฝ Blocking ์ฝ๋๊ฐ ์๋ค๋ฉด Webflux๋ฅผ ์ฌ์ฉํ๋ ์๋ฏธ๊ฐ ๋จ์ด์ง๊ฒ ๋๋ค. ์ผ๋ง ์ ๊น์ง๋ Java ์ง์์ Non Blocking ์ ์ง์ํ๋ DB Driver๊ฐ ์์์ง๋ง, ์ต๊ทผ์ R2DBC ๊ฐ ๋ฆด๋ฆฌ์ฆ๋์ด ์ด์ ๋ Java ์์๋ Non Blocking ์ผ๋ก DB ๋ฅผ ์ ๊ทผํ ์ ์๊ฒ ๋์๋ค.)
๐ก Mono์ Flux
Spring Webflux์์ ์ฌ์ฉํ๋ reactive library๊ฐ Reactor์ด๊ณ Reactor๊ฐ Reactive Streams์ ๊ตฌํ์ฒด์ ๋๋ค.
Flux์ Mono๋ Reactor ๊ฐ์ฒด์ด๋ฉฐ, ์ฐจ์ด์ ์ ๋ฐํํ๋ ๋ฐ์ดํฐ ๊ฐฏ์์ ๋๋ค.
- Flux : 0 ~ N ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
- Mono : 0 ~ 1 ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
๋ณดํต ์ฌ๋ฌ ์คํธ๋ฆผ์ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ค ๋ Mono๋ฅผ, ๊ฐ๊ฐ์ Mono๋ฅผ ํฉ์ณ์ ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ์ฒ๋ฆฌํ ๋ Flux๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ Flux๋ 0~1๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ฐ, ๊ตณ์ด ํ๊ฐ๊น์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ Mono๋ผ๋ ํ์
์ด ํ์ํ ๊น์? ๋ฐ์ดํฐ ์ค๊ณ๋ฅผ ํ ๋ ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋ ํ๋์ ๊ฒฐ๊ณผ๊ฐ๋ง ๋ฐ๋ ๊ฒ์ด ๋ช
๋ฐฑํ ๊ฒฝ์ฐ, List๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ฒ๋ผ, Multi Result๊ฐ ์๋ ํ๋์ ๊ฒฐ๊ณผ์
๋ง ๋ฐ๊ฒ ๋ ๊ฒฝ์ฐ์๋ ๋ถํ์ํ๊ฒ Flux๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Mono๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๐๐ป Mono์ Flux ๊ฐ๋ ๊ณผ ๊ตฌํ ๋ ์์๋ณด๊ธฐ
์ฐธ๊ณ
docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-framework-choicewww.concretepage.com/questions/711
'๐ฉโ๐ปTIL > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Batch] ์คํ๋ง๋ฐฐ์น ๊ฐ๋ /ํต์ฌ๊ธฐ๋ฅ/ํํฐ์ ๋ ๋ถํ ๋ฐฉ์ (0) | 2021.08.23 |
---|---|
[WebFlux] Mono์ Flux ๊ฐ๋ ๊ณผ ๊ตฌํ (0) | 2021.05.09 |
[Spring Security] ์คํ๋ง์ํ๋ฆฌํฐ ์์ํ๊ธฐ /๊ธฐ๋ณธ์ธํ (9) | 2020.05.15 |
[Spring Security] ์คํ๋ง์ํ๋ฆฌํฐ์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ (2) | 2020.05.12 |
๋๊ธ0