-
20.09.08_TILTIL 2020. 9. 12. 16:58
์ค๋์ MVC ํจํด์ ๊ณต๋ถํ์๋ค.
MVC ํจํด์ด๋ ๋ฌด์์ผ๊น?
์ผ๋จ MVC ๋ Model, View, Controller์ ์ฝ์์ด๋ค. ์ํํธ์จ์ด๊ฐ ๋์๊ฐ๋ ํ๋์ ์ค๊ณ ํจํด์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
๊ทธ๋ผ ์ด์ MVC ๋ ์ด๋ค ์ค๊ณ ํจํด์ผ๊น?
MVC ํจํด์์ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ํค์๋๋ ๋ถ์ ํ๋ผ๊ณ ์๊ฐํ๋ค. MVC ํจํด์ ๊ฐ ์ฝ๋๊ฐ ๊ฐ์์ ์ญํ ๋ง์ ํ๋๋ก ์ค๊ณํ๋ค. Model์ Model์ ์ญํ ๋ง, View๋ View์ ์ญํ ๋ง, Controller๋ Controller์ ์ญํ ๋ง ํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ถ์ ์ ํ์์ ๋์ ์ฅ์ ์ ๊ฐ ์ฝ๋๋ค์ด ์๋๋ ์ญํ ๋ง ํ๋ฏ๋ก ์์ธก์ด ์ฝ๊ณ ๊ด๋ฆฌ๊ฐ ์ฝ๋ค๋ ๊ฒ์ด๋ค. ์ผ์ข ์ ์ ๋ฆฌ์ ๋์ด๋ผ๊ณ ์๊ฐํ๋ค. ์์ด์ผ ํ ๊ณณ์ ๊ฐ ๋ฌผ๊ฑด์ด ์๋ ๊ฒ์ด๋ค.
์ด์ ๊ทธ๋ผ Model ์ ์ญํ ์ ๋ฌด์์ด๊ณ , View ์ ์ญํ ์ ๋ฌด์์ด๊ณ , Controller์ ์ญํ ์ ๋ฌด์์ผ๊น?
Model์ ์ญํ
๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ๊ดํ ์ผ์ ํ๋ ๊ณณ์ด๋ค. ์ง์ ์์ ์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์๋ ์๊ณ , ์๋๋ฉด DB์ ์ง์ ์ ์ด์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฑฐ๋ ์์ฒญํ ์ ์๋ค.
Controller์ ์ญํ
controller๋ ์ ์ ๋ก๋ถํฐ ์ด๋ ํ ์ก์ ์ด๋ ์ด๋ฒคํธ์ ๋ํ ์ธํ ๊ฐ์ ๋ฐ์์จ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์์จ ๊ฐ์ ๊ฐ๊ณตํ ๋ค Model์๊ฒ ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.
View ์ ์ญํ
view๋ ํ๋ฉด์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฆฌ๋ ์ผ์ ํ๋ค. Controller์ ์ํต์ ํ๋ฉฐ ๊ฐ์ ๋ฐ์์ค๊ณ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
๊ทธ๋ผ ์ด์ ์์๋ก ์ด๋ป๊ฒ MVCํจํด์ด ๋์๊ฐ๋์ง ์ดํด๋ณด์.
๋ง์ฝ ์ ์ ๊ฐ ์์ ๊ฐ์ ์ฃผ์๋ก ๋ค์ด์จ๋ค๊ณ ํ์. ๊ทธ๋ผ router์์๋ ๋ถ๊ธฐ๊ฐ ์ผ์ด๋์ ๊ฐ๊ฐ์ ์๋ง์ Controller๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
/routes users/profile/:id = Users.getProfile(id);
router์์๋ controller์ ์๋ getProfile์ด๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ค.
/controllers class Users{ function getProflie(id){ profile = this.UserModel.getProfile(id); //profile์ model์์ ๋ฐ์์จ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ ์๋ค. renderView('users/profile', profile) //๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ด์ view์๊ฒ ๋ณด๋ด์ฃผ๊ณ ์๋ค. } }
controller์์ getProfile์ด๋ผ๋ ๋ฉ์๋๋ ๋ค์ Model์ ์๋ getProfile์ด๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ค.
/model Class UserModel{ function getProfile(id){ data = this.db.get('SELECT * FROM users WHERE id = id') return data; } }
model์ ๋ณด๋ฉด getProfile์ ๋ฐ์์จ id๊ฐ์ ๊ฐ์ง๊ณ id๊ฐ๊ณผ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฒญํ๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์์จ data๋ฅผ ๋ฆฌํดํด์ฃผ๊ณ ์๋ค.
์ง๊ธ๊น์ง์ ๊ณผ์ ์ ์ ๋ฆฌํ๋ฉด
1. user๊ฐ ์ด๋ ํ ์ฃผ์๋ก ๋ค์ด์ด
2. router์์ ๋ถ๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง๊ณ ๊ฐ๊ฐ์ ๋ง๋ controller๊ฐ ํธ์ถ๋๋ค.
3. controller๋ model์ ํธ์ถํ๋ค.
4. model์ controller๋ก ๋ถํฐ ๋ฐ์์จ ์ธ์๊ฐ์ ๊ฐ์ง๊ณ db์ data๋ฅผ ์์ฒญํ๋ค.
5. db๋ก๋ถํฐ ๋ฐ์์จ ๋ฐ์ดํฐ๋ ๋ค์ controller์ profile์ ๋ค์ด๊ฐ๊ณ
6. ๊ทธ ๋ฐ์ดํฐ๋ view์๊ฒ ์ ๋ฌ๋๋ค.
/views /users /profile <h1>{{profile.name}}</h1>
view์์๋ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๊ฒ ๋๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive | ์ด๋ฒคํธ [์ด๋ฒคํธ ํธ๋ค๋ฌ] (0) 2022.05.26 ๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive | #2 DOM [์์ ๋ ธ๋ ์ ํํ๊ธฐ] (0) 2022.05.25 ๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive | #1 DOM [DOM ์ด๋?] (0) 2022.05.25 20.09.15_TIL (0) 2020.09.15 20.09.13_TIL (1) 2020.09.13