django 프로젝트 구조
config 폴더
- 프로젝트 설정 파일과 웹 서비스 실행을 위한 파일이 들어 있다. 이 폴더 이름은 django-admin startproject 명령을 사용해 프로젝트를 만들 때 정해진 것이며 꼭 config라는 이름을 사용할 필요는 없다.
urls.py
- 특정 기능을 수행하기 위해 접속하는 주소를 URL이라고 하고 이를 설정해 주는데, 그 설정을 이 파일에 기록한다.
wsgi.py
- 웹 서비스를 실행하기 위한 WSGI 관련 내용이 들어있다. 특별히 변경할 일은 거의 없다.
manage.py
- 장고의 다양한 명령어를 실행하기 위한 파일이다. 임의로 변경하지 않도록 주의해야 한다.
setting.py
BASE_DIR
- 프로젝트 루트 폴더, 설정 파일이나 py파일 등에서 프로젝트의 루트 폴더를 찾아 그 하위를 탐색한다거나 하는 일들을 빈번하게 수행한다. 이 때문에 변수로 미리 준비해 두는 값이다.
SECRET_KEY
- 다양한 보안을 위해 사용한다. 세션 값의 보호나 비밀번호 변경 시 사용되는 보안 URL을 만드는 등의 일에 주로 사용한다. 임의로 변경할 수 있으나 변경하면 로그인이 풀리는 등의 부작용이 있다. 또한 정해진 값은 외부에 노출되어서는 안된다.
DEBUG
- 디버그 모드를 설정한다. True일 경우 다양한 오류 메시지를 즉시 확인할 수 있다. 실제로 배포할 때는 False로 바꾸며, 이때는 다른 설정값을 이용해 관리자가 오류 메시지를 받아 보게 설정할 수 있다.
ALLOWED_HOST
- 현재 서비스의 호스트를 설정한다. 개발 시에는 비워두고 사용하나 배포시에는
*
이나 실제 도메인을 기록한다.*
은 위험하기 때문에 실제 도메인을 기록하기를 권장하고 있다. 이는 DNS Rebinding을 막기 위한 조치이다. 장고 1.10.3 버전이 업데이트 되는 시점부터 Debug 모드가 False일 때 ALLOWED_HOST 값이 비어있으면 서비스를 시작할 수 없다.
INSTALLED_APPS
- 장고 웹 서비스는 다양한 앱의 결합으로 만들어진다. 현재 프로젝트에서 사용하는 앱의 목록을 기록하고 관리한다. 나중에 직접 만들 앱들도 여기에 다 기록한다.
MIDDLEWARE
- 장고의 모든 요청/응답 메시지 사이에 실행되는 특수한 프레임워크들이다. 주로 보안에 관한 내용들이 많다.
ROOT_URLCONF
- 기준이 되는 urls.py 파일의 경로를 설정한다.
TEMPLATES
- 장고에서 사용하는 템플릿 시스템에 관한 설정들이다. 템플릿 해석 엔진과 템플릿 폴더의 경로 등을 변경하는데 쓰인다.
WSGI_APPLICATION
- 실행을 위한 WSGI 어플리케이션을 설정한다.
DATABASES
- DB 관련 설정이다.
AUTH_PASSWORD_VALIDATORS
- 비밀번호 검증을 위한 설정이다. 기본적으로 들어있는 검증 규칙은 사용자 정보와 유사한지, 숫자로만 만들었는지, 너무 짧은지 등을 검증한다.
LANGUAGE_CODE 등
- 이하 내용은 다국어에 관한 설정들이다. 장고는 손쉽게 다국어 서비스를 만들 수 있는 기능을 갖고 있다.
- wsgi.py
wsgi.py 파일은 WSGI 어플리케이션 구동을 위해 사용되는 파일이다. 실제로는 웹 서버와 장고 어플리케이션 사이에 통신 역할을 담당하는 것이 WSGI(Web Server Gateway Interface)이다.
웹 서버는 Nginx나 Apache 같은 서버 컴퓨터에서 사용자의 요청을 받아서 처리해주는 역할을 하는 프로그램이다. 웹 서버가 사용자의 역할을 적절하게 해석하여 장고로 구동되고 있는 웹 서비스에 전달을 해줘야 하는데, 이 때 중간 역할을 하는 무엇인가가 필요하다. 왜냐하면 중간 역할자 없이는 효율적으로 요청을 전달할 수가 없고, 특정 언어로만 제작되지 않는 웹 서비스의 특성상 웹 서버는 여러가지 언어로 된 프로그램들과 통신을 하여야 하기 때문이다.
웹 서버 프로그램과 장고 웹 어플리케이션 사이에서 미들웨어처럼 동작하면서 웹 서버는 요청이 있을 경우 정보와 콜백 함수를 WSGI에 전달한다. 그럼 이 정보를 해석하여 장고 웹 어플리케이션에 전달한다. 그럼 장고 웹 어플리케이션은 파이썬 스크립트를 이용해 정보를 처리하고 끝낸 결과를 다시 WSGI에 전달한다. 그럼 이 정보를 콜백 함수를 이용해 웹 서버에 다시 전달하는 방식으로 서버, WSGI, 장고 웹 어플리케이션이 상호작용하며 동작한다.
이를 위해 wsgi.py 파일을 이용해 어플리케이션을 구동한다.
'django' 카테고리의 다른 글
Django와 Axios를 이용한 좋아요 구현하기 (0) | 2022.01.15 |
---|---|
Django CBV 기반 CRUD 만들기 (0) | 2022.01.09 |
Django Deploy (0) | 2021.12.07 |
Django - docker (0) | 2021.12.07 |
Django AWS 연동 (0) | 2021.12.07 |