startproject๋ฅผ ์ด์ฉํด ์๋ก์ด django ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์์ฑ๋๋ค.
(์ด๋ฏธ์ง ์ถ์ฒ - django ๊ณต์ ํํ ๋ฆฌ์ผ)
์ค๋ ์์๋ณผ ๋ด์ฉ์ ์์ฑ๋ ํ์ผ ์ค wsgi.py
์ ์ญํ ์ด๋ค.
WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server communicates with web applications, and how web applications can be chained together to process one request.
WSGI ๊ณต์ ๋ฌธ์์ ๋์์๋ ๋ด์ฉ์ด๋ค.
WSGI๋ python application(python script)์ด ์น ์๋ฒ์ ํต์ ํ๊ธฐ ์ํ ํ์ค ์ธํฐํ์ด์ค์ด๋ฉฐ, ํ์ด์ฌ ํ๋ ์์ํฌ์ด๋ค.
ํ๋กํ ์ฝ๊ณผ ๋น์ทํ๊ฒ ์น์๋ฒ์ ํ์ด์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ด ํต์ ํ๊ธฐ ์ํ ๊ท์ฝ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Nginx, Apache์ ๊ฐ์ ์๋ฒ๋ค์ django, flask๋ก ์์ฑํ web application์ ์ดํดํ์ง ๋ชปํ๋ค. ์ด ๋ WSGI๋ฅผ ์ด์ฉํด ์น ์๋ฒ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ก ํต์ ํ ์ ์๋ค. (์ธ๊ตญ์ธ๊ณผ ๋ ์ฌ์ด์ ๋ฒ์ญ๊ธฐ๊ฐ ํ์ํ ๊ฒ๊ณผ ๋น์ทํ๋ค)
์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ๋ค์ด ์๋ค.ํ์ง๋ง WSGI ์์ฒด๋ ์๋ฒ๋ ํ๋ ์์ํฌ ์์ฒด๊ฐ ์๋๋ผ ์๋ฒ๊ฐ ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ํต์ ํ๋ ๋ช
์ธ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ด ๊ธฐ๋ฅ๋ค์ ๋งค๋ฒ ๊ฐ๋ฐํด์ผ ํ๋ค.
(์ฟ ํค, ์ธ์
, ์ธ์ฆ, ๋ผ์ฐํ
๋ฑ)
์ด๋ฌํ ๊ธฐ๋ฅ๋ฑ์ ๊ตฌํํด ํ์ฅํ ์ ์๊ฒ ํ ๊ฒ์ด WSGI Middleware์ด๋ค.
WSGI Middleware๋ Web Application ์ ์คํ ์ ๊ณผ ํ์ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํด์ฃผ๊ณ , ๊ทธ ์์ฒด๋ก๋ WSGI Application ์ด๋ค.
๋ํ์ ์ธ WSGI ์๋ฒ๋ก๋ Gunicorn, uWSGI, Werkzeug, mod_wsgie๋ฑ์ด ์๋ค.
์ด์ django project์ wsgi.py
๊ฐ ์ด๋ค ์ผ์ ํ๋์ง ์์๋ณด์.
wsgi.py
๋ django project์ web server๋ฅผ ์ฐ๊ฒฐํด์ค๋ค. ์ด ํ์ผ์ ๋ก์ปฌ์์ ํ
์คํธํ ๋ ์ฐ์ด๋ ๊ฐ๋ฐ ์๋ฒ(runserver)์ ํ๋ก๋์
WSGI ๋ฐฐํฌ์์ ๋ชจ๋ ์ด์ฉ๋๋ค.
wsgi์๋ฒ๋ ํธ์ถ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๋ก๋ฅผ ์ป๋๋ค. django์ default server(runserver)๋ ์ด ๊ฒฝ๋ก๋ฅผ settings.py์ ์๋ WSGI_APPLICATION์์ ์ป๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ฒฝ๋ก๋ wsgi.py
์์ ํธ์ถ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฆฌํค๋ ํ๋ก์ ํธ๋ช
.application.wsgi๋ก ๋์ด์๋ค.
WSGI ์๋ฒ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ ํ ๋ Django๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ ๋ ์ค์ ๋ชจ๋์ ๊ฐ์ ธ์์ผ ํ๋ค. django๋ ์ด ์ค์ ๋ชจ๋์ DJANGO_SETTINGS_MODULE๋ฅผ ์ด์ฉํด ๊ฐ์ ธ์จ๋ค.
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
application = get_wsgi_application()
๊ธฐ๋ณธ์ ์ผ๋ก DJANGO_SETTINGS_MODULE์ ์ค์ ์ ๋ฐ๋ฅด์ง๋ง, ๊ฐ๋ฐ์ด๋ ๋ฐฐํฌ๋ฅผ ํ ๋ ๋ค๋ฅธ ์ค์ ์ ์ด์ฉํ ์๋ ์๋ค.
django app์ ๋ฐฐํฌํ ๋ ์ฐ๋ฆฌ๋ wsgi.pyํ์ผ์ ์ด์ฉํด ์คํํ๋ค. ์๋ฅผ ๋ค์ด django๋ฅผ gunicorn์ ์ด์ฉํด heroku์ ๋ฐฐํฌํ ๋ Procfile์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์์ฑํด์ผ ํ๋ค.
Procile
web: gunicorn ํ๋ก์ ํธ๋ช
.wsgi --log-file -
์ ์ฝ๋์ ๋ป์ ํ๋ก์ ํธ๋ช .wsgi๋ชจ๋์ ์๋ ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํด gunicorn์ ๊ตฌ๋์ํจ๋ค๋ ๋ป์ด๋ค.
django์ wsgi.py๋ ์น์๋ฒ์ django project ์ฌ์ด์ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ๋ฅผ ํ ๋ wsgi.py์ ์๋ ์ค์ ์ ์ด์ฉํด wsgi server๋ฅผ ๊ตฌ๋ํ๊ณ , nginx์ ๊ฐ์ ์น ์๋ฒ์ ์ฐ๊ฒฐํด ์คํ์ํจ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
django ๊ณต์ ๋ฌธ์ - WSGI๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
MDN Docs Django ํํ ๋ฆฌ์ผ ํํธ 11 - Django ์น์ฌ์ดํธ ๊ณต๊ฐํ๊ธฐ
Spoaq ๊ธฐ์ ๋ธ๋ก๊ทธ - Flask๋ก ๋ง๋ค์ด ๋ณด๋ WSGI ์ดํ๋ฆฌ์ผ์ด์
๊ฐ์ฌํฉ๋๋ค~!