๐๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๊ฐ๋
์ ๋ํ ์ ๋ฆฌ๋ฅผ ํ ํ์ด์ง. ์ฅ๊ณ ๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๋ ์
์ฅ์์ ๊ทธ์ ์ฝ๋๋ฅผ ๋ฌด์์์ ์ผ๋ก ๋ฐ๋ผ์น๊ธฐ๋ณด๋ค๋ ์น์ด ์ด๋ค ํ๋ฆ์ผ๋ก ์ด๋ฃจ์ด์ง๋๊ฐ๋ฅผ ์ดํดํ๋๊ฒ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ๋ํ ๋ด์ฉ์ ๋ธ๋ก๊น
ํ์ง ์์๋ค. (๊ทธ๋ ๋ค๊ณ ์ฝ๋๋ฅผ ์์ณ๋ณธ๊ฑด ์๋๋ค. ๋ค ๋ฐ๋ผ์ณ๋ดค๋ค!)
์ฅ๊ณ ๋ MTV ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋ ์์ํฌ๋ผ๋ ๋ง์ ๊ฒ์์ ํ๋ฉด์ ๊ต์ฅํ ๋ง์ด ๋ณด์๋ค. ๊ทธ๋์ ์ด MTV ํจํด์ด ๋ฌด์์ธ์ง์ ๋ํ ์ดํด๊ฐ ์์ด์ผ ์ฅ๊ณ ๋ผ๋ ์น ํ๋ ์์ํฌ๋ฅผ ์ดํดํ ์ ์์๊ฑฐ๋ ์๊ฐ์ด ๋ค์ด์ ์ ๋ฆฌํด๋์ผ๋ คํ๋ค.
๊ทธ๋์ MTVํจํด์ด ๋ญ๋ฐ? MTVํจํด์ ์ด์ผ๊ธฐํ๊ธฐ ์ ์ MVCํจํด์ผ๋ก ๋จผ์ ์ดํดํด๋ณด์. MVC ํจํด์ Model, View, Control ๋ก ๋์ํ๋ ํจํด์ ์๋ฏธํ๋ค. ์ด ํจํด์ด ์ฅ๊ณ ์์๋ Control ์ Template์ผ๋ก ๋ฐ๊ฟ MTV ํจํด์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ฆ๋ง ๋ค๋ฅด์ง ํ๋ ์ญํ ์ ๊ฑฐ์ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ MVC ํจํด์ ์ดํดํ๊ณ ์๋ค๋ฉด ์ดํดํ๊ธฐ ์กฐ๊ธ ๋ ์์ํ ๊ฑฐ๋ผ ์๊ฐํ๋ค.
MVC ํจํด์ ์ดํดํ๊ธฐ์ ์ข์ ๊ทธ๋ฆผ์ด ์์ด ๋ค์์ ํ์ด์ง์์ ๊ฐ์ง๊ณ ์๋ค. ์์ด์ ์์ ์ด ์๋ค๋ฉด ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค.

๊ธฐ์กด์ MVC๋ ๋ณ๊ฐ์ ๊ฐ๋ ์ด ์๋ ํ๋์ ํตํฉ๋ ๊ฐ๋ ์ด์๋ค. ์ด ๊ฐ๋ ์ด ์์ฌ์์ด ํ๋ก์ ํธ๊ฐ ์ปค์ ธ๊ฐ์ ๋ฐ๋ผ ๊ด๋ฆฌ์ ์ด๋ ค์์ ๋๊ปด MVC๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๊ฒ ๋์๋ค.
MVC๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
MVC concerns by function:
MVC concerns by expertise:
MVC concerns by people:
์ฆ, ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์ ์ ์๊ฒ ๋ณด์ฌ์ค์ฌ์ฉ์์ ์
๋ ฅ๊ณผ ์ด๋ฒคํธ์ ๋ฐ์ํ์ฌ Model๊ณผ View๋ฅผ ์
๋ฐ์ดํธ์ด๋ ๊ฒ ๋ถ๋ฆฌ ๋ MVC๋ ์ด๋ป๊ฒ ๋์ํ ๊น? ๋ค์ ๊ทธ๋ฆผ์ ๋ด๋ณด์.

์ฌ๊ธฐ์ controller๋ฅผ MTVํจํด์์๋ Template๋ก ์๊ฐํ๋ฉด ๋๊ฐ๋ค! ์ด๋ฐ ํจํด์ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
User โ Controller์์ ๋ค์ํ Input, event ์กฐ์ โ Controller๋ Model์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฐ๊ณต ํ View์ ๋ณด๋ด์ง๊ณ , View๋ฅผ ๋ค์ ์ ์ ์๊ฒ ๋ณด์ฌ์ง๋ ํํuser๊ฐ ์
๋ ฅํ๋ฉด Controller๊ฐ ์
๋ ฅ์ Model์ ์ฐ๋ ํํ๋ฐ๋ผ์ ๋ชจ๋ ์๋ก ์ ๊ธฐ์ ์ธ ๊ด๊ณ๋ก ๋์ํ๋ค!
๊ทธ๋ MTV ํจํด์ ๊ทธ๋ฐ๊ฑฐ๊ตฌ๋. ๊ทธ๊ฒ Django์์ ์ด๋ป๊ฒ ๋์ํ๋๋ฐ? ๋ผ๋ ๋ด ์ค์ค๋ก์ ์ง๋ฌธ์ ๋๋ตํ๊ธฐ ์ํด ์ฐพ์๋ณธ Django Flow! ์ฅ๊ณ ์ ํ๋ฆ์ ์์๋ณด์.

์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด์ ๋ค์์ ํ๋ฆ์ ์ดํดํด๋ณด์.
event ๋ฐ์Database ์ด๋์ ์ ๊ทผํด์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ์ง Model์ ์๋ ค์ค๋ค.Database์ connectionData send ์ค๋นData sendUser์๊ฒ ๋ณด์ฌ์ค Data๋ฅผ Template์ ์ ์กUI๋ฅผ ๋ง๋ค์ด์ browswer์ send1์์ ๋ฐ์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์๋ฃ!์์ ๊ฐ์ ๋ฃจํ๋ฅผ ์ง์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด์ ์ฅ๊ณ ๋ ๋์ํ๋ค. ์ค์ํ ๋ถ๋ถ์ด๋ ๊ผญ ํ๋ฆ์ ์ดํดํ๋๋ก ํ์.
์ฅ๊ณ ์ MTV ํจํด๊ณผ ์ฅ๊ณ ์ ํ๋ฆ์ ์ดํดํ๋ค๋ฉด ์ด์ ์ค์ ๋ก ์ฅ๊ณ ๋ฅผ ์จ๋ด์ผํ๋ค. ์ด ํ์ด์ง์์๋ ์ฅ๊ณ ์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์ฑ์ ๋ง๋ค๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง๋ค๋ฉด์ ์์ฑ๋ ํ์ผ๋ค์ ๋ํด์ ์ค๋ช ํ๋๊ฑธ๋ก ๋๋ง์น๊ฒ ๋ค.
$ django-admin startproject mystie
mysite๋ผ๋ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค. ํ๋ก์ ํธ๋ ํ๋์ ํ๋ก์ ํธ๋ฅผ ์ด์ผ๊ธฐํ๋ฉฐ ์ฑ์ ํ๋์ ํ๋ก์ ํธ ์์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค์ ์ฑ์ด๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด django tutorialํ์ด์ง์์๋ mysite๋ผ๋ ํ๋ก์ ํธ ์์ ํฌํ๋ฅผ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋ ์ฑ์ธ polls ๋ผ๋ ์ฑ์ ๋ง๋๋ ์์ ๊ฐ ์๋ค.
ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋, Python ๋๋ Django์์ ์ฌ์ฉ์ค์ธ ์ด๋ฆ์ ์ถฉ๋์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ์.
startproject ๋ฅผ ํ๊ณ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์ผ๋ค์ด ์์ฑ๋๋ค.

์ด๋ฌํ ํ์ผ๋ค์ ๊ตฌ์ฑ๊ณผ ์ญํ ๋ค์ ๋ํด์ ์ดํดํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
๊ตฌ์ฑ์ ์ดํด๋ณด๋ฉด ๋ด๊ฐ ์์ฑํ mysite๋ผ๋ ํ๋ก์ ํธ๊ฐ ์์ฑ์ด ๋์๊ณ , manage.py๋ผ๋ ํ์ผ์ด ์์ฑ๋์๋ค.
manage.py : Django ํ๋ก์ ํธ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ํธ์์ฉํ๋ ์ปค๋งจ๋๋ผ์ธ์ ์ ํธ๋ฆฌํฐ. ์์๋ก ๋ณ๊ฒฝํ์ง ์๋๋ก ์ฃผ์mystie : ์ด ๋๋ ํ ๋ฆฌ ๋ด๋ถ์๋ ํ๋ก์ ํธ๋ฅผ ์ํ ์ค์ python ํจํค์ง ํ์ผ๋ค์ด ์ ์ฅ๋๋ค.__init__.py : Python์ผ๋ก ํ์ฌ๊ธ ์ด ๋๋ ํ ๋ฆฌ๋ฅผ ํจํค์ง์ฒ๋ผ ๋ค๋ฃจ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ฉ๋์ ๋น ํ์ผsettings.py: ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ์ค์ ๋ค์ด ๋ด๊ฒจ์๋ ํurls.py: ์ฌ์ฉ์๊ฐ URL๋ก Django์ ์ ๊ทผ์ ํ๋ฉด Django๋ URL๋ก URL ๊ท์น์ ๋ณด๊ณ ๋ด๋ถ์์ ์ผ์นํ๋ view๋ฅผ ์ฐพ์ ์ฐ๊ฒฐ์์ผ์ค๋ค.asgi.py: asgi๋ Django-channels๋ฅผ ์ฌ์ฉํ ๋ ์์์ผ ํ๋ ๊ฐ๋
. Asynchronous Server Gateway Interface ์ ์ค์๋ง๋ก์จ, django-channels๊ฐ ์ฌ์ฉํ๊ณ ์๋ Daphne์ django-channels๊ฐ ์๋ํ๋ ๊ธฐ๋ฐ.wsgi.py: Web Server Gateway Interface. Python์ ํ์ค Gateway Interface.python manage.py runserver
์๋จ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ ๋, ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๊ฐ ์ถ๋ ฅ๋๋ฉด ์ ์์ผ๋ก ๋์ํ๊ฒ์ด๋ค.
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
7์ 29, 2020 - 15:50:53
Django version 3.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
๋นจ๊ฐ์ค๋ก ํ์๋์ด ๋์ค๋ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ ํ์ฌ๋ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ๋ค(migrations)์ ๋ํ ๊ฒฝ๊ณ ์ด๋ค.
python manage.py startapp polls
์ด์ mysite๋ผ๋ ํ๋ก์ ํธ์์ polls ๋ผ๋ ์ฑ์ ์์ฑํ๋ค. ํ์ฌ ํด๋์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.

๊ฐ ํ์ผ๋ค์ ๊ธฐ๋ฅ์ ์์์ผ ๋ด๊ฐ ์ค์ ๊ฐ๋ฐํ ๋ ์ด๋ค ํ์ผ์ ์ด๋ค ๋ก์ง์ ๊ตฌํํด์ผํ ์ง ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ํ์ผ๋ค์ด ์ด๋ค ํ์ผ์ธ์ง ๊ฐ๋จํ ์์๋ณด์.
__init__.py: App์ด๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ ํ์ผadmin.py: Django์์๋ admin์ด๋ผ๊ณ ํ๋ ๊ด๋ฆฌ์ ํ์ด์ง๋ ์ ๊ณตํด์ฃผ๋๋ฐ, ์ด ๊ด๋ฆฌ์์ ๋ํ ๋ก์ง์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ ํ์ผmigrations: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ํด๋models.py: ๋ชจ๋ธ๋ง์ ์ฌ์ฉ๋ ๋ก์ง๋ค์ ๊ตฌํํ๋ ํ์ผ. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ์ง์ ์ ์ผ๋ก ๋ด๋นํ๋ ํ์ผ.tests.py: Django test์ ๊ด๋ จ๋ ์ฝ๋๋ค์ ์์ฑํ๋ ํ์ผviews.py: View๋ค์ ์์ฑํ๋ ํ์ผ. ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๊ฐ๊ณตํ๋ ์ญํ .ModelTemplateViewURLConfURL mapping ์ดํดํ๊ธฐ
์์ฑํ polls ์ฑ์์ urls.py๋ผ๋ ํ์ผ์ ์์ฑํด์ผ polls์ฑ์ ๊ด๋ จ๋ URL๋ง mappingํ ์ ์๊ณ , ๋ค๋ฅธ ์ถฉ๋ ๋ํ ์์จ ์ ์๋ค. mysite.urls.py์์ ์กฐ๊ธ ๋ ํฐ ๋ฒ์ฃผ์ url์ mappingํ๊ณ , ์ฌ๊ธฐ์ polls.urls๊ฐ mapping๋์ด polls.py์ mapping๋์ด ๊ตฌํํ url๋ค์ ์ฝ์ ์ ์๊ฒ ๋๋ค. ์ด ๋, include()๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ ๋ค๋ฅธ URL ํจํด์ ํฌํจํ ๋๋ง๋ค ํญ์ ์ฌ์ฉํด์ฃผ์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ path() ํจ์์๋ 2๊ฐ์ ํ์ ์ธ์์ธ route์ view, ์ ํํ ์ ์๋ 2๊ฐ์ง์ ์ธ์์ธ kwargs์ name๊น์ง ์ ๋ฌ ๊ฐ๋ฅํ๋ค.
path()์ธ์
route: URL ํจํด์ ๊ฐ์ง ๋ฌธ์์ด. ์ผ์นํ๋ ํจํด์ ์ฐพ์ ๋ ๊น์ง ์์ฒญ๋ URL์ ๊ฐ ํจํด๊ณผ ๋ฆฌ์คํธ์ ์์๋๋ก ๋น๊ตํ๋ค.view: ์ผ์นํ๋ ํจํด์ ์ฐพ์ผ๋ฉด, HttpRequest ๊ฐ์ฒด๋ฅผ ์ฒซ๋ฒ์งธ ์ธ์๋ก ํ๊ณ , ๊ฒฝ๋ก๋ก๋ถํฐ ์ผ์น ๋ ๊ฐ์ ํค์๋ ์ธ์๋ก ํ์ฌ ํน์ ํ view ํจ์๋ฅผ ํธ์ถํ๋ค.kwargs: ์์์ ํค์๋ ์ธ์๋ค์ dictionary ํํ๋ก view์ ์ ๋ฌ๋๋ค.name: URL์ ์ด๋ฆ์ ์ง์ผ๋ฉด, ํ
ํ๋ฆฟ์ ํฌํจํ Django ์ด๋์์๋ ๋ช
ํํ๊ฒ ์ฐธ์กฐํ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋จ ํ๋์ ํ์ผ๋ง ์์ ํด๋ project ๋ด์ ๋ชจ๋ URL ํจํด์ ๋ฐ๊ฟ ์ ์๋๋ก ํด์ค๋ค.์ด์ ์ฐ๋ฆฌ๋ Django๋ก ํ๋์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ , App์ ๋ง๋ค์์ผ๋ฉฐ, ์์ฑ ๋ ํ์ผ์ด ๋ฌด์จ ์ญํ ์ ํ๋ ํ์ผ์ธ์ง ์๊ฒ ๋์๋ค.
์ด์ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ๋ง ํ๋ฉด ๋๋ค! ๐คฏ