Separtion of Concerns
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(SoC)
๊ด์ฌ์ฌ ๋ถ๋ฆฌ(Separation of Concerns, SoC)๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ณ๋ ๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌ์ํค๋ ๋์์ธ ํจํด์ผ๋ก, ์ด๋ฅผ ํตํด ๊ฐ ๋ถ๋ถ์ ๊ฐ๋ณ์ ์ธ ๊ด์ฌ์ฌ์ ์ง์คํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๊ด์ฌ์ฌ(Concerns)
ํ๋ก๊ทธ๋จ ๋ด์์ ํน์ ๊ธฐ๋ฅ์ด๋ ์ฑ ์์ ์ํํ๋ ๋ชจ๋, ํด๋์ค, ํจ์ ๋ฑ์ ์๋ฏธ ํ๋ค.
์ฆ, ์ํํธ์จ์ด์ ์์คํ ์ ๊ตฌ์ฑํ๋ ๋ค์ํ ์์๋ค์ ๊ฐ๊ฐ์ ๊ด์ฌ์ฌ๋ฅผ ๊ฐ์ง๊ณ ๋์ํ๋ฉฐ, ์๋ก ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ฅผ ๊ฐ์ง ์์๋ค์ ๋ถ๋ฆฌ๋์ด ์์ด์ผ ํ๋ค๋ ๊ฒ์ด ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ํต์ฌ ๊ฐ๋ ์ด๋ค.
์๋ก ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ค์ ๊ฐ์์ ๊ด์ฌ์ฌ์ ์ง์คํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ด์ฌ์ฌ๊ฐ ๋ญํ๋ ๊ด์ฌ์ด ์๋ค. "์๋น ๊ฐ ๋ญ์ผ?"
๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌ์ ์ฅ์
์ฝ๋ ๋ด์์ ๊ด์ฌ์ฌ๊ฐ ์๋ก ๋น์ทํ ๊ธฐ๋ฅ๋ค์ด ๋ฌถ์ฌ์์ผ๋ฉด ์ฝ๋๊ฐ ๋ ๋ช ํํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ๋ถ๋ถ๋ค์ ์ฝ๊ฒ ๊ต์ฒดํ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
๊ฐ๊ฐ์ ๋ชจ๋(๊ด์ฌ์ฌ)๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ ์คํธํ๊ณ ๊ฒ์ฆํ ์ ์์ด ํ ์คํธ๋ฅผ ์ํํ๊ธฐ ๋์ฑ ์ฉ์ด ํด์ง๋ค.
๋์์ธ ํจํด(Design Pattern)
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ ์ํ๋ ์๋ฃจ์
๋์์ธ ํจํด์ ๋ค์ํ ์ํฉ์์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ๋๋ ํ ํ๋ฆฟ์ด๋ค.
GoF(Gang of Four) Design Pattern GoF๋ผ๊ณ ๋ถ๋ฆฌ๋ Erich Gamma, Richard Helm, Ralph Johnson, John Vissides๊ฐ ์ฒ์์ผ๋ก ๋์์ธ ํจํด์ ๊ตฌ์ฒดํํ์๋ค. GoF์ ๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ณตํ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ด๋ค.
Architecture
์ํคํ ์ฒ(architecture)๋ผ๋ ๋จ์ด์ ์๋ ์๋ฏธ๋ ๊ฑด์ถ๋ฌผ์ ์ค๊ณ๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค. ์ด์ ์ ์ฌํ๊ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ด์ ์์๋ ์ํคํ ์ฒ๋ ์ํํธ์จ์ด(๊ฑด์ถ๋ฌผ)์ ์ค๊ณํ๊ณ ๊ตฌํํ๋๋ฐ ์์ด์, ์ ์ฒด ์์คํ ์ ๊ตฌ์กฐ ๋ฐ ์ํธ์์ฉ์ ๋ํ ์์น๋ค์ ์๋ฏธํ๋ค.
์ํํธ์จ์ด ์ ์ฒด ์์คํ ์ ๊ตฌ์กฐ
์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ค๋ ๊ฒ์ ๊นจ๋ํ ๋ฐฉ์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์๋ฉ ๊ฐ๊ตฌ๋ฅผ ๋ค์ฌ ๋๊ณ , ๊ฐ๊ฐ์ ๋ฌผ๊ฑด๋ค์ ์ ํด์ง ์์น์ ๋ณด๊ดํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ด์ฌ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ๋ฉด, ์์คํ ์ ์ดํดํ๊ธฐ ์ฌ์์ง๋ฉฐ ์ ์ง ๋ณด์์ฑ์ด ์ข์์ง๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ฉฐ, ์ํํธ์จ์ด์ ํ์ง๊ณผ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค.
์ํคํ
์ฒ ์ฐ์ตํด๋ณด๊ธฐ
ํด๋นํ๋ ์ํคํ ์ฒ์ ๊ตฌ์กฐ๋ฅผ ํ์ตํ๊ณ ์ดํดํ๊ธฐ
์ํคํ ์ฒ์ ์์น๋ค์ ์์งํ ํ ์ ์ฉํด๋ณด๊ธฐ
๊ณ ๋ฏผ์ด ๋๋ ๋ถ๋ถ์ ์์น์ ๋ง๊ฒ, ๋๋ ํฌ๊ฒ ๋ฒ์ด๋์ง ์๋ ๋ฒ์ ๋ด์์ ํํํ์ฌ ์ ์ฉํด๋ณด๊ธฐ
์ํคํ ์ฒ์ ๋์์ธ ํจํด์ ์ฐจ์ด
์ํคํ ์ฒ๋ ์ค๊ณ ๋จ๊ณ(์ฒญ์ฌ์ง)์, ๋์์ธ ํจํด์ ๊ตฌ์ถ ๋จ๊ณ์ ์๋ค.
๋ชจ๋ ์ํคํ ์ฒ๋ ๋์์ธ ํจํด์ด์ง๋ง, ๋์์ธ ํจํด์ ์ํคํ ์ฒ ์ผ ์ ์๋ค. ex) MVC, MVVM, Singleton
๊ฐ ๊ณ์ธต์ด ์๋ก ๋ค๋ฅธ ์ญํ ๊ณผ ์ฑ ์์ ๊ฐ์ง๋ฉฐ, ๊ฐ ๊ณ์ธต์ ๊ทธ ๊ณ์ธต ์์ ์๋์ ๊ณ์ธต๊ณผ๋ง ์ํตํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ฒ
์ฌ์ฉ์์๊ฒ ๊ฐ๊น์ด ๊ฒ๊ณผ ์ฌ์ฉ์์๊ฒ ๋จผ ๊ฒ์ผ๋ก ๊ตฌ๋ถํ๋ค.
๊ฐ ์์ญ์ ํ๋์ ์ญํ , ํ๋์ ๊ด์ฌ์ฌ๋ก ๊ฒฉ๋ฆฌ๋จ์ผ๋ก์จ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ฒ ๋๋ค.
Input, Process, Output 3๋จ๊ณ๋ก ๊ตฌ๋ถํ๊ธฐ
์ฝ๋๋ฅผ Input โ Process โ Output์ด๋ ๋จ๊ณ๋ก ์ ์ ํ๊ฒ ๊ตฌ๋ถ๋ง ํด๋ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๋๋ฐ ํฌ๊ฒ ๋์์ด ๋๋ค.
์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ(Input)์ ๋ฐ์ ์ฒ๋ฆฌ(Process)ํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ(Output)ํ๊ณ , ๋ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ(Input)์ ์์ฒญํ๋ ์ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
Input -> ํ๋ก๊ทธ๋จ ์์
Process -> ํ๋ก๊ทธ๋จ ์ด๊ธฐํ
Output -> ์ฌ์ฉ์์๊ฒ ์ด๊ธฐ UI ๋ณด์ฌ์ฃผ๊ธฐ
Input -> ์ฌ์ฉ์์ ์ ๋ ฅ
Process -> ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ ์ฒ๋ฆฌ
Output -> ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ณด์ฌ์ฃผ๊ธฐ
Input -> ์ฌ์ฉ์์ ๋๋ค๋ฅธ ์ ๋ ฅ
๋ฐ๋ณต
Front-End ๊ด์ ์์ Layered Architecture
ํ๋ก ํธ์๋๋ UI ๊ฐ๋ฐ๊ณผ ๋ง๋ฌผ๋ ค ์๊ธฐ ๋๋ฌธ์ UI์ ์ํ์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ์ ์ดํ๋ ๊ฒ์ด ์ค์
๋ฐ์ดํฐ๋ฅผ ์ ์ดํ๋ Layer (Model or Data)
๋ฐ์ดํฐ๋ฅผ ์ด๋ ์์ ์ ๋ถ๋ฌ์ค๊ณ ๊ฐ๊ณตํ ์ง ๊ฒฐ์
๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์์ญ
๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ์์ญ
UI(์ปดํฌ๋ํธ)๋ฅผ ์ ์ดํ๋ Layer (View)
UI๋ฅผ ์ ์ดํ๋ ๋ถ๋ถ, ๋ ๋๋ง์ ์ธ์ ์ด๋ป๊ฒ ์ํฌ์ง ๊ฒฐ์
์ปดํฌ๋ํธ์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ
Design์ ๋งค๋ชฐ๋์ง ๋ง์
๋จ์ํ ๋์์ธ์ ์ธ๊ด์ ์ง์คํ์ง ๋ง๊ณ , ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ ๋ง๊ฒ UI(์ปดํฌ๋ํธ)๋ฅผ ๊ฐ๋ฐํด์ผ ํ๋ค.
์ฆ ๋์์ธ์ด ๋์ผํ์ง๋ง ์ ์ ์๋๋ฆฌ์ค๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ปดํฌ๋ํธ์ด๋ค.
User Scenario๋?
์ฌ์ฉ๋ค์ด ์๋น์ค๋ฅผ ์ด๋ค์์ผ๋ก ์ด์ฉํ๋์ง, ์ฆ ์ฌ์ฉ์๋ค์ด ์ ํ์ ์ฌ์ฉํ๋ ๊ณผ์ ์ ์ค๋ช ํ ๊ฒ
Data์ View๋ฅผ ์ฐ๊ฒฐํ๋ Layer (Control)
Business Logic์ ๋ค๋ฃจ๋ ๋ถ๋ถ
๋น์ฆ๋์ค ๋ก์ง๋ค์ Hooks๋ก ๋ฐ๋ก ๋ถ๋ฆฌํด์ ์ปดํฌ๋ํธ์ ๊ด์ฌ์ฌ ์ฆ, UI์ Business Logic์ ๋ถ๋ฆฌํ์.
์ด๋ฐ ์ํคํ ์ฒ๋ฅผ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ๊ฐ๋ ๋ชจ๋ธ์ ์ทจํ๋ฉดMFA(Micro Front Architecture)๊ฐ ๋๋ค.
MFA(Micro Front Architecture)
๋ง์ดํฌ๋ก์๋น์ค(Microservice) ํจํด์ ๊ฐ๋ ์ ์น ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ์ฉํ ๊ฒ
ํฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์กฐ๊ฐ์ผ๋ก ๋ถํดํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ ์ ์๋๋ก ๊ตฌ์ฑํ ๊ฒ์ผ๋ก ๋ถํด๋ ์์ ์กฐ๊ฐ๋ค์ "๋ง์ดํฌ๋ก ํ๋ก ํธ์๋(Mircro Frontend)"๋ผ ๋ถ๋ฅธ๋ค.
๋ง์ดํฌ๋ก ์๋น์ค(Mircroservice)๋ ๋ฐ์ดํฐ ๋จ์๋ก ์๊ฒ ๋๋์ด ์์๋ฌธ์ ๋ฅผ ํ๋์ฉ ํด๊ฒฐํ๋๊ฒ์ด๋ค.
MFA ํน์ง
๋๊ท๋ชจ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋ ์ฉ์ดํ๋ค.
์ฌ๋ฌ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ฅผ ํ๋๋ก ํตํฉํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ์
๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ๋ฐฐํฌ, ๋ฐ ์คํ๋ ์ ์๋ค.
๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋๋ ๋ค๋ฅธ ๊ธฐ์ ์คํ๊ณผ ํ๋ ์์ํฌ๋ก ๊ฐ๋ฐ ๋ ์ ์๋ค.
Reactive Architecture
์ด๋ฒคํธ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ฒคํธ์ ๋ํ ๋ฐ์์ผ๋ก ์ผ์ด๋ ์ผ์ ์ง์ ํ๋ ๊ฒ
ํจ๊ณผ(Effect)์ ๊ทธ ํจ๊ณผ์ ๋ํ ์์ธ์ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ๋ณต์กํ๊ฒ ๊ผฌ์ธ ๋ถ๋ถ์ ํ ์ ์๋ค.
๋ฐ์ํ ์ํคํ
์ฒ ํน์ง
๋ฐ์ํ ์ํคํ ์ฒ๋ ์น์๋น์ค์ UI์ ์ ์ด์ธ๋ฆฐ๋ค. (์น ์๋น์ค๋ ์น ์์ฒญ ์๋ต์ ์ผ์ด๋ ์ผ์ ์ง์ , ์ด๋ฅผ ํ์ฉํ ๋ํ์ ์ธ ๋๊ตฌ๊ฐ RxJS)
์ฝ๋์ ๋ํ๋ ์์ฐจ์ ์ก์ ์ ์์๋ฅผ ๋ค์ง๋๋ค. (X๋ฅผ ํ๊ณ Y ํ๋ ๋์ , X๊ฐ ์ผ์ด๋๋ฉด ์ธ์ ๋ Y๋ฅผ ํ๋ค.)
์์ธ๊ณผ ํจ๊ณผ๊ฐ ๊ฒฐํฉํ ๊ฒ์ ๋ถ๋ฆฌํ๋ค.
์ฌ๋ฌ ๋จ๊ณ๋ฅผ ํ์ดํ๋ผ์ธ(ํจ์ํ ๋๊ตฌ)์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๋ฐ์ํ ์ํคํ ์ฒ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ก ์ธํด ๋์ฑ ์ธ๊ธฐ๋ฅผ ์ป์๋ค ์ฐธ๊ณ
MVC(Model-View-Controller)
์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๊ฐ์ง ์ฃผ์ ์์(๊ด์ฌ์ฌ)๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๋ ์ํคํ ์ฒ
Model: ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์์ ์ ๋ด๋น, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ๋ ์์
View: ์ฌ์ฉ์ UI ๋ด๋น (Front ์์ญ), Model์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ํ๋ค.
Controller: ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ์ํ, View์ Model ์ฌ์ด์์ ๋งค๊ฐ์ฒด ์ญํ ์ ํ๋ค.
MVC ํน์ง
๊ฐ์ฅ ๋ํ์ ์ธ ์น ์ค๊ณ ์ํคํ ์ฒ
๊ฐ ์์(๊ด์ฌ์ฌ)๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์์ผ๋ฏ๋ก ๋ค์์ ๊ฐ๋ฐ์๋ค์ด ํ์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋๋ฐ ์ฉ์ดํ๋ค
MVVM(Model-View-ViewModel)
MVC ํจํด๊ณผ ์ ์ฌํ์ง๋ง, View์ Model ์ฌ์ด์ ViewModel์ด๋ผ๋ ์ค๊ฐ ๊ณ์ธต(๋ ์ด์ด)๊ฐ ์กด์ฌํ๋ค.
Model: ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์์ ์ ๋ด๋น, (MVC ํจํด๊ณผ ๋์ผ)
View: ์ฌ์ฉ์ UI ๋ด๋น, (MVC ํจํด๊ณผ ๋์ผ)
ViewModel: View์์ ํ์๋กํ๋ ๋ฐ์ดํฐ๋ฅผ Model์ ๊ฐ์ ธ์ ๊ฐ๊ณตํ์ฌ ์ ๊ณตํ๊ณ , View์์ ๋ฐ์ํ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ์ฌ Model์๊ฒ ์ ๋ฌํ๋ค.
MVVM ํน์ง
Vue.js์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ํคํ ์ฒ (ViewModel์ Vue Instance๋ก ๋์ฒดํด์ ์ฌ์ฉ๋๋ค.)
ViewModel์์ ๋ฐ์ดํฐ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ View์ ๋ฐ์ํ๋ค. ์ฆ, ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ํ๋ค.
Facebook์์ ์ฑ์ด ์ปค์ง์๋ก ๋ณต์ก๋๊ฐ ์ปค์ง๋ MVC ํจํด์ ๋์์ผ๋ก Flux ์ํคํ ์ฒ๋ฅผ ๊ณ ์ํ๋ค. ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ธ ๋ ์๊ธธ ์ ์๋ Model-View์ ๋ณต์กํ ๊ด๊ณ๋ฅผ ๊ฒจ๋ฅํด ๋ช ํํ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฐ์กฐํ๋ค.
๋ฐ์ดํฐ์ ํ๋ฆ์ด ํ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ , ๋ฐ์ดํฐ ๋ณํ๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
View๋ ์ํ๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ค๋ก์ง ์ฌ์ฉ์์ ์ธํฐ๋ ์ ์ ๋ฐ๋ฅธ Action์ Dispatcher๋ฅผ ํตํด์ ์์ฒญํจ์ผ๋ก์จ ์ค์ง์ ์ผ๋ก ์ํ์ ๋ณ๊ฒฝ์ Store ํ๊ณณ์์ ๊ด๋ฆฌํ๊ฒ ๋ง๋ค์ด ๊ทธ ๋ถ๋ถ๋ง ํ์ ํจ์ผ๋ก์จ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ ๋ฐ์ดํฐ ๋ณํ๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ฌธ์ ๋ View์์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ์ด ์ปค์ง๋ ๊ฒฝ์ฐ ๋์ผํ ์ํ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์์ ํ๊ฒ ๋๋ ์ํฉ์ด ์๊ธด๋ค. ์ด๋ ์๋ชป ์์ ๋ฌ์ ๊ฒฝ์ฐ ์๋ชป ์์ ๋ ๊ณณ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์์ง๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๊ตฌ์กฐ๊ฐ ๋๋ค.
Action: ์ด๋ฒคํธ/๋ฉ์์ง์ ๊ฐ์ ๊ฐ์ฒด, ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ์ผ์ผํค๋ ์์๋ก, Dispatcher๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ฒญ์ ๋ณด๋ธ๋ค.
Dispatcher: (์ฌ๋ฌ) Store๋ก Action์ ์ ๋ฌ(๋ธ๋ก์ปค ์ญํ ), ์ฆ Action์์ ๋ฐ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์์ฒญ์ Store์ ์ ๋ฌํ๋ค.
Store(์ฌ๋ฌ๊ฐ): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ด, ๋ฐ์ Action์ ๋ํ ์๋ต์ผ๋ก ์ค์ค๋ก ๊ฐฑ์ ํ๊ณ ์ ์์ ์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ๋ชจ๋(View)์๊ฒ ์๋ฆฐ๋ค.
View(React): ์ฌ์ฉ์ UI๋ฅผ ๋ด๋นํ๋ฉฐ, Store์ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก View๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
Redux
Flux Architecture ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋จ์ผ Store๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ๋จ์ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ค.
Action: ์ํ ๋ณ๊ฒฝ์ ์ค๋ช ํ๋ ๊ฐ์ฒด(Flux์ ๋์ผ)
Dispatcher: Action์ Store์ ์๋ฆฌ๋ ์ฉ๋, ์ฆ ์ํ ๋ณ๊ฒฝ ์์ฒญ(Flux์ ๋์ผ)
Reducer: ์ ๋ฌ๋ฐ์ ์ก์ ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๊ต์ฒดํ๋ ํจ์๋ก ์ด์ ์ํ๋ฅผ ์๋ก์ด ์ํ๋ก ๊ต์ฒดํ๋ค.(์์ํจ์)
Subscribe: ์ ํ๋ฆฌ์ผ์ด์ ์ํ ๋ณ๊ฒฝ์ ๊ตฌ๋ ํ์ฌ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด ๋ฑ๋ก๋ ๋ฆฌ์ค๋๋ฅผ ์คํ์ํจ๋ค.
Store(๋จ์ผ): ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ ๊ณตํ๋ฉฐ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด View์๊ฒ ์๋ ค ๋ค์ ๊ทธ๋ฆฐ๋ค.
Redux์ 3์์น
์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ ๋ชจ๋ ํ ๊ณณ(Store)์์ ์ง์ค ๊ด๋ฆฌ๋๋ค.(๋๊ธฐํ ํ์ X)
์ํ๋ ๋ถ๋ณ(ReadOnly) ๋ฐ์ดํฐ ์ด๋ฉฐ, ์ค์ง Action ๋ง์ด ์ํ ๋ณ๊ฒฝ์ ์์ฒญํ ์ ์๋ค.(์์ธก ๊ฐ๋ฅ)
Reducer(ํจ์)๋ฅผ ํตํด ์ํ์ ์ต์ข ๊ฐ๋ง ์ค์ ํ๋ค.(๋จ์ํ)
React-Redux๋ Store๊ฐ ๊ด๋ฆฌํ๋ ์ํ, ์ฆ ์ ์ญ ์ํ๋ฅผ React ์ปดํฌ๋ํธ์ props๋ก ๋งคํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ด๋ฅผ ํตํด ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋งคํ๋ props๋ ๋ณ๊ฒฝ์ด ๋์ด ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋๋ค.
์ฆ, ์ ๋ฆฌํ๋ฉด React Redux๋ ์ํ ๋ณ๊ฒฝ์ ๊ตฌ๋ (Subscribe ๋ฆฌ์ค๋ ์ถ๊ฐ)ํ์ฌ Store์์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค, ๋ณ๊ฒฝ๋ ์ํ๋ฅผ React ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๋ค.
Last updated