Mono & Flux
Mono์ Flux๋ Spring WebFlux๊ฐ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Project Reactor ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๋ ํต์ฌ Publisher ํ์ ์ ๋๋ค.
์ด ๋์ ๋ฐ์ํ ์คํธ๋ฆผ(Reactive Stream)์์ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ์ํ๋ ์ญํ
๋ชจ๋ ๋น๋๊ธฐ ์์ ์ ์ด ๋ ํ์ ์ ํตํด ํํ๋๊ณ ์ฒ๋ฆฌ๋จ
Mono
Mono๋ 0๊ฐ ๋๋ ์ต๋ 1๊ฐ์ ๊ฒฐ๊ณผ๋ง์ ๋ฐฉ์ถํ๋ Publisher์ด๋ค.
์ ํธ(Signal)
onNext(T): ๋ฐ์ดํฐ๋ฅผ 1๊ฐ ์ ๋ฌ(์ต๋ ํ ๋ฒ ๋ฐ์)onComplete(): ๋ชจ๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์์ ์๋ฆผ(onNext์ดํ ๋๋ ๋จ๋ ์ผ๋ก ๋ฐ์)onError(Throwable): ์์ ์ค ์๋ฌ ๋ฐ์์ ์๋ฆผ
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
ID๋ก ๋จ์ผ ๋ฐ์ดํฐ ์กฐํ (
findById)๋ฐ์ดํฐ ์์ฑ, ์์ , ์ญ์ ํ ๊ฒฐ๊ณผ ๋ฐํ
์ด ๊ฐ์ ์ธ๊ธฐ (
count)
// "Hello"๋ผ๋ ๋จ์ผ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ Mono ์์ฑ
Mono<String> monoJust = Mono.just("Hello");
// ๋ฐ์ดํฐ ์์ด ์์
์๋ฃ(onComplete) ์ ํธ๋ง ๋ณด๋ด๋ Mono ์์ฑ
Mono<Void> monoEmpty = Mono.empty();
// ์๋ฌ(onError) ์ ํธ๋ง ๋ณด๋ด๋ Mono ์์ฑ
Mono<String> monoError = Mono.error(new RuntimeException("Error occurred"));Flux
Flux๋ 0๊ฐ๋ถํฐ N๊ฐ๊น์ง, ์ฌ๋ฌ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์คํธ๋ฆผ ํํ๋ก ๋ฐฉ์ถํ๋ Publisher์ด๋ค.
์ ํธ(Signal)
onNext(T): ๋ฐ์ดํฐ๋ฅผ 1๊ฐ ์ ๋ฌ(์ฌ๋ฌ ๋ฒ ๋ฐ์ ๊ฐ๋ฅ)onComplete(): ๋ชจ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์์ ์๋ฆผonError(Throwable): ์คํธ๋ฆผ ์ฒ๋ฆฌ ์ค ์๋ฌ ๋ฐ์์ ์๋ฆผ
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ๋ชฉ๋ก ์กฐํ (
findAll)๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค์๋ ๋ฉ์์ง ํ๋ก๋ถํฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
์ค์๊ฐ ์ด๋ฒคํธ ์คํธ๋ฆผ (์: ์ฃผ์ ์์ธ, ์๋ฆผ)
ํต์ฌ ์ฐ์ฐ์
Mono์ Flux๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณต, ํํฐ๋ง, ์กฐํฉํ๊ธฐ ์ํ ํ๋ถํ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด ์ฐ์ฐ์๋ค์ ์ฒด์ธ ํํ๋ก ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์๋ค.
์์ฑ(Creation):
just(),fromIterable(),range()๋ณํ(Transformation)
map(): ๋๊ธฐ์ ์ธ 1:1 ๋ณํAํ์ ์ ์์๋ฅผBํ์ ์ผ๋ก ๋ณํ
flatMap(): ๋น๋๊ธฐ์ ์ธ 1:N ๋ณํ๊ฐ ์์๋ฅผ ์๋ก์ด
Mono๋Flux๋ก ๋ณํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ํํํ(์:User๊ฐ์ฒด๋กOrder๋ชฉ๋ก์ ์กฐํ)
ํํฐ๋ง(Filtering)
filter(): ์ฃผ์ด์ง ์กฐ๊ฑด(Predicate)์ ๋ง์กฑํ๋ ์์๋ง ํต๊ณผ์ํด
์กฐํฉ(Combining)
zip(): ์ฌ๋ฌ ์คํธ๋ฆผ์ ์์๋ฅผ ํ๋์ฉ ์ง์ง์ด ์๋ก์ด ์คํธ๋ฆผ ์์ฑmerge(): ์ฌ๋ฌ ์คํธ๋ฆผ์ ๋์ฐฉํ๋ ์์๋๋ก ํ๋์ ์คํธ๋ฆผ์ผ๋ก ํฉ์นจ
๊ตฌ๋
(Subscribe)ํ๊ธฐ ์ ์๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์
Mono๋ Flux๋ฅผ ์์ฑํ๊ณ ์ฐ์ฐ์๋ฅผ ์ฒด์ด๋ํ๋ ๊ฒ์ ๋จ์ง ์คํ ๊ณํ์ ๋ง๋๋ ๊ฒ์ผ ๋ฟ, ์ค์ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์์๋์ง ์๋๋ค.
.subscribe() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์ ๋น๋ก์ ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๊ธฐ ์์ํ๋ฉฐ, Spring WebFlux์์๋ ํ๋ ์์ํฌ๊ฐ ์ด ์ญํ ์ ์ํํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ํธ์ถํ ์ผ์ ๊ฑฐ์ ์๋ค.
Last updated
Was this helpful?