Intro
์๋ ํ์ธ์:) ์ด๋ฒ ์๊ฐ์๋ ์ฝํ๋ฆฐ Mono, Flux ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์์ฆ ๋ค์ ์ฝํ๋ฆฐ์ ํ๊ณ ์๋๋ฐ ๊ทธ์ ๊ฐ๋ ์ ์์ด๋จน์ด ๋ค์ ๊ณต๋ถ๊ฐ ํ์ํ ๊ฒ ๊ฐ์์! ๐ญ
์ฝํ๋ฆฐ Mono, Flux
kotlin์์ Mono, Flux๋ Reactor ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ๋น๋๊ธฐ ์คํธ๋ฆผ์ ํํํ๋ ํ์ ์ ๋๋ค. ์ด๋ค์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ผ๋ฉฐ, Reactive Streams ํ์ค์ ๋ฐ๋ฆ ๋๋ค.
Reactor ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ฐ ๊ธฐ๋ฐ์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ(๋น๋๊ธฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ)๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Spring WebFlux์ ๊ฐ์ ๋น๋๊ธฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. Spring WebFlux๋ Spring Framework์์ ์ ๊ณตํ๋ ๋น๋๊ธฐ ๋ฐ ๋ ผ๋ธ๋กํน ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ๋ชจ๋์ ๋๋ค. ๊ธฐ์กด์ Spring MVC๊ฐ ๋๊ธฐ์ ๋ฐฉ์์ ๊ธฐ๋ฐํ ์น ๊ฐ๋ฐ ๋ชจ๋ธ์ด๋ผ๋ฉด, Spring WebFlux๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์ด, ๋๊ท๋ชจ์ ๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
Mono
- 0๊ฐ ๋๋ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐํ
- ๋ฐ์ดํฐ๊ฐ ํ๋๋ง ํ์ํ๊ฑฐ๋ ์์ ์๋ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ฆฌ์์ค ์๋น: ์๋์ ์ผ๋ก ๊ฐ๋ฒผ์
Flux
- 0๊ฐ ์ด์์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐํ
- ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์คํธ๋ฆฌ๋ฐํ ๋ ์ ํฉ
- ๋ฆฌ์์ค ์๋น: ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๋ถ๋ด ์ฆ๊ฐ
Kotlin ์ฌ์ฉ ์์
import kotlinx.coroutines.reactor.awaitSingle
import kotlinx.coroutines.reactor.awaitSingleOrNull
suspend fun getData(): String {
return Mono.just("Hello").awaitSingle()
}
reactor.kotlin ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด Mono์ Flux๋ฅผ suspend ํจ์๋ก ๋ณํ ๊ฐ๋ฅ