개요
Python 기반 웹 프레임워크인 Django 애플리케이션을 Windows 기반 Apache 웹 서버와 연동하는 과정을 설명한다. 먼저 가장 단순히 연동하는 방법은 Django 내장 개발 서버(runserver)를 사용하여 서비스 제공을 하되 포트번호만 80으로 변경하는 것이다. 또는 Apache의 프록시 모듈을 이용해서 Apache에서 Django 개발 서버로 HTTP 통신을 경유시키는 것이다. 하지만 이는 정적 데이터 처리를 전문으로 하는 Apache 서버가 아무일도 안한 채 데이터를 경유시키므로 비효율적이다. 게다가 Django 개발 서버는 말 그대로 개발 및 디버깅을 위한 목적으로 제공되는 서버이므로 보안에 취약하며 성능이 상당히 나쁘다. 그러므로 Apache와 mod_wsgi 모듈을 연동하는 과정을 통해 Django 애플리케이션을 서비스하도록 한다.
제한 사항
이 문서는 Windows 플랫폼을 기반으로 Apache 웹 서버를 구동한다. Nginx에서 주로 사용하는 uWSGI 및 Gunicorn 모듈은 Windows 기반 바이너리를 제공하지 않는다. Apache용 모듈인 mod_wsgi는 C 컴파일러로 직접 컴파일을 시도(pip install mod_wsgi)하거나, 비공식 모듈을 다운로드 받아야 한다. Windows는 UNIX 스타일의 fork() 시스템 호출을 제공하지 않으므로 하위 프로세스가 부모 프로세스 메모리 이미지를 상속하는 프로세스 생성이 불가능하다. 그래서 mod_wsgi 모듈을 내장모드/데몬모드 중 내장모드로만 실행할 수 있다. 결국 Django 앱을 수정하면 Apache 서버를 재시작해야 한다는 뜻이다.
wsgi.py
Django 애플리케이션 코드가 WAS(WSGI)에서 호출될 수 있도록 핸들러를 생성해야 하는데 Django 프로젝트 폴더의 wsgi.py 파일이 그 역할을 한다.