Spring/Spring WebFlux
Sequence ๋ณํ Operatorโณ๏ธ mapupstream์์ emit๋ ๋ฐ์ดํฐ๋ฅผ mapper function์ ์ฌ์ฉํด ๋ณํํ ํ, downstream์ผ๋ก emitmap() operator ๋ด๋ถ์์ ์๋ฌ ๋ฐ์ ์ sequence๊ฐ ์ข
๋ฃ๋์ง ์๊ณ ๊ณ์ ์งํ๋๋๋ก ํ๋ ๊ธฐ๋ฅ ์ง์ Mono mono = Mono.just("Reactor") .map(String::toUpperCase);mono.subscribe(System.out::println); // ์ถ๋ ฅ: REACTOR โณ๏ธ flatMapupstream์์ emit๋ ๋ฐ์ดํฐ๊ฐ Inner Sequence์์ ํํํ ์์
์ ๊ฑฐ์น๋ฉด์ ํ๋์ Sequence๋ก ๋ณํฉ๋์ด downstream์ผ๋ก emitpublic class Example { public..
Spring/Spring WebFlux
Spring WebFlux ๊ฐ์Spring 5.0๋ถํฐ ์ง์ํ๋ ๋ฆฌ์กํฐ๋ธ ์น ํ๋ ์์ํฌ๋ก, ์ ์ ์์ ์ค๋ ๋๋ก ๋๋์ ์์ฒญ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋น๋๊ธฐ Non-Blocking I/O ๋ฐฉ์์ ์ฌ์ฉํ๋ค. Spring WebFlux ๊ธฐ์ ์คํ โณ๏ธ Spring MVC์ Spring WebFlux ๊ธฐ์ ์คํ ๋น๊ต ๐ท ์๋ฒSpring MVC์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ํ๋ ์์ํฌApache Tomcat๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์์ Blocking I/O ๋ฐฉ์์ผ๋ก ๋์Spring WebFluxNon-Blocking I/O ๋ฐฉ์์ผ๋ก ๋์ํ๋ Netty ๋ฑ์ ์๋ฒ ์์ง์์ ๋์ ๐ท ์๋ฒ APISpring MVC์๋ธ๋ฆฟ API ์ฌ์ฉSpring WebFlux Jetty๋ Undertow ๊ฐ์ ์๋ฒ ์์ง์์ ์ง์ํ๋ ๋ฆฌ์กํฐ๋ธ ์ค..
Spring/Spring WebFlux
Operator๋ ?Reactive Stream์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ณํํ๋ ์ญํ ์ ํ๋ ๋ฉ์๋ ๐ท ํน์ง ๋น๋๊ธฐ ์ฒ๋ฆฌ์กฐํฉ ๊ฐ๋ฅ์ฑ์ง์ฐ ์คํ (๊ตฌ๋
์ด ํธ์ถ๋์ด์ผ ์ฒ๋ฆฌ)๋ฐ์ดํฐ ํ๋ฆ์ ๋จ๊ณ์ ์ผ๋ก ์ฒ๋ฆฌ Sequence ์์ฑ์ ์ํ Operatorโณ๏ธ justOrEmptyjust()์ ํ์ฅ operator๋ก์, emitํ ๋ฐ์ดํฐ๊ฐ null์ธ ๊ฒฝ์ฐ NullPooinException์ด ๋ฐ์ํ์ง ์๊ณ , onComplete signal์ ์ ์กjust()๋ Reactor์์ ๊ฐ๋จํ๊ณ ์ ์ ์ธ ๋ฐ์ดํฐ๋ฅผ Reactive Stream์ผ๋ก ๋ณํํ ๋ ์ ์ฉ- Hot Publisher์ด๊ธฐ ๋๋ฌธ์ Subscriber์ ๊ตฌ๋
์ฌ๋ถ์๋ ์๊ด์์ด ๋ฐ์ดํฐ๋ฅผ emit.- ๊ตฌ๋
์ด ๋ฐ์ํ๋ฉด emit๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ replayํด์ Sub..
Spring/Spring WebFlux
Sinks ๋ ?Reactor์์ ์ ๊ณตํ๋ Sinks๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ฐํํ ์ ์๋ ์ ํธ๋ฆฌํฐ๋ก, Publisher ๋ฐ Subscriber ์ญํ ์ ์ง์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก generate() operator๋ create() operator๋ ์ฑ๊ธ์ค๋ ๋ ๊ธฐ๋ฐ์์ signal์ ์ ์กํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, Sinks๋ ๋ฉํฐ์ค๋ ๋ ๋ฐฉ์์ผ๋ก signal์ ์ ์กํด๋ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ์น ์์ ๋์์ผ๋ก ์ด์ด์ง๋ ๊ฒ์ ๋ฐฉ์งํด์ค๋ค. ๐ก์ค๋ ๋ ์์ ์ฑ์ด๋ ? ํจ์๋ ๋ณ์ ๊ฐ์ ๊ณต์ ์์์ ๋์ ์ ๊ทผํ ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ์๋ฏธํ๋ค.๋์ ์ ๊ทผ์ ๊ฐ์งํ๊ณ , ๋์ ์ ๊ทผํ๋ ์ค๋ ๋ ์ค ํ๋๊ฐ ๋น ๋ฅด๊ฒ ์คํจํจ์ผ๋ก์จ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๋ค. Sinks ์ข
๋ฅ ๋ฐ ํน์ง โณ๏ธ Sink..
Spring/Spring WebFlux
Reactor๋ ? ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Spring Framework ํ์ ์ํด ๊ฐ๋ฐ๋ ๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ์ฆ์ ๊ตฌํ์ฒด๋ก์ Spring WebFlux ๊ธฐ๋ฐ์ ๋ฆฌ์กํฐ๋ธ ์ดํ๋ฆฌ์ผ์ด์
์ ์ ์ํ๊ธฐ ์ํ ํต์ฌ ์ญํ ์ ๋ด๋นํ๋ค.โณ๏ธ Reactor์ ํน์ง Reactive StreamsNon-BlockingJava's Functional APIFlux[N]Mono[0|1]MicroservicesBackpressure Mono ๊ธฐ๋ณธ ์์ public class Example { public static void main(String[] args) { Mono .empty() .subscribe( none -> System.out.println(..
Spring/Spring WebFlux
1. ํจ์ํ ์ธํฐํ์ด์ค๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ์๋ ์ ์๋์ด์๋ ์ธํฐํ์ด์ค (Java 8๋ถํฐ ์ง์ ๊ฐ๋ฅ)ํจ์๋ฅผ ๊ฐ์ผ๋ก ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ํจ์๋ฅผ ํธ์ถํ ๋ ํจ์ ์์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๊ฐ๋ฅpublic class Example { public static void main(String[] args){ List cryptoCurrencies = SampleData.cryptoCurrencies; Collections.sort(cryptoCurrencies, new Comparator() { @Override public int compare(CryptoCurrency cc1, CryptoCurrency cc2) { r..
Spring/Spring WebFlux
1. Blocking I/Oํ๋์ ์ค๋ ๋๊ฐ I/O์ ์ํด์ ์ฐจ๋จ๋์ด ๋๊ธฐํ๋ ๊ฒ ๋ฉํฐ์ค๋ ๋ฉ ๊ธฐ๋ฒ์ผ๋ก ์ถ๊ฐ ์ค๋ ๋๋ฅผ ํ ๋นํ์ฌ ์ฐจ๋จ๋ ๊ทธ ์๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์๋ ์์ผ๋, ์ฌ๋ฌ ๋ฌธ์ ๋ฐ์ ์ปจํ
์คํธ ์ค์์นญ์ผ๋ก ์ธํ ์ค๋ ๋ ์ ํ ๋น์ฉ๊ณผ๋คํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ผ๋ก ์ค๋ฒํค๋ ๋ฐ์ ๊ฐ๋ฅ ์๋ก์ด ์ค๋ ๋๊ฐ ์คํ๋๋ฉด JVM์์๋ ํด๋น ์ค๋ ๋๋ฅผ ์ํ ์คํ ์์ญ์ ์ผ๋ถ ํ ๋นํ๋ฉฐ, ์๋ก์ด ์ค๋ ๋ ์ ๋ณด๋ ์คํ ์์ญ์ ๊ฐ๋ณ ํ๋ ์ ํํ๋ก ์ ์ฅ๋จ ๐ ๊ฐ๊ฐ์ ์ค๋ ๋ ๋ด๋ถ์์ ๋ ๋ค๋ฅธ ์์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ๋ก ํ ๋นํ๊ฒ ๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ๋นํ๊ธฐ ํ๋ค ์ ๋๋ก ๋์ด๋จ์ค๋ ๋ ํ์์ ์๋ต์ง์ฐ ๋ฐ์์ผ์ ๊ฐ์์ ์ค๋ ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด์ ํ์ ์ ์ฅํด ๋๊ณ ์ฌ์ฉ์์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํ์์ ๊บผ๋ด ์ฌ์ฉ ๊ฐ๋ฅํ๋, ์ ํ ์ค๋ ๋๊ฐ ์๋ค๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ..
Spring/Spring WebFlux
1. ๋ฆฌ์กํฐ๋ธ ์คํธ๋ฆผ์ฆ๋ ? ๋ฐ์ดํฐ ์คํธ๋ฆผ์ Non-Blocking์ด๋ฉด์ ๋น๋๊ธฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฆฌ์กํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ค ์ฌ์ โณ๏ธ publisher์ subscriber ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ ๋์ ๊ณผ์ subscriber๋ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ ๊ตฌ๋
(subscribe)publisher๋ ๋ฐ์ดํฐ ํต์งํ ์ค๋น๋์์์ subscriber์ ์๋ฆผ (onSubscribe)publisher๊ฐ ๋ฐ์ดํฐ๋ฅผ ํต์งํ ์ค๋น๊ฐ ๋์๋ค๋ ์๋ฆผ์ ๋ฐ์ subscriber๋ ์ ๋ฌ๋ฐ๊ธฐ๋ฅผ ์ํ๋ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ publisher์๊ฒ ์์ฒญ (Subscription.request)publisher๋ subscriber๋ก๋ถํฐ ์์ฒญ๋ฐ์ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํต์งํจ (onNext)publisher์ subscriber ๊ฐ์ ๋ฐ์ดํฐ ํต์ง, ๋ฐ์ด..