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 ๋ฐฐ์ด๋ก ๋ ๋๋ง๋๋ค.
๋ชฉ์ฐจ ๊ฐ์ด๋