6. Reactive Libraries

spring-webflux๋Š” reactor-core์— ์˜์กดํ•˜์—ฌ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›นํ”Œ๋Ÿญ์Šค API๋Š” Flux ๋˜๋Š” Mono๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.(๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ) ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ Publisher ๊ตฌํ˜„์ฒด๋“  ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. Flux์™€ Mono์˜ ์‚ฌ์šฉ์€ ์ค‘์š”ํ•˜๋‹ค. ์นด๋””๋„๋ฆฌํ‹ฐ ํ‘œํ˜„์— ๋„์›€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์˜ˆ๋ฅผ ๋“ค์–ด, ๋น„๋™๊ธฐ ๊ฐ’์ด ๋‹จ์ผ ๋˜๋Š” ๋‹ค์ค‘๊ฐ’์ธ์ง€ ์—ฌ๋ถ€, ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์–ด๋–ค(์˜ˆ๋ฅผ ๋“ค๋ฉด, HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๋””์ฝ”๋”ฉํ•  ๋•Œ ๋“ฑ) ๊ฒฐ์ •์„ ํ•  ๋•Œ ํ•„์ˆ˜์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ฒฝ์šฐ ์›นํ”Œ๋Ÿญ์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ ํƒํ•œ ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ž˜ ๋งž์ถฐ์ง„๋‹ค. ์ด๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๊ธฐํƒ€ ๋น„๋™๊ธฐ ํƒ€์ž…์„ ํ”Œ๋Ÿฌ๊ทธ์ธ์ฒ˜๋Ÿผ ํ•ด์ฃผ๋Š” ReactiveAdapterRegistry์˜ ๋„์›€์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” RxJava์™€ CompletableFuture๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ ์ง€์›ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋“ฑ๋ก ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•จ์ˆ˜ํ˜• API(์˜ˆ๋ฅผ ๋“ค์–ด, ํ•จ์ˆ˜ํ˜• ์—”๋“œํฌ์ธํŠธ, ์›นํฌ๋ž„์ด์–ธํŠธ ๋“ฑ)์˜ ๊ฒฝ์šฐ ์›นํ”Œ๋Ÿญ์Šค API์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ๊ทœ์น™์„ ์ ์šฉํ•œ๋‹ค. Flux์™€ Mono๋Š” ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ, ์ž…๋ ฅ์œผ๋กœ๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ์ŠคํŠธ๋ฆผ Publisher๋Š” ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š”๋‹ค. ์ปค์Šคํ…€ ๊ตฌํ˜„์ฒด๋‚˜ ๋‹ค๋ฅธ ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ Publisher๋Š” ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ์ŠคํŠธ๋ฆผ(0..N)์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๋งจํ‹ฑ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, rawํ•œ Publisher๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹ ์— Flux ๋˜๋Š” Mono.from(Publisher)๋กœ ๋ž˜ํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Mono๊ฐ€ ์•„๋‹Œ Publisher์ธ ๊ฒฝ์šฐ, Jackson JSON ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ์ž๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ์˜ˆ์ƒํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฏธ๋””์–ด ํƒ€์ž…์ด ๋ฌดํ•œ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๋ฉด(์˜ˆ๋ฅผ ๋“ค์–ด, application/json+stream), ๊ฐœ๋ณ„์ ์œผ๋กœ ์ž‘์„ฑ(write)ํ•˜๊ณ  ํ”Œ๋Ÿฌ์‹œ(flush) ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ’์ด ๋ชฉ๋ก์œผ๋กœ ๋ฒ„ํผ๋ง๋˜์–ด JSON ๋ฐฐ์—ด๋กœ ๋ Œ๋”๋ง๋œ๋‹ค.


๋ชฉ์ฐจ ๊ฐ€์ด๋“œ