๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ์ฆ ํ์ค ์ฌ์์ ๊ตฌํํ ๊ตฌํ์ฒด ์ค ํ๋
๋ฆฌ์กํฐ๋ธํ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋์ํ๋๋ฐ ์์ด ํต์ฌ์ ์ธ ์ญํ ์ ๋ด๋นํ๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
[์ฐธ๊ณ ]
https://projectreactor.io/docs/core/release/api/
https://sjh836.tistory.com/185
Non-Blocking ํต์
โ ์ฐ๋ ๋๊ฐ ์ฐจ๋จ๋์ง ์์
MSA(Microservice Architecture) ๊ตฌ์กฐ์ ์ ํฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
( MSA ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ค์ ์์ฒญ ์ฐ๋ ๋๊ฐ ์ฐจ๋จ๋๋ Blocking ํต์ ์ ์ฌ์ฉํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ Non-Blocking ํต์ ์ ์๋ฒฝํ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ผ ํ๊ธฐ ๋๋ฌธ )
Operator๋ก ์์ํด์ Operator๋ก ๋๋๋ค !
Mono[0|1]์ Flux[N]์ด๋ผ๋ ๋ ๊ฐ์ง Publisher ํ์ ์ ๊ณต
Backpressure ์ ๋ต
Subscriber์ ์ฒ๋ฆฌ ์๋๊ฐ Publihser์ emit ์๋๋ฅผ ๋ฐ๋ผ๊ฐ์ง ๋ชปํ ๋ ์ ์ ํ๊ฒ ์ ์ดํ๋ ์ ๋ต
DROP ์ ๋ต
โ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด, ์ดํ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ DROPํ๋ ์ ๋ต
LATEST ์ ๋ต
โ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด, ๊ฐ์ฅ ์ต๊ทผ์ emit๋ ๋ฐ์ดํฐ๋ง ๋จ๊ธฐ๊ณ ํ๊ธฐํ๋ ์ ๋ต
๐ก LATEST ์ ๋ต์ด DROP ์ ๋ต์ด๋ ๋น์ทํ๋ฐ
DROP์ Downstream์์ ๋ฒํผ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ๋ ๊น์ง ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ค์ ๋ค์ด์ฌ ๋๋ง๋ค ํ๋ํ๋ DROPํ๋ค๊ฐ, ๋ฒํผ๊ฐ ๋น๋ฉด ๊ทธ ๋ emit๋ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ก๋ก ๋ค์ ๋ฒํผ์ ๋ฃ๋ ์ ๋ต์ด๊ณ
โ
LATEST๋ Downstream์์ ๋ฒํผ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ๋ ๊น์ง ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ค์ ๊ทธ๋๋ก ๋๊ธฐ์ด๋ก ๋ชจ์๋จ๋ค๊ฐ, ๋ฒํผ๊ฐ ๋น๋ฉด ๊ทธ ๋ ๋ง์ง๋ง์ผ๋ก(์ต๊ทผ์) emit๋ ๋ฐ์ดํฐ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง ๋๊ธฐ์ด์ ๋ฐ์ดํฐ๋ค์ ํ๋ฒ์ ํ๊ธฐํ๋ ์ ๋ต์
BUFFER ์ ๋ต
BUFFER DROP LATEST
โ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด, ๋ฒํผ ์์ ์๋ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์ต๊ทผ์ ์ฑ์์ง ๋ฐ์ดํฐ๋ฅผ DROPํ๋ ์ ๋ต
BUFFER DROP OLDEST
โ ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด, ๋ฒํผ ์์ ์๋ ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ DROPํ๋ ์ ๋ต
๐ก ๋ง์ฝ, Publisher์์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋์์์ด emitํ๋๋ฐ Subscriber์ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด,
๋๊ธฐํ๋ ๋ฐ์ดํฐ๊ฐ ์ง์์ ์ผ๋ก ์์ด๋ ๊ฒ์ ๋ฐฉ์นํ๊ฒ๋๋ฉด ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ ๊ฒฐ๊ตญ์ ์์คํ ์ด ๋ค์ด๋ ๊ฒ
โ Backpressure ์ ๋ต์ผ๋ก ์ด๋ฅผ ๋ฐฉ์ง
โ
[์ฐธ๊ณ ] https://projectreactor.io/docs/core/release/reference/#reactive.backpressure
โ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์์๋ Operator์ ๋ฐ๋ผ ๋ฐ์ดํฐ ํ๋ฆ์ด ๋ค์ํ๊ฒ ๋ณํํ๋๋ฐ,
์ด ๋ ๋ณต์กํ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋ง๋ธ ๋ค์ด์ด๊ทธ๋จ์ ํตํด ์ข ๋ ์ฝ๊ฒ ์ดํด ๊ฐ๋ฅ
โ๏ธ ๋ง๋ธ (Marble)
- ์๋ ๋จ์ด์ ์๋ฏธ๋ '๊ตฌ์ฌ'
- ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋
โ ๋ง๋ธ ๋ค์ด์ด๊ทธ๋จ์ด ๊ตฌ์ฌ(ํ๋์ ๋ฐ์ดํฐ)์ด ์ด๋ค ํ๋ฆ์ผ๋ก ๊ตด๋ฌ๊ฐ๋์ง ํํํ ๊ฒ
[์ฐธ๊ณ ]
https://projectreactor.io/docs/core/release/reference/#howtoReadMarbles
( Reactor์ ๋ฐ์ดํฐ ํ์ ์ค ํ๋์ธ Mono๋ฅผ ๋ง๋ธ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํ ๊ฒ )
ํ๊ฐ์ ๊ตฌ์ฌ
โ 0๊ฑด ๋๋ 1๊ฑด์ ๋ฐ์ดํฐ๋ง emitํ๋ Reactor ํ์
์์ ์๋ฏธ
์ ์๋๋ก ๋๊ฐ์ ํ์ ๋ผ์ธ์ด ์๊ณ , ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฌ๊ฐ๋ ์๊ฐ์ ํ๋ฆ์ ํํ
( ์ผ โ ์ค
๋ก ์๊ฐ์ด ํ๋ฆ )
โ ์๋ณธ Mono(Original Mono)์์ Sequence๊ฐ ์์๋๋ ๊ฒ์ ํ์๋ผ์ธ์ผ๋ก ํํ
โ
โก Mono์ Sequence์์ ๋ฐ์ดํฐ๊ฐ emit ๋๋ ๊ฒ์ ํํ
โ
โข ์์ง ๋ง๋ ๋ฐ๋ Mono์ Sequence๊ฐ ์ ์ ์ข ๋ฃ๋์๋ค๋ ๊ฒ์ ์๋ฏธ
โ
โฃ Mono์์ ์ง์ํ๋ ์ด๋ค Operator์์ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ๊ตฌ์ฌ ๋ชจ์์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ณต ์ฒ๋ฆฌ๋๋ ๊ฒ์ ํํ
โ
โค Operator์์ ๊ฐ๊ณต ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ Downstream์ผ๋ก ์ ๋ฌ๋ ๋์ ํ์๋ผ์ธ
โ
โฅ Mono์์ emit๋ ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ณผ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉดX
๋ก ํ์
โ|
๋ ์ ์ ์ข ๋ฃ /X
๋ ์๋ฌ๋ก ์ธํ ๋น์ ์ ์ข ๋ฃ
( Reactor์ ๋ฐ์ดํฐ ํ์ ์ค ํ๋์ธ Flux๋ฅผ ๋ง๋ธ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํ ๊ฒ )
( โฌ๏ธ ์๋ โ ~ โฅ์ ๊ทธ๋ฅ ํ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก Mono์ ๊ฐ์ )
โ
โ ์๋ณธ Flux์์ Sequence๊ฐ ์์๋๋ ๊ฒ์ ํ์๋ผ์ธ์ผ๋ก ํํ
โ
โก Flux์ Sequence์์ ๋ฐ์ดํฐ๊ฐ emit ๋๋ ๊ฒ์ ํํ
โ
โข ์์ง ๋ง๋ ๋ฐ๋ Flux์ Sequence๊ฐ ์ ์ ์ข ๋ฃ๋์๋ค๋ ๊ฒ์ ์๋ฏธ
โ
โฃ Flux์์ ์ง์ํ๋ ์ด๋ค Operator์์ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ๊ตฌ์ฌ ๋ชจ์์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ณต ์ฒ๋ฆฌ๋๋ ๊ฒ์ ํํ
โ
โค Operator์์ ๊ฐ๊ณต ์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ Downstream์ผ๋ก ์ ๋ฌ๋ ๋์ ํ์๋ผ์ธ
โ
โฅ Flux์์ emit๋ ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ณผ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉดX
๋ก ํ์
โ|
๋ ์ ์ ์ข ๋ฃ /X
๋ ์๋ฌ๋ก ์ธํ ๋น์ ์ ์ข ๋ฃ
๐ก main ์ฐ๋ ๋ / ๋ฐ๋ชฌ ์ฐ๋ ๋
โ โ
โ๏ธ main ์ฐ๋ ๋
โ ์ฃผ ์ฐ๋ ๋
โ
โ๏ธ ๋ฐ๋ชฌ ์ฐ๋ ๋
โ ๋ณด์กฐ ์ฐ๋ ๋ ( ์ฃผ ์ฐ๋ ๋์ ์ํฅ์ ๋ฐ๋ ์ฐ๋ ๋ )
โ ์ฃผ ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฐ๋ผ์ ์ข ๋ฃ๋จ
map()
Operator
โ ์
๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฐ์๊ฐ ๊ตฌํํ๋ ๋์๋๋ก ๋ณํํด์ Downstream์ผ๋ก ์ ๋ฌํ๋ ์ญํ
์ ๊ทธ๋ฆผ์ ์ดํด๋ณด๋ฉด,
์์ sequence์์ x๋ก ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋์ผํ ์์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ณํ๋์ด Downstream์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ์ ์ ์์
์ฐ๋ ๋ ๊ด๋ฆฌ์
โ ์ฌ๋ฌ ์ฐ๋ ๋๋ค์ ์์ฝ๊ฒ ๊ด๋ฆฌ
โ ๋ณต์กํ ๋ฉํฐ์ฐ๋ ๋ฉ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํ๊ฒ ํด์ค
Reactor Sequence ์์์ ์ฒ๋ฆฌ๋๋ ๋์๋ค์ ํ๋ ์ด์์ ์ฐ๋ ๋์์ ๋์ํ๋๋ก ๋ณ๋์ ์ฐ๋ ๋๋ฅผ ์ ๊ณตํด ์ฃผ๋ ๊ฒ
( ์ ์ ํ ์ํฉ์ ๋ง๋ ์ฐ๋ ๋๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๋ Operator )
โ๏ธ subscribeOn()
Operator
๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ emitํ๋ ์๋ณธ Publisher์ ์คํ ์ฐ๋ ๋๋ฅผ ์ง์ ํ๋ ์ญํ
๊ตฌ๋ ์ง ํ ์คํ๋๋ Operator ์ฒด์ธ์ ์คํ ์ฐ๋ ๋๋ฅผ Scheduler๋ก ์ง์ ํ ์ฐ๋ ๋๋ก ๋ณ๊ฒฝ
โ๏ธ doOnSubscribe() Operator
- ๊ตฌ๋ ๋ฐ์ ์ง ํ์ ํธ๋ฆฌ๊ฑฐ ๋๋ Operator
- ๊ตฌ๋ ์ง ํ์ ์ด๋ค ๋์์ ์ํํ๊ณ ์ถ๋ค๋ฉด doOnSubscribe()์ ๋ก์ง์ ์์ฑํ๋ฉด ๋จ
- ์ด ์์ subscribeOn() Operator ์ฌ์ฉํ ๊ฒฝ์ฐ doOnSubscribe()์ ๋ก์ง์ ์ฐ๋ ๋๊ฐ ๋ฐ๋์ง ์๊ณ main์์ ์คํ๋จ
- ์ดํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ emitํ๋ ๋จ๊ณ๋ถํฐ๋ ๋ค๋ฅธ ์ฐ๋ ๋์์ ์คํ
์ฃผ๋ก Schedulers.boundedElastic()
์ฌ์ฉ
โ๏ธ publishOn()
Operator
์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณต ์ฒ๋ฆฌํ๋ Operator ์์ ์ถ๊ฐํด์ ์คํ ์ฐ๋ ๋๋ฅผ ๋ณ๋๋ก ์ถ๊ฐํ๋ ์ญํ
publishOn() ๊ธฐ์ค Downstream ์ฐ๋ ๋๊ฐ publishOn()์ Scheduler๋ก ์ง์ ํ ์ฐ๋ ๋๋ก ๋ณ๊ฒฝ
โ๏ธ doOnNext() Operator
- doOnNext() ๋ฐ๋ก ์์ ์์นํ Operator๊ฐ ์คํ๋ ๋, ํธ๋ฆฌ๊ฑฐ ๋๋ Operator
์ฃผ๋ก Schedulers.parallel()
์ฌ์ฉ
๐ก Operator ์ฒด์ธ๋ง๋ค ์คํ ์ฐ๋ ๋๋ฅผ ๊ตฌ๋ถํด์ ์คํํ ์ ์๋๋ก ํ๋ ์ด์
Spring WebFlux ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ์์ ์ฐ๋ ๋๋ก ๋๋์ ์์ฒญ์ Non-Blocking ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ์
์ด ๊ตฌ์กฐ๋ ์ฐ๋ ๋๊ฐ ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ ์์ ์ ๊ฒฝ์ฐ, ์๋ต ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ !
โ Scheduler๋ฅผ ํตํด ๋ณ๋์ ์ฐ๋ ๋๋ฅผ ์์ฑํ ํ, ๋ณต์กํ ๊ณ์ฐ์ ์ํํ๋๋ก ํจ
Scheduler ์ง์ ์ฐ๋ ๋ ์ ํ ์ฐธ๊ณ
Which operator do I need? ์ฐธ๊ณ
โ ์๋ก์ด Sequence๋ฅผ ์์ฑ(Creating)ํ๊ณ ์ ํ ๊ฒฝ์ฐ
just()
โญ fromStream()
โ Java์ Stream์ ์
๋ ฅ์ผ๋ก ์ ๋ฌ ๋ฐ์ emitํ๋ Operator
โญ fromIterable()
โ Java์Iterable์ ์
๋ ฅ์ผ๋ก ์ ๋ฌ ๋ฐ์ emitํ๋ Operator
( List, Map, Set ๋ฑ์ ์ปฌ๋ ์
์ fromIterable()์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๊ฐ๋ฅ )
fromArray()
range()
interval()
empty()
never()
defer()
using()
generate()
โญ create()
โ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก Signal ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ Operator
โ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก emitํ ์ ์๋ Operator
โ๏ธ Signal
โ Publisher๊ฐ ๋ฐ์์ํค๋ ์ด๋ฒคํธ
โก ๊ธฐ์กด Sequence์์ ๋ณํ ์์ (Transforming)์ด ํ์ํ ๊ฒฝ์ฐ
โญ map()
โ ์์์ ๊ฐ๊ณต์ฒ๋ฆฌ ํด์ค
โญ flatMap()
โ flatMap() ๋ด๋ถ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ง๋ค ํ๋์ ์๋ก์ด Sequence๊ฐ ์์ฑ๋จ
( ๋ค์ด์ค๋ Sequence๋ ํ๋์ธ๋ฐ, ๋ด๋ถ์์ ์๋๋๋ Sequence๋ ์ฌ๋ฌ๊ฐ )
โ flatMap() ๋ด๋ถ์์ ์ ์ํ๋ Sequence = Inner Sequece
โ But, ๊ฐ ์ฐ๋ ๋์ ์์
์ ์ฒ๋ฆฌ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ ( ์ถ๋ ฅ ๋๋ค )
โญ concat()
โ ์
๋ ฅ์ผ๋ก ์ ๋ฌํ๋ Publisher์ Sequence๋ฅผ ํ๋๋ก ์ด์ด๋ถ์ฌ์ ์ฐจ๋ก๋๋ก ๋ฐ์ดํฐ๋ฅผ emitํจ
( ์์๋๋ก emit๋จ )
collectList()
collectMap()
merge()
โญ zip()
โ ์
๋ ฅ์ผ๋ก ์ ๋ฌ๋๋ ์ฌ๋ฌ ๊ฐ์ Publisher Sequence์์ emit๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋ Operator
โ ๊ฐ๊ฐ์ Sequence์์ emit๋๋ ๋ฐ์ดํฐ ์ค ๊ฐ์ ์ฐจ๋ก(index)์ ๋ฐ์ดํฐ๋ค์ด ๊ฒฐํฉ
( ๋ Sequence์ emit ์์ ์ด ๋งค๋ฒ ๋ค๋ฅด๋๋ผ๋ emit ์์ ์ด ๋ฆ์ ๋ฐ์ดํฐ๊ฐ emit๋ ๋๊น์ง ๋๊ธฐ ํ๋ค๊ฐ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ๊ฒฐํฉ )
๐ก ์ฌ๊ธฐ์์ '๊ฒฐํฉ'
โ ๊ฐ Publisher๊ฐ emitํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ ๋ฌ ๋ฐ์์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ํ์ Downstream์ผ๋ก ์ ๋ฌํ๋ค๋ ์๋ฏธ
then()
switchIfEmpty()
โ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ด๋ถ์์ ์ Sequence๋ฅผ ๋ง๋ค์ด์ ๊ทธ Sequence์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ ์ ์๊ณ ,
๋ค์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํด
and()
when()
โข Sequence ๋ด๋ถ์ ๋์์ ํ์ธ(Peeking)ํ๊ณ ์ ํ ๊ฒฝ์ฐ
doOnSubscribe
โญ doOnNext()
โ ๋ฐ์ดํฐ emit ์ ํธ๋ฆฌ๊ฑฐ ๋์ด ๋ถ์ ํจ๊ณผ(side-effect)๋ฅผ ์ถ๊ฐํ ์ ์๋ Operator
โ ๋ฆฌํด๊ฐ์ด ์์
โ ์ฃผ๋ก ๋ก๊น
(๋ก๊ทธ๋ฅผ ๊ธฐ๋ก ๋๋ ์ถ๋ ฅํ๋ ์์
)์ ์ฌ์ฉํ์ง๋ง,
๋ฐ์ดํฐ๋ฅผ emitํ๋ฉด์ ํ์ํ ์ถ๊ฐ ์์
์ด ์๋ค๋ฉด doOnNext()์์ ์ฒ๋ฆฌ
โ๏ธ ๋ถ์ ํจ๊ณผ (side-effect)
โ ์ด๋ค ๋์์ ์คํํ๋ ๋ฆฌํด ๊ฐ์ด ์๋ ๊ฒ
doOnError()
doOnCancel()
doFirst()
doOnRequest()
doOnTerminate()
doAfterTerminate()
doOnEach()
doFinally()
โญ log()
โ Publisher์์ ๋ฐ์ํ๋ Signal ์ด๋ฒคํธ ๋ง๋ค ๋ก๊ทธ๋ก ์ถ๋ ฅํด์ฃผ๋ ์ญํ
โ ์ํ๋ ๋งํผ ์ถ๊ฐ ๊ฐ๋ฅ
โฃ Sequence์์ ๋ฐ์ดํฐ ํํฐ๋ง(Filtering)์ด ํ์ํ ๊ฒฝ์ฐ
โญ filter()
โ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ์กฐ๊ฑด์ ๋ง์ถฐ์ ํํฐ๋ง
take()
โ ํ๋ผ๋ฏธํฐ์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ์ ์๊ฐ ๋ค์ด๊ฐ
ignoreElements()
distinct()
โญ take()
next()
skip()
sample()
single()
โค ์๋ฌ๋ฅผ ์ฒ๋ฆฌ(Handling errors)ํ๊ณ ์ ํ ๊ฒฝ์ฐ
โญ error()
โ Reactor Sequence ์์์ ์๋์ ์ผ๋ก ์์ธ๋ฅผ ๋์ ธ์ onError Signal ์ด๋ฒคํธ ๋ฐ์์ํค๋๋ฐ ์ฌ์ฉ
( throw ์ ๊ฐ์ )
โญ timeout()
โ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์๊ฐ๋์ emit๋๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด onError Signal ์ด๋ฒคํธ ๋ฐ์ ์ํด
โ retry()
Operator์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
( ์ผ์ ํ ์๊ฐ ์์ ์์ค๋ฉด ๋ค์ ์ฌ์๋ ํด๋ด๋ผ ! )
onErrorReturn()
onErrorResume()
onErrorMap()
doFinally()
โญ retry()
โ Sequence ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ซ์๋งํผ ์ฌ๊ตฌ๋
ํด์ Sequence๋ฅผ ๋ค์ ์์
โ ํ๋ผ๋ฏธํฐ์ ์ฌ์๋ํ ์ ์๋ ํ์๊ฐ ๋ค์ด๊ฐ
โ timeout()
Operator์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
์ฌ์ค ๋ญ๊ฐ Stream์ด๋ ๋น์ทํด์ ์ดํด๋ ๊ทธ๋๋ ์ฝ๊ธด ํ๋๋ฐ
Mono์ Flux๋ฅผ ๊ทธ๋์ ์ธ์ ์ด๋ป๊ฒ ์จ์ผ ํ๋์ง๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค ! ใ
ใ
๊ทธ๋ฆฌ๊ณ Operator ๋๋ฌด ๋ง์..
๋์ค์ ๋ง์ ๊ณต๋ถํด์ผ๊ฒ ๋ท
์ ๋ณด๊ณ ๊ฐ๋๋ค. ๋ฒค์น๋งํนํด์ ์ ๋ ์ ์ ๋ฆฌํด๋ด์ผ๊ฒ ์ด์. ๊ฐ์ด ํ์ดํ ํด์ฌ~!