๐ django ์ค์๊ฐ ์ฑํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด์ ๊ณต๋ถํด ๋ณด์๋ค.
- django ๋
Django๋ MTV ํจํด์ ์ ๊ณตํ์ฌ API ๋ฟ ์๋๋ผ ํ ํ๋ฆฟ์ ์ด์ฉํ์ html ํ์ผ์ ์์ฑํด ๋ทฐ๋ฅผ ๋ง๋ค ์ ์๋๋ก ์ ๊ณตํ์ฌ ๋น ๋ฅธ ์์ฐ์ฑ์ ์๋ํ๋ค.spring ๊ณ์ด์์๋ ์น ์๋น์ค๋ฅผ Tomcat ๋ฑ์ WAS ๋ก ๋ฐฐํฌ๋ฅผ ํ๋๋ฐ python ์๋ ์กด์ฌํ์ง ์๋๋ค ์๋๋ ๋ค๋ฅธ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ด๋ค.
- CGI & FastCGI
CGI๋ ์ ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ง ๊ฐ๋ฅํ web ์๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ์ ์์ฒญ์ ๋ฐ๋ผ ์คํ ๊ฐ๋ฅํ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ํธ์ถํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค ์ ์๋ ์ธํฐํ์ด์ค์ด๋ค.
CGI๋ request ์์ฒญ์ด ์ค๋ฉด ํ๋ก๊ทธ๋จ์ ์์ํ๊ณ response๊ฐ ์๋ฃ๋๋ฉด ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ์ฌ ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋์ง๋ง
FastCGI๋ Web ์๋ฒ ๋ด ๋์ํ๋ ํ๋ก๊ทธ๋จ์ด ํธ์ถ๋์๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์๊ฐ ๋ณด๊ดํ์ฌ ์์ฒญ ์ ์ฒ๋ฆฌ ์๊ฐ์ ์ค์ฌ ์๋ต ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- WSGI ๋
WSGI๋ CGI์ ๋์ผํ๊ฒ ์น ์๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๊ฐ์ ์์นํ๋๋ฐ CGI๋ ์์ฒญ๋ง๋ค ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , WSGI๋ ํ ํ๋ก์ธ์ค์์ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋๋ค. CGI๋ ์์ฒญ๋ง๋ค Fork ํจ์๋ฅผ ํตํด ์ปค๋์์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๊ณ ๋ฐ๋ฉํ์ง๋ง WSGI๋ ๋ง์ ์์ฒญ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํ์ฌ ํ๋ฒ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
ex) gunicorn
- ASGI ๋
๋ด๊ฐ ํ๋ ค๋ django์์ ์ฑํ ๊ธฐ๋ฅ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋๋ฐ WSGI๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋์ WSGI๋ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ๊ณ๊ฐ ์๋ค.
ASGI๋ Cython ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ ธ ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ฉฐ ์ ๋ฐ์ ์ผ๋ก WSGI์ ๋น์ทํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
ex) Uvicorn
๐ Channels ๋ง๋ค๊ธฐ ์ํด์
- ASGI
- Asynchronous webserver
- Consumer
- Daphne : HTTP request, websocket request๋ฅผ ๋ฐ๋ก ์์ฒญ์ ๋ฐ์ urls.py, mysite.routing ํ์ผ์ ์๋์ผ๋ก ๋งคํํด์ฃผ๋ ์น์๋ฒ.
daphne ํ๋์ ์น ์๋ฒ๋ก ๋ ๊ฐ์ง ๋ชจ๋ ๊ฐ๋ฅํ๊ฒ์ด ์ฅ์ - Channel Layer
- javascript - aiohttp
- DB - database_sync_to_async : channels.db์์ ์ง์ํด์ฃผ๋ db IO ๋น๋๊ธฐ ์ฒ๋ฆฌ
pycon Django channels ์๋ฃ
https://www.youtube.com/watch?v=ehpr3YHSQlQ