- MVC ํจํด์ด๋
- node์์ MVC ํจํด ์ ์ฉํ๊ธฐ
๋ชจ๋ธ-๋ทฐ-์ปจํธ๋กค๋ฌ(ModelโViewโController, MVC) ํจํด์ software ๊ณตํ์์ ์ฌ์ฉ๋๋ Design pattern ์ค ํ๋๋ก user interface๋ก๋ถํฐ business logic ์ ๋ถ๋ฆฌ, ์๋ก ์ํฅ์ ์ฃผ์ง ์๊ณ ๊ฐ๋ฐ์ ํ ์ ์๋๋ก ํ๋ pattern ์ด๋ค.
์ ๊ทธ๋ฆผ์์ ๋ณด๋ค์ํผ FrontEnd ์ธก์์ View์ ๋ํ ๊ฐ๋ฐ์ ๋ด๋นํ๊ณ BackEnd๋ request์ ๋ํด Database๋ฅผ ์ ๊ทผ, CRUD ์ฒ๋ฆฌ ๋ฐ response๋ฅผ ๋ด๋นํ๋ค.
Controller๋ View์์ request, response์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ Database๋ฅผ ๋ค๋ฃจ๋ ์ผ์ Model์ด ์ ๋ดํ๋ค. ์ฆ ์๋น์ค์ business logic์ model ์์ญ์์ ๋ค๋ฃฌ๋ค.
MVC ํจํด์ ๊ฒฐ๊ตญ ๊ฐ๋ฐ์์ญ์ ๋ถ๋ฆฌ(๋ชจ๋ํ, layer)ํ์ฌ ์๋ก ์ํฅ์ ์ฃผ์ง์๊ณ ๊ฐ๋ฐํ ์ ์๋ค๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ์ด๋ ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
- ์ผ๋ ค์ ๋ถ๋ฆฌ
๊ฐ๊ฐ์ layer๊ฐ ํ๋ ์ญํ ์ด ๋ช ํํ๋ฏ๋ก ๋ฌธ์ ๋ฐ์์ ์์ธ ์ง์ ์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ค.- ๋์์ ์ธ ๊ฐ๋ฐ
์ ํด์ง protocol๋ง ์์ผ๋ฉด ๊ฐ layer๋ ๋ ์์ ์ผ๋ก ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.- ์์ ์ ์ฉ์ดํจ
ํ๋์ layer๊ฐ ์์ ๋์ด์ผ ํ ์ํฉ์ด ๋ฐ์ํด๋ ๋ค๋ฅธ layer์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.- ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ
layer๊ฐ ๋ถ๋ฆฌ๋์ด์์ผ๋ฏ๋ก ๊ฐ layer๋ณ ํ ์คํธ๊ฐ ์ฉ์ดํ๋ค.์ด๋ฅผ node๋ก web service ๊ตฌํ์ ์์ด ๋ชจ๋ํ์ ๋ฐ์ํ ์ ์๋ค.
Router, Controller, Service, Model์ ๊ฐ๊ฐ layer์ด๋ฉฐ ํ๋์ ํด๋์ด์ ์ญํ ์ด๋ค.
๋ชจ๋ํ๋ฅผ ํ๋๋ฐ ์๋ ์ค์ํ point๋ ์ญํ ์ ๋ช ํํ ๋๋๋ ๊ฒ์ด๋ฉฐ ์ด๋ layer ๊ฐ์ ์์กด์ฑ๋ ํฌํจ๋๋ค. ๊ฐ layer ๊ฐ ์์กด์ฑ์ ์๋์ ๊ฐ๋ค.Router -> Controller -> Service -> model
Router๋ Controller๋ง ์์กดํ๋ค. Service ์ ๋ํด์ ๋ชจ๋ฅธ๋ค.
Controllersms Service๋ง ์์กดํ๋ฉฐ Model ์ ๋ํด์ ๋ชจ๋ฅธ๋ค.
Service๋ Model๋ง ์์กดํ๋ค.๋ชจ๋ํ๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ป์ ์ ์๋ ์ด์ ์ ์๋ฅผ ๋ค์ด๋ณด์๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ Database๋ฅผ mysql ๋์ NoSQL๋ก ๋ฐ๊ฟ์ผ ํ๋ ๊ฒฝ์ฐ(Model์ด ๋ณ๊ฒฝ)๋ก ์ด ๋๋ Service layer๋ง ์์ ํ๋ฉด ๋๋ค.
Router์ Controller๋ Model์ ์์กดํ์ง ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ ๋ ์ผ์ด ์๋ค.์ผ๋ฐ์ ์ธ node project layer๋ ์๋์ ๊ฐ๋ค.
- server.js
main ๋ก์ง์ผ๋ก Express app ๊ธฐ๋ฐ server์ ์คํ ๋ฐ ์ข ๋ฃ์ ์ฒ๋ฆฌ ๋ด๋น- app.js
Express app์ ๋ง๋ค๊ณ ํ์ํ middleware๋ฅผ ๋ถ์ด๋ ๋ก์ง ๋ด๋น- Router
endpoint๋ฅผ ๋๋๋ ๋ก์ง ๋ด๋น- Controller
endpoint์ ํด๋นํ๋ ์ฒ๋ฆฌ ๋ก์ง ๋ด๋น(request์ ๋ํ error handling ๋ฐ response)- Service
controller๋ก๋ถํฐ ๋ฐ์ ์ธ์ ๊ธฐ๋ฐ data ๊ฐ๊ณต ๋น์ฆ๋์ค ๋ก์ง ๋ด๋น- Model(= prisma, mongoose)
์ด๋ Database์ ์ ๊ทผํ๊ธฐ ์ํ ๋ชจ๋ธ ์ ์ ๋ด๋น.์์์ ๋ฐ์ผ๋ก ๊ฐ ์๋ก Database์ ๊ฐ๊น์์ง๋ ๊ตฌ์กฐ์ด๋ฉฐ ๊ฐ layer๋ ๋ฐ๋ก ๋ฐ์ layer๋ง ์์กดํ๋ค.
๊ทธ ์ธ์ ๋ชจ๋๋ค์ด ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ ๋ชจ๋(err(์์ธ์ฒ๋ฆฌ), middlewares, utils)์ด ์์ ์ ์์ผ๋ฉฐ ์ด๋ project ์ต์์์์ ๊ด๋ฆฌ.