์ด๋ฒ์ฃผ์๋ย ์๋์ฐจ๊ฒฝ์ฃผ๊ฒ์ย ๋ฏธ์
์ ์งํํ๋๋ฐ,ย mvcํจํด์ผ๋ก ๋์์ธํ๋ ๊ฒ๊ณผย ๋ชจ๋ ๋ก์ง์ ๋จ์ ํ
์คํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ฌ์ ๋ฏธ์
์ด์๋ค. ์ด๋ฒ ๋ฏธ์
๋ถํฐ๋ vanillaJS๊ฐ ์๋ ๋ฆฌ์กํธ์ ํ์
์คํฌ๋ฆฝํธ๋ก ์งํํด๋ณด์๋ค. UIํ
์คํธ๋ ์์ง ํ๊ธฐ๊ฐ ๊น๋ค๋ก์์ ์ด๋ฒ ๋ฏธ์
์์๋ ์ ์ธํ์๊ณ ๋จ์ํ
์คํธ๋ฅผ ํ๊ธฐ ์ํด์ ๋ทฐ๋จ์ ์ฝ๋(์ปดํฌ๋ํธ)์ ๋ก์ง๋ถ๋ถ์ ์ฝ๋(๋ชจ๋)์ ๋ถ๋ฆฌํด์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ ์ฌ๋ฌ๋์์ธํจํด์ ๋น๊ตํด๋ณด๊ณ , ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํด๋ณด๋ฉฐ, ์ฝ๋๋ฅผ ์ด๋ค ์์ผ๋ก ์ง์ผํ ์ง, ์๊ฐํด๋ณด์๋ค.
#. Series
์๋ฆฌ์ฆ ํ๋์๋ณด๊ธฐ[์ ๊ธฐ/ํผ์น๊ธฐ]
##. Source
๊นํ๋ธ ์์ค[์ ๊ธฐ/ํผ์น๊ธฐ]
1. MVC ํจํด
MVC ํจํด์ Model + View + Controller ๋ฅผ ํฉ์น ์ฉ์ด๋ก, ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
- Modelย : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- Viewย : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
- Controllerย : ์ฌ์ฉ์์ ์ ๋ ฅ(Action)์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
์ถ์ฒ:ย https://beomy.tistory.com/43
์ฆ, action์ด Controller์ ์ ๋ฌ๋๋ฉด action์ ๋ฐ๋ผ Model์ ์
๋ฐ์ดํธํ๊ณ View๋ฅผ ํตํด ๊ทธ๊ฒ์ ์ถ๋ ฅํ๋ค.
MVC ํจํด์ ์๋ฒ ์ธก ๋์์ธํจํด์ผ๋ก, ์น์ ๊ฒฝ์ฐ์ ์ ์ฉ ์์ผ๋ณด์๋ค. โํด๋ผ์ด์ธํธ(ํ๋ก ํธ)์์ ์์ฒญ์ controller์ ์ ๋ฌ > action์ ๋ฐ๋ผ Model์ ์
๋ฐ์ดํธ > View๋ก ์ ๋ฌ(?) > View๋ ๋ค์ ์๋ต์ ํด๋ผ์ด์ธํธ(ํ๋ก ํธ)์ ์ ๋ฌ.(?)โ ํ์ง๋ง ์ด๋ด ๊ฒฝ์ฐ, View๋ ํด๋ผ์ด์ธํธ(ํ๋ก ํธ)์์ ๊ตฌํ๋๋ ๊ฒ์ด์ง ์๋ฒ์ธก์ ๊ณผ์ฐ View๊ฐ ์๋์ง ์๋ฌธ์ด ๋ค์๋ค.
๊ทธ๋์ ๊ด๋ จ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ MVCํจํด์ ๊ฐ์ฒด์งํฅ ์์คํ
์ด UI๋ฅผ ๊ฐ์ง ์ ์๋๋ก ์ค๊ณ๋ ํจ๋ฌ๋ค์์ด๋ฉฐ, ์น ์๋น์ค์ ์๋ฒฝํ ๋์
ํ๋ คํ๋ ๊ฒ์ ์ณ์ง ์๋ค๋ ๊ฒฌํด๊ฐ ์์๋ค.ย https://softwareengineering.stackexchange.com/questions/324730/mvc-and-restful-api-serviceย MVC๋ฅผ ์ ๋๋ก ๋ฐ๋ฅด๊ณ ์๋์ง ๋ณด๋ค๋ MVC ํจํด์ ์ด์ (์ฝ๋๋ฅผ ์ญํ ์ ๋ง๊ฒ ๋๋๋ ๊ฒ)์ ์ดํดํ๊ณ ๊ทธ๊ฒ์ ๊ณ ๋ คํ ์ค๊ณํ๋ ๊ฒ์ด ๋ ์ค์ํ์ง ์๋ ์๊ฐ์ด ๋ค์๋ค.
2. MVVM ํจํด
MVVM ํจํด์ MVC์์ ํ์๋ ํจํด์ผ๋ก Model + View + View Model ๋ฅผ ํฉ์น ์ฉ์ด์ด๋ค. MVVM ํจํด์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
- Modelย : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- Viewย : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
- View Modelย : View๋ฅผ ํํํ๊ธฐ ์ํด ๋ง๋ View๋ฅผ ์ํ Model. View๋ฅผ ๋ํ๋ด ์ฃผ๊ธฐ ์ํ Model์ด์ View๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ถ๋ถ.
์ถ์ฒ:ย https://beomy.tistory.com/43
View์ action์ด ์ ๋ฌ๋๋ฉฐ, ํ๋ก ํธ์๋์ธก์์ ์ฃผ๋ก์ฌ์ฉ๋๋ ํจํด์ด๋ค.
โView์์ action๋ฐ์ > View๊ฐ View Model๋ก action ์ ๋ฌ > View Model์ Model์ ์
๋ฐ์ดํธํ๊ณ ์๋ต์ ๋ค์ ๊ฐ์ ธ์ด > View Model์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํ์ฌ View๋ฅผ ๊ฐฑ์ โ ์ด๋ ๊ฒ model ์ ๋ณํ์ ๋ฐ๋ผ, view๋ฅผ ๋ฐ๋ก๋ฐ๋ก ์
๋ฐ์ดํธ ํด์ฃผ๋ย
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
ย ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. Angular, vuejs ์ ๊ฒฝ์ฐ์๋ย ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์, ๋ฆฌ์กํธ๋ย ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ด์ฉํ๋ค.3. FLUX ํจํด
๊ธฐ์กด์ MVC๋ชจ๋ธ์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์์ ๋ชจ๋ธ์ ๋ณํ์ ๋ฐ๋ผ ๋ฐ๋ก๋ฐ๋ก ๋ทฐ๊ฐ ๋ณํ๊ธฐ ๋๋ฌธ์ ์์คํ
์ด ๋ณต์กํด์ง ์๋ก ์์ธก ๋ถ๊ฐ๋ฅํ ์ํฉ๋ค์ด ์๊ธฐ๊ณ ๋ฐ์ดํฐ๋ค์ด ๊ผฌ์ฌ๋ฒ๋ฆด ์ ์๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์๋ค.
์
๋ฐ์ดํธํ Model๋ค์ด ๋ค์์ด๊ณ , ์๋ก ์์กด์ฑ์ด ์ฝํ์์ ๊ฒฝ์ฐ ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
FLUX ํจํด์ MVC์ย ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋จ์ ์ ํด๊ฒฐํ๊ณ ์ ํ์ด์ค๋ถ์์ ๊ณ ์ํย
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
ย ๋ฐฉ์์ ๋์์ธ ํจํด์ด๋ค. ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.- Dispatcherย : Flux์ ๋ชจ๋ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ๋ ํ๋ธ ์ญํ ์ ํ๋ ๋ถ๋ถ
- Storeย : ๋ฐ์ดํฐ(์ํ)๋ฅผ ์ ์ฅํ๋ ๋ถ๋ถ
- Viewย : Store์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ View๋ฅผ ์ ๋ฐ์ดํธํด์ฃผ๋ ๋ถ๋ถ. Controller View๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์ถ์ฒ:ย https://taegon.kim/archives/5288
์ฆ, โAction์ด dispatch > dispatcher๋ action์ ๋ง๊ฒ store๋ฅผ ์
๋ฐ์ดํธ > View๋ store์ ๋ณํ๊ฐ ๊ฐ์ง๋๋ฉด view์
๋ฐ์ดํธโ ์ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค. ๋ํ์ ์ผ๋ก React์ Redux๊ฐ fluxํจํด์ ์ฌ์ฉํ๋ฉฐ, Vuex๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ fluxํจํด์ ์๊ฐ์ ๋ฐ์ ๋ง๋ค์ด์ก๋ค๊ณ ํ๋ค.
4. ์ฝ๋์ ํ๋ฆ
2020๋
4์ 26์ผ, ์ ์ค ์คํ๋ผ์ธ ์คํฐ๋์์ ์ฝ๋๋ฆฌ๋ทฐ ๋ฐฉ์์ ๋ํด์ ๋ค์ ์ ์์๋ค. ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ์๋ ๋ถ์ ๋ฐ๋ฅด๋ฉด mvc๋ชจ๋ธ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์์์ ์ผ๋ก ํ์คํ์ค ์ฝ๋์ ํ๋ฆ๋๋ก ์ฝ์ด๋ด๋ ค๊ฐ์ ๋ค๊ณ ํ์๋ค. ์๋ฅผ๋ค์ด, โ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ > ์ธํ์ ๋ฐ๊ณ ์๋์ฐจ๋ฐฐ์ด์ ์์ฑ > ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๊ณ ์
๋ฐ์ดํธ > ์ถ๋ ฅโ ์ด๋ฐ์์ผ๋ก ๋ง์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ฝ๋ ํ๋ฆ์ด ์ ์ดํด๋๊ณ ์ค๊ฐ์ ํ๋ฆ์ด ๋๊ธฐ์ง ์์ผ๋ ค๋ฉด ํจ์(๋ฉ์๋)๋ช
, ๋ณ์๋ช
์ง๋ ๊ฒ๋ ์ค์ํ๊ฒ ๊ตฌ๋๋ฅผ ๋๋ผ๊ฒ ๋์๋ค.
์์์ ์ธ๊ธํ๋ ์ฌ๋ฌ ๋์์ธํจํด์ ๊ฒฝ์ฐ๋ ๊ณตํต์ ์ผ๋ก๋ action์ด ์กด์ฌํ๋ค. ํ๋ก ํธ์ ๊ฒฝ์ฐ ๋ทฐ๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ์กด์ฌํ๊ณ ์ฌ๋ฌ action๋ค์ด ๋ฐ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ action์ ์ฒ๋ฆฌํ๋ ๋ก์ง ํ๋ํ๋๋ฅผ ํ๋ฆ์ ํ๊ณ ๊ฐ๋ฉด์ ์ดํดํ๊ธฐ ์ฝ๊ณ , ํ๋ฆ์ด ๋๊ธฐ์ง ์๋๋ก ์ค์ค๋ก ์ ๊ฒํ๋ ์ฐ์ต๋ ๋ง์ด ํด๋ด์ผ๊ฒ ๋ค๊ณ ๋๋ผ๊ฒ ๋์๋ค.
5. ํจํด ์ ์ฉ(racing Car)
racing Car ๋ฏธ์
์ย mvcํจํด์ผ๋ก ๋์์ธํ๋ ๊ฒ๊ณผย ๋ชจ๋ ๋ก์ง์ ๋จ์ ํ
์คํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ฌ์ ๋ฏธ์
์ด์๋๋ฐ, ๋๋ java๊ฐ ์๋๋ผ javascript์๊ธฐ ๋๋ฌธ์ย MVVM๊ณผย FLUXย ๋ชจ๋ธ์ ์ฌ์ฉํด์ ๋์์ธํด๋ณด์๋ค. ์ ํํ ๋์
์ํค๋ ๊ฒ์ ์ด๋ ต๊ฒ ์ง๋ง, containers ํด๋์ App.tsx๋ฅผย
View Model
ย ๋ก ์ฌ์ฉ์์ View์์ action์ ์ ๋ฌ๋ฐ๋ ์ญํ ์, components์ Processes.tsx์ Result.tsx๋ฅผ ๋ณ๊ฒฝ๋ View๋ฅผ ์ถ๋ ฅํ๋ย View
ย ์ ์ญํ ์ ํ๋๋ก ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก modules๋ผ๋ ํด๋์๋ย Model
ย ์ ์ญํ ์ ํ๋ ํจ์๋ค์ ๋ชจ๋ํํ๋ก ๋ชจ์๋์๋ค. ๊ทธ๋ฆฌ๊ณ React hooks ๋ฅผ ํตํด์ FLUXํจํด์ ๊ตฌํํด๋ณด์๋ค.์ด๋ฒ ๋ฏธ์ ์ ๊ฒ์์ ์ธ ์์๊น์ง ์ถ๊ฐํด์ ์๋ง๋ฒ ํ๋ก์ ํธ์๋ ์ถ๊ฐํด๋ณด์๋ค.ย ์๋ง๋ฒํ๋ก์ ํธ/racingcar
java-racingCar-1 โโโ src โ โโโ components โ โ โโโ Processes.tsx (์คํ๊ณผ์ ๋ง ์ถ๋ ฅ) โ โ โโโ Result.tsx (์คํ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ) โ โโโ containers โ โ โโโ App.test.tsx โ โ โโโ App.tsx (๋ฉ์ธ ์ปจํ ์ด๋) โ โโโ modules โ โ โโโ Car.test.ts โ โ โโโ Car.ts (Car ๊ฐ์ฒด) โ โ โโโ formValidator.test.ts โ โ โโโ formValidator.ts (์ฌ์ฉ์ ์ธํ ๊ฒ์ฆ) โ โ โโโ racingCar.test.tsx โ โ โโโ racingCar.tsx (์๋์ฐจ ๊ด๋ จ ํจ์)
6. ํ ์คํธ์ฝ๋ ์์ฑ๊ท์น & ํ
๊ทธ๋ฆฌ๊ณ ย
jest
ย ๋ฅผ ์ด์ฉํด์ ๋ชจ๋๋ค์ ์ ๋ ํ
์คํธ๋ฅผ ์ํํ ํ
์คํธ์ฝ๋๋ ์์ฑํด์ฃผ์๋ค. ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์์ง๋ ์ต์์น ์์์ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค. ์ ๋ฒ ์๋ฆฌ์ฆ์์ ํฌ์คํ
ํ๋ ํ
์คํธ ์ฝ๋ ์์ฑ ํ์ ์ด๋ฒ์ฃผ ์คํ๋ผ์ธ ์คํฐ๋์์ ๋ฐฐ์ด ๋ด์ฉ์ ์ถ๊ฐํด์ ๋ค์ ์ ์ด๋ณด๋ คํ๋ค.1๏ธโฃ ํ
์คํธ ์ด๋ฆ์ย ํ๊ธ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค. ์์ ํ
์คํธ๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๋ฉด ํ
์คํธ๋ช
๋ ๊ธธ์ด์ง ๊ฒ์ด๊ณ ๊ฐ๊ฐ ํ
์คํธ๋ง๋ค ์ดํดํ๊ธฐ ์ฝ๊ณ ์๋ฏธ๋ฅผ ์ ์ ๋ฌํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
2๏ธโฃ ํ
์คํธ๋ย ๊ฐ์ฅ ์์ ๋จ์์ ๊ธฐ๋ฅ๋ถํฐย ํ
์คํธํ๋ค. ์๋ฅผ๋ค์ด, A,B๊ฐ C๋ผ๋ ๊ธฐ๋ฅ์ ์์กด๋ ๊ฒฝ์ฐ, A,B๋ฅผ ํ
์คํธํ๊ณ ๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด C์์ A,B๊ฐ ํฌํจ๋์ง ์์ ๊ธฐ๋ฅ๋ง ํ
์คํธํ๋ฉด ๋๋ค.
3๏ธโฃ ํ๋์ ํ
์คํธ๋ย ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ค. ํ
์คํธ๋ผ๋ฆฌ ์์กดํด์๋ ์๋๋ค.
4๏ธโฃ ํ
์คํธ๋ย ํ๋์ ๊ฐ๋
๋ง ํ
์คํธย ํ๋ค. ์ด๋ฒ ๋ฏธ์
์ ๊ฒฝ์ฐ, ์๋์ฐจ๊ฐ ๊ฐ๋์ง ์๊ฐ๋์ง ํ
์คํธํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๋ ๊ฒฝ์ฐ ํ๋, ์๊ฐ๋ ๊ฒฝ์ฐ ํ๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํ
์คํธ ํ๋ค.
5๏ธโฃ ํ
์คํธ๋ย 3๋จ๊ณ๋ก ๋๋๊ธฐ. ์ฒซ ๋ฒ์งธ๋ก ํ
์คํธย ๋ฐ์ดํฐ๋ฅผย ๋ง๋๋ ๋ถ๋ถ. (given) ๋ย ๋ฒ์งธ๋กย ํ
์คํธย ๋ฐ์ดํฐ๋ฅผย ์กฐ์ํ๋ ๋ถ๋ถ. (when)์ธย ๋ฒ์งธ๋กย ์กฐ์ํย ๊ฒฐ๊ณผ๊ฐย ์ฌ๋ฐ๋ฅธ์งย ํ์ธํ๋ ๋ถ๋ถ. (then)
7. ์ฐธ๊ณ
8. ๋ง์น๋ฉฐ
์คํฐ๋๋ฅผ ํ๋ฉด์ ์ฝ๋๋ฅผ ์์ ๋ง ์ ์ ์๊ฒ ์ง๋ ๊ฒ์ด ์ค๋ ฅ์ด ์๋๋ผ ๋๊ตฌ๋ ์์๋ณผ ์ ์๊ฒ ์ง๋ ๊ฒ์ด ์ค๋ ฅ์ด๋ผ๋ ๋ง์ ๋ฃ๊ฒ ๋์๋ค. ์ด๋ฒ ์ฃผ์๋ย ์ฝ๊ณ , ํธํ๊ฒ ํ๋ฆ๋๋ก ์ฝ์ ์ ์๋ ํด๋ฆฐํ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ๋ ์ ๋ง ์ค์ํ๊ตฌ๋๋ฅผ ๋๋ ์ ์์๋ค. ๋ค์ ๋ฏธ์
๋ถํฐ๋ ๊ตฌํ๋ณด๋ค๋ ์ฝ๋๋ฅผ ๋๋ง๊ณ ๋ค๋ฅธ ์ฌ๋์ด ์ฝ์ ๋๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ง๋ ๊ฒ์ ๋ ์ค์ ์ ๋๊ณ ์งํํด๋ณด์์ผ๊ฒ ๋ค.
Loading Comments...