Spring WebFlux
Spring WebFlux๋ Spring Framework 5๋ถํฐ ๋์ ๋ ๋ฐ์ํ(Reactive) ์น ํ๋ ์์ํฌ์ด๋ค.
๊ธฐ์กด์ Spring Web MVC์ ๋์ผํ ์ญํ ์ ํ์ง๋ง, ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์กด์ฌ
WebFlux๋ ๋น๋๊ธฐ ๋ ผ๋ธ๋กํน(Asynchronous Non-Blocking) ๋ฐฉ์์ ๊ธฐ๋ฐ ์ํ
์ ์ ์์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํด ๋์ ๋์์ฑ(Concurrency)๊ณผ ํ์ฅ์ฑ(Scalability)์ ๋ชฉํ๋ก ์ค๊ณ
Spring WebFlux vs. Spring Web MVC
์ ํต์ ์ธ MVC์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ๊ณผ ์ค๋ ๋ ๋ชจ๋ธ์ ์๋ค.
Spring Web MVC
๋์ ๋ฐฉ์: ๋ช ๋ นํ(Imperative) ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ธ๋กํน(Blocking) I/O ๊ธฐ๋ฐ
์ค๋ ๋ ๋ชจ๋ธ: ์์ฒญ ํ๋๋น ์ค๋ ๋ ํ๋๋ฅผ ํ ๋นํ๋ Thread-per-Request ๋ชจ๋ธ์ ์ฌ์ฉ
์์ฒญ์ด ๋ง์์ง๋ฉด ์ค๋ ๋ ์๋ ๊ทธ๋งํผ ์ฆ๊ฐํ์ฌ ์ปจํ ์คํธ ์ค์์นญ(Context Switching) ๋น์ฉ ์ฆ๊ฐ
๊ธฐ๋ฐ ๊ธฐ์ : Servlet API ์์์ ๋์ํ๋ฉฐ, Tomcat, Jetty ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์์ ์ฃผ๋ก ์คํ
Spring WebFlux
๋์ ๋ฐฉ์: ๋ฐ์ํ(Reactive) ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ ผ๋ธ๋กํน(Non-Blocking) I/O ๊ธฐ๋ฐ
์ค๋ ๋ ๋ชจ๋ธ: ์ ์ ์์ ๊ณ ์ ๋ ์ค๋ ๋(๋ณดํต CPU ์ฝ์ด ์์ ๋์ผ)๋ก ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฃจํ(Event Loop) ๋ชจ๋ธ์ ์ฌ์ฉ
I/O ์์ ๋์ ์ค๋ ๋๊ฐ ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฏ๋ก ์์ ํจ์จ์ฑ ๊ทน๋ํ
๊ธฐ๋ฐ ๊ธฐ์ : Reactive Streams ๋ช ์ธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, Netty์ ๊ฐ์ ๋น๋๊ธฐ ๋ ผ๋ธ๋กํน ์๋ฒ์์ ์ฃผ๋ก ์คํ
ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
๋ช ๋ นํ (Imperative)
๋ฐ์ํ(Reactive)
I/O ๋ชจ๋ธ
๋ธ๋กํน (Blocking)
๋ ผ๋ธ๋กํน(Non-Blocking)
์ค๋ ๋ ๋ชจ๋ธ
์์ฒญ๋น ์ค๋ ๋ 1๊ฐ
์ด๋ฒคํธ ๋ฃจํ(์ ์ ์์ ์ค๋ ๋)
ํต์ฌ ์์กด์ฑ
Servlet API
Reactive Streams API
๊ธฐ๋ณธ ๋ด์ฅ ์๋ฒ
Tomcat
Netty
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ , CRUD API
๊ณ ์ฑ๋ฅ API Gateway, ์คํธ๋ฆฌ๋ฐ ์๋น์ค
ํต์ฌ ๊ตฌ์ฑ ์์ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
Spring WebFlux๋ ๊ฐ๋ฐ์๊ฐ ๋ ๊ฐ์ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ ์ค ํ๋๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค.
1. Annotation-based ๋ฐฉ์(@Controller)
@Controller)Spring Web MVC์ ๋งค์ฐ ์ ์ฌํ ๋ฐฉ์์ผ๋ก, @Controller, @RestController, @RequestMapping ๋ฑ์ ์ด๋
ธํ
์ด์
์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฐํ ํ์ ์ผ๋ก Mono๋ Flux์ ๊ฐ์ ๋ฐ์ํ ํ์ (Publisher)์ ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค.
WebFlux๋ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐํํ Publisher๋ฅผ ๊ตฌ๋ (subscribe)ํ๊ณ , ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์์๋๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก HTTP ์๋ต์ ์ฒ๋ฆฌ
์ปจํธ๋กค๋ฌ ๋ฉ์๋๋ ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ์ํ๊ณ ๋ฐํํ์ฌ, ์ค๋ ๋๊ฐ ๋ธ๋กํน๋์ง ์์
2. Functional ๋ฐฉ์(RouterFunctions)
RouterFunctions)์ด๋ ธํ ์ด์ ๋์ ๋ผ์ฐํฐ ํจ์(Router Function)๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ๊ฒฝ๋ก์ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ง์ ๋งคํํ๋ ๋ฐฉ์์ด๋ค.
WebFlux ์ ํ ๊ธฐ์ค
Spring Web MVC๋ ์ฌ์ ํ ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ฅญํ๊ณ ๋จ์ํ ์ ํ์ง์ด๋ฉฐ, WebFlux๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ํนํ ์ ์ฉํ๋ค.
๋์ ๋์์ฑ ์ฒ๋ฆฌ: ์๋ง์์ ์์ญ๋ง ๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ(์: ์ค์๊ฐ ์ฑํ , ์คํธ๋ฆฌ๋ฐ ์๋น์ค, API Gateway)
๋ฆฌ์กํฐ๋ธ ์์คํ ์ฐ๋: ๋ฐ์ดํฐ๋ฒ ์ด์ค(R2DBC), ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค ๋ฑ ํธ์ถํ๋ ์์คํ ์ด ์ด๋ฏธ ๋ฐ์ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ: ํจ์ํ ๋ผ์ฐํ ๋ชจ๋ธ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ
Last updated
Was this helpful?