20,000+ RPS ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ค์ด๋ฒ ๋ฉด์ ๊ด์ด ์๋ ค์ฃผ๋ Reactive ํ๋ก๊ทธ๋๋ฐ
Hong
ํธ๋ํฝ์ด ์ฆ๊ฐํ ์๋ก ์๋ต์ด ๋๋ ค์ง๊ณ , ์ค๋ ๋ ํ์ด ๋น ๋ฅด๊ฒ ๊ณ ๊ฐ๋๋ฉฐ, ์ธ๋ถ API ํธ์ถ์ด ๋ง์์ง์๋ก ๋ณ๋ชฉ์ด ์ฌํด์ง๋ ํ๊ฒฝ์์ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์ถ์ ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฐ์์ ๋๋ค. ๋จ์ํ ์๋ฒ๋ฅผ ํ์ฅํ๋ ๋ฐฉ์์ด ์๋๋ผ, ๊ตฌ์กฐ ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ด์ ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ๋์ต๋๋ค. ์ด ๊ฐ์๋ฅผ ํตํด ๋จผ์ ์ ํต์ ์ธ Spring MVC์ Thread per Request ๋ชจ๋ธ์ด ์ด๋ค ํ๊ณ๋ฅผ ๊ฐ์ง๋์ง ์ดํดํ๊ฒ ๋ฉ๋๋ค. ์ CPU๋ ๋จ์ ์๋๋ฐ๋ ์ฒ๋ฆฌ๋์ด ์ฌ๋ผ๊ฐ์ง ์๋์ง, ๋ธ๋กํน I/O๊ฐ ์ค์ ๋ก ์ด๋ค ๋ฐฉ์์ผ๋ก ์์คํ ์์์ ์ ์ ํ๋์ง๋ฅผ ์ฝ๋ ๋ ๋ฒจ์์ ํ์ธํฉ๋๋ค. ๊ทธ ๋ค์์ผ๋ก Reactive Streams์ ๊ฐ๋ ๊ณผ ํ์ค ์คํ์ ๋ฐฐ์ฐ๊ณ , Reactor์ Mono์ Flux๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์ตํ๋๋ค. ๋จ์ํ ์ฌ์ฉ๋ฒ์ด ์๋๋ผ, ๋ฐ์ดํฐ ํ๋ฆ์ด ์ด๋ป๊ฒ ์์๋๊ณ , ์ด๋ป๊ฒ ์๋น๋๋ฉฐ, ์ฒ๋ฆฌ๋์ ์ด๋ป๊ฒ ์กฐ์ ๋๋์ง๊น์ง ์ค์ต์ ํตํด ์ฒด๋ํฉ๋๋ค. ํนํ Back Pressure๋ฅผ ํ์ฉํด OOM์ด๋ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๋ ์ค๊ณ ๋ฐฉ์๋ ์ง์ ๊ตฌํํด ๋ด ๋๋ค. ๋ํ Spring WebFlux์ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , Non-Blocking I/O๊ฐ ์ค์ ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ๋น๊ต ์ค์ต์ ์งํํฉ๋๋ค. MVC์ WebFlux๋ฅผ ๋๋ํ ๋๊ณ ๊ตฌ์กฐ์ ์ฐจ์ด๋ฅผ ํ์ธํ๋ฉฐ, ์ธ์ Reactive๋ฅผ ์ ํํด์ผ ํ๋์ง์ ๋ํ ํ๋จ ๊ธฐ์ค๋ ํจ๊ป ์ ๋ฆฌํฉ๋๋ค. ๋จ์ํ โ๋น๋๊ธฐ๋ฅผ ๋ฐฐ์ด๋คโ๋ ์์ค์์ ๋๋์ง ์์ต๋๋ค. ์ ์ ์ค๋ ๋๋ก ๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ, ์ธ๋ถ API ์์กด์ฑ์ด ๋์ ํ๊ฒฝ์์ ์์ ์ ์ธ ํ๋ฆ์ ์ ์งํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ณ ๋์์ฑ ํ๊ฒฝ์์ ์ฒ๋ฆฌ๋์ ํ๋ณดํ๋ ์ค๊ณ ๊ฐ๊ฐ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
์ ๋ฌธ
Java, Spring, Spring Boot
















![[์ด๊ธ] ์ฐข์ด๋จน์! ์ฝํ๋ฆฐ์ ๋ชจ๋ ๊ฒ๊ฐ์ ์ธ๋ค์ผ](https://cdn.inflearn.com/public/courses/332581/cover/05f06c6b-d021-4979-8b08-2aaa3a9367eb/332581-eng.png?w=420)
.png?w=420)




![[์ํ์น ์นดํ์นด ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก๊ทธ๋๋ฐ] ๊ฐ๋
๋ถํฐ ์ปจ์๋จธ, ํ๋ก๋์, ์ปค๋ฅํธ, ์คํธ๋ฆผ์ฆ๊น์ง!๊ฐ์ ์ธ๋ค์ผ](https://cdn.inflearn.com/public/courses/327041/cover/d1e15d56-83e2-464d-866d-09cd80bee4a2/327041-eng-original.png?w=420)
