Spring Framework/Spring WebFlux

[WebFlux] Spring WebFlux๋ž€?

soogoori 2024. 1. 13. 21:48

Spring WebFlux๋Š” Reactive Stream API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ non-blocking, asynchronous๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„๋™๊ธฐ ์Šคํ”„๋ง ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

์ด๋Š” ๋Œ€๋Ÿ‰์˜ ์›น ํŠธ๋ž˜ํ”ฝ (I/O๊ฐ€ ๋งŽ์€ ์›น ์„œ๋น„์Šค ๋กœ์ง)์—์„œ MVC์™€ ๋Œ€๋น„ํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค. 

๋งค๋ฒˆ WebFlux์˜ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์Œ!

๋”๋ณด๊ธฐ

๐Ÿ‘‰ ๊ทธ๋Ÿฌ๋ฉด ์ฃผ๋กœ ์–ด๋””์—์„œ ํ™œ์šฉ๋˜๋‚˜...?

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๋‹ค์–‘ํ•œ ๋™์‹œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” gateway server
  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ์›น์†Œ์ผ“
  • ๋Œ€๋Ÿ‰์˜ I/O๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์„œ๋น„์Šค 

 

 

 

Spring MVC vs Spring WebFlux

https://spring.io/reactive

Spring ๊ณต์‹ ํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ํ‘œ๋ฅผ ํ†ตํ•ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

WebFlux๋Š” ๋น„๋™๊ธฐ/๋…ผ๋ธ”๋กœํ‚น์ด๊ณ , MVC๋Š” ๋™๊ธฐ/๋ธ”๋กœํ‚น์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

Spring MVC

MVC๋Š” Client์˜ Http Request์— ๋Œ€ํ•ด Queue์— ์ง‘์–ด๋„ฃ๊ณ , ์š”์ฒญ์„ thread ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค๊ณ  ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” thread pool๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ํ๋ฆ„์ด๋‹ค. ์š”์ฒญ์ด ๋งŽ์œผ๋ฉด ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ , ๋Œ€๊ธฐ์—ด๊นŒ์ง€ ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์š”์ฒญ๋“ค์€ ์‹คํŒจ์ฒ˜๋ฆฌ ํ•˜๊ฒŒ๋” ํ•œ๋‹ค. 

๋™๊ธฐ์ ์œผ๋กœ DB์— ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ•˜๋‚˜์˜ thread์—์„œ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๋ฌธ์ œ ํŒŒ์•…์ด๋‚˜ ํ๋ฆ„์ด ์ง๊ด€์ ์ด๋ผ๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. 

ํ•˜์ง€๋งŒ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ์‹คํŒจ์ฒ˜๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. 

 

WebFlux

๋ฐ˜๋ฉด์— Reactive์€ ๋…ผ๋ธ”๋กํ‚น์ด๊ธฐ์— ๋Œ€๋Ÿ‰์˜ ์ ‘์†์— ๋Œ€ํ•ด ๋™์‹œ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. 

๊ทธ ์ด์œ ๋Š” ๋น„๋™๊ธฐ/๋…ผ๋ธ”๋กํ‚น ๋ฐ IO-Multiplexing ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Netty ํ”„๋ ˆ์ž„์›Œํฌ ๋•Œ๋ฌธ์ด๋‹ค. 

 

 

 

Netty

  • ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ ์ง€์›

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ 

https://docs.spring.io/spring-framework/reference/web/webflux.html

https://spring.io/reactive/