[Programming] Reactive (๋ฆฌ์กํฐ๋ธ)
์น ์๋น์ค์์ ํํ ๋ฐ์ํ๋ ์ผ์ด ์์ต๋๋ค. ํ๋์ API ๊ฒฐ๊ณผ ๋ฟ๋ง ์๋๋ผ n๊ฐ์ API ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์๋ณด๊ณ ์ถ์ต๋๋ค. ํํ ์ฐ๋ฆฌ๊ฐ SPA๋ฅผ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ค๋ณด๋ฉด ์ฌ๋ฌ API๋ฅผ ํธ์ถํ๋ ์ผ์ด ์๋๋ฐ, ์ด์ ๋น์ทํ ์ด์ผ๊ธฐ์ ๋๋ค.
Reactive Programming์ด ๋์ค๊ธฐ ์ด์ , ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๋ฅ ์์ญ๋ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ GB ์ ๋์ ๋ฐ์ดํฐ, ๋ช ์ด ๊ฑธ๋ฆฌ๋ ์๋ต ์๊ฐ, ์ ์ง๋ณด์๋ ๋ช ์๊ฐ ๊ฑธ๋ฆฌ๋ ์ ๋๊ฐ ๋น์ฐํ๋ค. ๋ผ๊ณ ๋ณด๊ณ ์ด์์ ํด์์ต๋๋ค. ํ์ง๋ง ์ง๊ธ์ ์ด๋จ๊น์? ๋ค์ํ ์๋น์ค๊ฐ ์๊ณ , ํนํ ํ๊ตญ์์๋ ์ธํฐ๋ท ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ์ ์ด๋ผ๋ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ๋ฅ ๋ซ์๋ฒ๋ฆฌ๋ ๊ฒ ๊ด์ต์ด ๋์ด๋ฒ๋ ธ์ฃ .
์ด๋ ๊ฒ ๋ณํ๊ฐ ๋ ์ด์ ๋ ๋ฌด์์ผ๊น์?
- ๋์ด๋ ๋ฐ์ดํฐ
์๊ฐ์ด ๊ฐ์๋ก ๋ฐ์ดํฐ๋์ ๋์ด๋๋๋ฐ, ๊ทธ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ฐ๋ผ๊ฐ์ง ๋ชปํจ. - ์ฌ์ฉ ํจํด์ ๋ณํ
์ฌ์ฉ์๋ 1๋ ๋ด๋ด ์ธ์ ์ด๋์๋ ms ๋จ์์ ์๋ต ์๊ฐ์ ์๊ตฌํจ.
์๊ตฌ ์ฌํญ์ด ๋์ด๋๊ณ ์ฌ์ฉ์๊ฐ ๋์ด๋๋ฉด ๊ทธ๋งํผ ๋ฐ์ดํฐ๋ ๋์ด๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ์ ๋ฐ๋ผ์ ์ฑ๋ฅ๋ ๋ณํ๊ฐ ์๊ธฐ๋๋ฐ, ์ฌ์ฉ์๋ ๊ทธ๋ก ์ธํ ์ฑ๋ฅ ๋ณํ์ ๋๊ฒ ๋ฏผ๊ฐํ๋ค๋ ๊ฒ์ด์ฃ . ๋ฐ๋ผ์ Reactive Programming์ ์ด๋ฌํ ์ฑ๋ฅ ๋ณํ์ ๋์ฒํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
Reactive
์ด๋ฐ ์๋ฌธ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ผ ๋๋์ฒด Reactive๊ฐ ๋ญ์ผ? ์ ๊ฐ ์๊ฐํ๋ Reactive ๋, ๋ง์ฐ์ค ์ด๋ฒคํธ๋ Network I/O ๋ฑ์ ์ ๋ ฅ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผฐ์ ๋ ์ฆ๊ฐ ๋ฐ์ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒ์ Reactive๋ผ ํฉ๋๋ค.
์ ์ด๊ฒ๋ง ๊ฐ์ง๊ณ ๋ ์ค๋ช ์ด ๋ถ์กฑํ๋ฐ? ๊ทธ๋ฌ๋ฉด ์ด๋ฐ ๊ฑด ์ด๋จ๊น์. ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ณ ์ ํ ๋ ๊ทธ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Enter๋ฅผ ๋๋ฌ์ผ ํฉ๋๋ค. ํ์ง๋ง Reactive๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ์ด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด์ฃ . ์ด๊ฒ์ ์ฐ๋ฆฌ๋ Reactive๋ผ ํฉ๋๋ค.
Reactive Manifesto
Reactive Manifesto๋ "Reactive"๋ผ๋ ์ฉ์ด๋ฅผ ์ ์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ ์ธ๋ฌธ์ผ๋ก ์ด ์ ์ธ๋ฌธ์๋ Reactive์ 4๊ฐ์ง ์์ฑ์ ์ด์ผ๊ธฐ ํฉ๋๋ค.
- ๋ฐ์์ฑ (Responsive)
Reactive ์์คํ ์ ์ผ์ ํ๊ณ ์์ ๊ฐ๋ฅํ ๋ฐ์ ์๊ฐ์ ์ ๊ณตํด์ผ ํจ. - ํ๋ณต์ฑ (Resilient)
์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์์คํ ์ ์ด์์ ์ง์๋์ด์ผ ํจ. - ํ๋ ฅ์ฑ (Elastic)
๋์ฉ๋ ํธ๋ํฝ๊ณผ ๊ฐ์ ๊ฑฐ๋ํ ๋ถํ ๋ด์์๋ ๋ฒํธ ์ ์๋๋ก ์ปดํฌ๋ํธ ์์ ์๋ฅผ ๋์ ์ผ๋ก ํ์ฅํ ์ ์์ด์ผ ํจ. - ๋ฉ์์ง ์ฃผ๋ (message-driven)
ํ๋ณต์ฑ๊ณผ ํ๋ ฅ์ฑ ์์น์ ์งํค๊ธฐ ์ํด์ ๋์จํ ๊ฒฐํฉ, ๊ณ ๋ฆฝ, ์์น ํฌ๋ช ์ฑ ๋ฑ์ ์ง์ํ๋๋ก ์ปดํฌ๋ํธ ๊ฐ ๊ฒฝ๊ณ๊ฐ ๋ช ํํด์ผ ํจ.
(๋น๋๊ธฐ ํ๋กํ ์ฝ์ ์ด์ฉํ ๋ฉ์์ง ๊ธฐ๋ฐ์ ํต์ ์ผ๋ก ๋์จํ ๊ฒฐํฉ์ ์์คํ ์ํคํ ์ฒ๋ฅผ ๊ถ์ฅ)
์์ธํ ๋ณด๋ฉด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๊ฐ ๊ฐ์ถฐ์ผ ํ ์์น์ด๊ธฐ๋ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์คํ ์ ์ข ๋ ๋ฆฌ์กํฐ๋ธํ๊ฒ ๊ฐ๋ฐํ๊ณ ์ ํ๋ค๋ฉด ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ์ด ๋์จํด์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ๊ทธ๋์ผ๋ง ํ ์ปดํฌ๋ํธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊น์ง ์ ํ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์ ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ์์คํ ์ ์ด๋์์ ์ฃผ๋ก ๋ง์ด ์ฌ์ฉ๋ ๊น์?
- ํด๋ผ์ฐ๋, ์ปจํ ์ด๋
- IoT
ํด๋ผ์ฐ๋์ ์ปจํ ์ด๋๋ฅผ ํตํด ๊ฒฝ๋ํ ๋ ์์คํ ์ ๋ฐฐํฌํ๋ ๋ฐ ์ฉ์ดํ๋ฐ, ์ด๋ ๊ฒ ๊ฒฝ๋ํํ๊ณ ๋ถ์ฐ๋ ์์คํ ์ ํ๋์ ์๋น์ค๋ก ๋ง๋ค๊ธฐ ์ํ์ฌ Reactive๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
IoT์ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ ์ฌ๋ฌ ์ผ์, ํ๋์จ์ด ๋ฑ์ ์ฐ๊ฒฐํ ์ํ๋ก ๋ชจ๋ํฐ๋ง ํ๋ค๊ฑฐ๋ ์ ์ด๋ฅผ ํ๋ค๊ณ ํ์์ ๋ ์ด์ ์ฆ๊ฐ ๋ฐ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํ๋ ์๊ตฌ ์ฌํญ์ ๊ตฌํํ๊ธฐ ์ํด Reactive๋ฅผ ์ฌ์ฉํ๋ ์์๊ฐ ๋ ์ ์์ต๋๋ค.
Reactive System
Reactive๋ฅผ ๋ชจํ๋ก ํ ๊ฐ๋ ์๋ Reactive Programming๊ณผ Reactive System์ด ์์ต๋๋ค. ์ฌ์ค์ Reactive Programming์ Reactive System์ ํ์์ ์ํ๋ ๊ฐ๋ ์ ๋๋ค.
์ฐ๋ฆฌ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ๊ณผ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์์คํ ๋ ๋ฒจ์์ ์ํคํ ํธ์ DevOps๋ฅผ ์ํ ์์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ํํ ์ฐ๋ฆฌ๊ฐ ๋ฐฐํฌ ์๋ํ๋ ํ ์คํธ ์๋ํ๋ฅผ ์ํด ์ฌ์ฉํ๋ CI/CD ๋ด์ง ํ์ ๊ด๋ฆฌ ์์คํ ์ด ์ด์ ํด๋นํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ด๋ฌํ ๊ฒ๋ค๋ Reactive System์ผ๋ก ๊ตฌ์ถํ๋ค๋ฉด ๋ณด๋ค ์ ์ฐํ๊ณ , ๋์จํ ๊ฒฐํฉ์ ๊ฐ์ง๋ฉด์ ํ์ฅ์ฑ ์๋ ์์คํ ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ์์คํ ์ ์ฑํํ ๋ํ์ ์ธ ์ํคํ ์ฒ์๋ Micro Service Architecture๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ปค๋จธ์ค ์๋น์ค๊ฐ ์๋ค๋ฉด ์ปค๋จธ์ค๋ ์ฌ์ฉ์๊ฐ ๋ฌผ๊ฑด์ ์ฃผ๋ฌธํ๊ณ , ๊ฒฐ์ ํ์ฌ ๋ฐฐ์ก๊น์งํด์ฃผ๋ ์๋น์ค์ธ๋ฐ, ๋ง์ฝ ๋์จํ ๊ฒฐํฉ์์ด ๊ฐ๋ ฅํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ ์๋น์ค๋ผ๋ฉด ์๋ก์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ ์ปดํฌ๋ํธ์ ์์กดํ๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด์ ํ๋์ ์ปดํฌ๋ํธ๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ค๋จ์ด ๋๊ณ , ๊ฒฐ๊ตญ ์๋น์ค๋ ์ฌ์ฉ ๋ถ๋ฅ์๊น์ง ์ด๋ฅด๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง ์ ํ๋ฉด์ฒ๋ผ ์๋ก๊ฐ ๋ ๋ฆฝ์ด ๋์ด ์๊ณ , ์ด๋ค์ ํต์ ํ๋๋ฐ ์ง์ ์ ์ธ ๊ฒฐํฉ์ด ์๋ ๊ฐ์ ์ ์ธ ๊ฒฐํฉ์ ์ ๊ณตํจ์ผ๋ก์จ ํ๋์ ์ปดํฌ๋ํธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋คํ๋๋ผ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๊ธฐ ๋๋ฌธ์ ์๋น์ค๊ฐ ์ฌ์ฉ ๋ถ๋ฅ๊น์ง๋ ๊ฐ์ง ์๋ ๊ฒ์ ๋๋ค.
Reactive Programming
๊ทธ๋ ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์๋ ๋ฌด์์ด ์๊ตฌ๋ ๊น์? ์์คํ ์์๋ ๋์จํ ๊ฒฐํฉ, ๋ฉ์์ง ์ฃผ๋์ ๊ฐ๋ฐ ๋ฑ์ด ํ์ํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์คํฌ๋ฅผ ๋น๋๊ธฐ๋ก ์คํํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ง์ฝ, ๋๊ธฐ๋ก ์คํํ๋ค๋ฉด ์ด๋จ๊น์? ๋ง์ฐ์ค ์ด๋ฒคํธ๋ฅผ ๋๊ธฐํ๊ณ ์๋ ํ์คํฌ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ณ ๊ทธ๊ฒ์ ์ฒ๋ฆฌํ๋ ๋์์๋ ์๋ฌด๋ฐ ์ผ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐ๊น์ง ๋ชจ๋ ์๊ฐ์ด ์๋ชจํ๋ฏ๋ก Reactiveํ ํ๋ก๊ทธ๋จ์ด ๋ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ ๋ ฅ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์์ผฐ์ ๋ ์ ๋ ฅ์ ์งํํ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ณด์ฌ์ค ์ ์๋๋ก ์ค๋ ๋๋ฅผ ์ด์ฉํ์ฌ ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌํจ์ผ๋ก์จ Reactiveํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Reactive Programming์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ๊ฐ ์๊ตฌ๋ฉ๋๋ค.
ํ์ง๋ง ์๋ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ชจ๋ ์์ ์ ๋น๋๊ธฐ๋ก ๊ตฌํํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ง์ฝ ๋ฆฌ์กํฐ๋ธํ ์ํคํ ์ฒ๋ก ๋์ด๊ฐ๊ธฐ ์ํ ์์ฐ์ ์ธ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค๋ฉด Strangler Pattern์ ์ด์ฉํด๋ณผ ์๋ ์์ต๋๋ค.
๋ง์น๋ฉฐ..
์ฌ์ค ์ด ๊ธ์ ์ ๊ธฐ ์ด์ ์ RxJava๋ผ๋ ๊ธ์ ๋ํด์ ํฌ์คํ ์ ํ์์ต๋๋ค. ๊ทธ ๊ธ์ ๋ค์ ์ฝ์ด๋ณด๋ฉด์ ๋ฌด์ธ๊ฐ Reactive Programming์ ๋ํ ์ค๋ช ์ด ์์ด ์์ RxJava์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ ๊ฒ ๊ฐ์ Reactive๊ฐ ์ด๋ค ๊ฒ์ธ์ง ์ข ๋ ์์ธํ๊ฒ ์ด์ผ๊ธฐ ํ๊ณ , ์๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ์ฌ ์ ๊ฒ ๋์์ต๋๋ค.
Reactive๋ฅผ ์ฒ์ ์ ํ์๋ ๋ถ๋ค์ธ๋ฐ, MSA๋ฅผ ํ๊ณ ๊ณ์๋ ๋ถ๋ค์ด๋ผ๋ฉด MSA๋ก ์ด์ํ๊ธฐ ์ํด Reactive๊ฐ ํ์์ ์ผ๋ก ์์ด์ผ ํ๋ค๋ผ๋ ๊ฒ์ ์ด๋ ์ ๋ ๊ณต๊ฐํ์ จ์ ๊ฒ์ด๋ผ๊ณ ๋ด ๋๋ค. ๋ฉ์์ง ๊ธฐ๋ฐ๊ณผ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ๋ํด ์ข ๋ ์๊ณ ์ถ์ผ์ ๋ถ๋ค์ด ๊ณ์ ๋ค๋ฉด ์๋์ ๊ธ์ ์ฐธ๊ณ ํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ RxJava๋ฅผ ์ด์ฉํ์ฌ ์๋๋ก์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ํ์ ๋ ์ฒ์ Reactive๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ๋น์์๋ Reactive๊ฐ ํด๋ผ์ด์ธํธ์์๋ง ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ์๋๋ฐ, ์ด๋ฒ์ Reactive ๊ธ์ ์ ๊ฒ ๋๋ฉด์ ํ์ฌ ํ์ ์์ Python์ ๊ฐ์ง๊ณ MSA ๊ธฐ๋ฐ์ ์๋น์ค๋ก ์ ํํ ์ํคํ ์ฒ ๋ํ Reactive์ ๊ฐ๋ ์ด ๋ค์ด๊ฐ ์์์์ ๋ค์ ํ ๋ฒ ํ์ธํ ์ ์์์ต๋๋ค.