๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ‍๐Ÿ’ปTIL/Spring

[Spring] WebFlux์˜ ๊ฐœ๋… / Spring MVC์™€ ๊ฐ„๋‹จ๋น„๊ต

by devuna 2021. 5. 7.
728x90

๐Ÿ’ก 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

728x90

ํƒœ๊ทธ

, ,

๋Œ“๊ธ€0