Django

7 - 웹 서버(Apache) 연동

초코chip 2023. 3. 14. 12:41

웹 서버(Apache)와 연동

웹 애플리케이션 개발 완료 후 실제 서비스를 위해 개발 환경 => 운영 환경으로 옮겨야 함

즉, 설정 사항 변경 필수

 

1) mod_wsgi 확장 모듈

아파치에서는 웹 서버 관련해서 여러 확장 모듈을 제공

여러 확장 모듈 중 파이썬 웹 애플리케이션을 실행할 수 있는 mod_wsgi을 소개

 

mod_wsgi = 파이썬 웹 애플리케이션 표준 규격인 WSGI(Web Server Gateway Interface)를 구현한 확장 모듈

  즉, 아파피(Apache)에서 파이썬 웹 애플리케이션을 실행하는데 사용

 

2) Django의 웹 서버 연동 원리

프로젝트 뼈대를 만들 때, 프로젝트이름/wsgi.py 파일이 생성

이 모듈이 Django와 웹 서버를 연결하는데 필요한 모듈

 

wsgi.py 모듈 안에 WSGI 규격에 따라 호출 가능한 웹 애플리케이션 객체를 정의

객체명은 반드시 application으로 정의

 

이 application 객체는 아파치같은 사용 웹 뿐만 아니라, Django 개발용 웹 서버(runserver)에서도 같이 사용

아파치 runserver
httpd.conf 설정 파일에서 WSGIScriptAlias 지시자를 통해 지정 settings.py의 WSGI_APPLICATION 변수를 통해 지정

즉, 웹 서버는 이 application 객체를 호출하여 Django 애플리케이션을 실행

 

하지만 application 객체를 호출하기 전에 현재 프로젝트 및 모든 애플리케이션들에 대한 설정 정보를 로딩해야함

이 설정 정보를 담고있는 settings 모듈 위치 지정 방법

아파치 runserver
wsgi.py에서 설정 정보 지정

import os
os.environ['DJANGO_SETTINGS_MODULE']
       = '프로젝트명. settings'
실행 시 지정

python manage.py runserver --settings = 프로젝트명.settings

 

3)  상용 서버 적용 전 Django 설정 변경

아파치 같은 상용 웹 서버와 연동하는 단계는 개발용 웹 서버(runserver)에서 정상적으로 동작하는 것을 확인한 후 단계

상용 서버에 적용하기 전에 보안, 성능 등을 고려하여 설정을 변경해야함 - settings.py

 

  • DEBUG 설정 값 - settings.py

개발 모드에서는 에러 발생 시 디버그를 위해 브라우저에 여러 정보 출력.

상용 모드에서는 보안을 위해서 출력하면 안됨

settings.py 에서 DEBUG = False 로 셋팅

  • ALLOWED_HOSTS 설정 값

HTTP Host 헤더를 변조하여 CSRF 공격을 할 수 있기때문에 방지

ALLOWED_HOSTS = [ u '192.168.56.101' ]

  • STATIC_ROOT

개발 서버에서는 이미지, css, js 등의 정적 파일들을 알아서 잘 찾아주지만,

사용 모드에서는 정적 파일들이 어디에 있는지 알 수 있도록 설정

 

STATIC_ROOT = os.path.join(BASE_DIR, "www_static")

 

이 STATIC_ROOT 항목은 Django의 collectstatic 명령 실행 시 정적 파일들을 한 곳에 모아주는 디렉토리

 

collectstatic 명령은 다음과 같이 실행

 - python manage.py collectstatic

 

주의! STATICFILES_DIRS 항목에 STATIC_ROOT 항목에서 정의된 디렉토리가 포함되면 안됨

    STATICFILES_DIRS 항목에 정의된 디렉토리에서 정적 파일을 찾아 STATIC_ROOT에 복사해주기 때문

  •