Programming/Kotlin

[Kotlin] ์ฝ”ํ‹€๋ฆฐ Mono, Flux ๋ž€?

yuri lee 2024. 11. 18. 21:50
๋ฐ˜์‘ํ˜•

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 ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ

๋ฐ˜์‘ํ˜•