Django setting.py 설정
장고(Django)의 환경 설정은 setting.py
파일에서 관리할 수 있습니다.
환경 설정에서 데이터베이스
, 디버그 모드
, 허용 가능한 호스트
, 애플리케이션
다국어 및 지역 시간
등을 설정할 수 있습니다.
settings.py
파일의 설정이 올바르지 않거나, 필요한 구성이 누락되었다면 정상적으로 실행되지 않습니다.
장고의 기본적인 설정 파일의 구성은 다음과 같습니다.
기본 디렉토리 경로
기본 디렉토리 경로는 BASE_DIR
로 나타냅니다.
BASE_DIR
은 임의적으로 디렉토리 경로를 수정한 경우가 아니라면 수정하지 않습니다.
비밀 키
SECRET_KEY
는 무작위의 50 글자로 구성되어 있으며, 암호화 서명(Cryptographic signing)
, 쿠키 데이터 해시
, 유저의 비밀번호 초기화
, 일회성 비밀 URL 생성
등에 사용됩니다.
SECRET_KEY
는 노출되어서는 안되며, SECRET_KEY
키가 노출되었을 때는 보안 기능이 상실되므로, 새로운 SECRET_KEY
를 사용해야 합니다.
SECRET_KEY
의 값은 분리해서 사용하며, 크게 환경 변수에 등록
하거나 비밀 파일로 저장
해 사용합니다.
비밀 키 분리 방법 (1)
환경 변수를 .bash_profile
, .profile
에 등록해서 사용할 수 있습니다.
Windows
의 경우에는 명령 프롬프트의 set
에서 Mac
이나 Linux
는 터미널의 export
명령어로 등록할 수 있습니다.
비밀 키 분리 방법 (2)
간단하게 *.py
파일을 생성한 다음, 변수로 등록해 사용하거나, json
파일에 SECRET_KEY
값을 저장한당므 불러와 사용할 수 있습니다.
이때, git
과 같은 버전관리 시스템을 사용한다면, .gitignore
에 해당 파일을 추가해 저장되지 않도록 합니다.
디버그 모드
디버그 모드는 프로그램을 개발할 때 사용되는 모드입니다.
True
로 설정되어 있다면, 특정 행동을 수행할 때마다 로그(Log)
를 표시합니다.
로그를 표시하게 되므로, 모든 데이터가 노출될 수 있습니다.
개발이 완료되고 운영
서버 등에 배포할 때는 필히 디버그 모드를 False
로 사용해야 합니다.
허용 가능한 호스트
허용 가능한 호스트는 운영 서버 등에 배포하여, 서비스할 때 호스트로 사용 가능한 호스트
또는 도메인
목록입니다.
서비스할 웹 사이트의 도메인이 등록되어 있지 않다면, Bad Request (400)
를 반환합니다.
해당 기능은 CSRF(Cross-site request forgery)
와 HTTP 웹 서버 헤더 공격
을 막기 위한 조치입니다.
DEBUG = True
일 때 동작하며, 기본적으로 localhost
, 127.0.0.1
는 등록해 사용합니다.
또한, 서비스하는 도메인을 등록해야 정상적으로 동작합니다. 구성은 아래와 같이 사용할 수 있습니다.
ALLOWED_HOSTS
에 로컬 호스트를 등록하지 않는다면, CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
의 오류를 반환하며 manage.py runserver
가 작동하지 않습니다.
- Tip : 모든 호스트를 허용한다면
ALLOWED_HOSTS = ['*']
으로 설정합니다.
설치된 애플리케이션
현재 장고 프로젝트에 설치된 애플리케이션의 목록을 의미합니다.
애플리케이션을 등록하지 않는다면 서비스에서 사용할 수 없습니다.
현재 프로젝트는 REST Framework
와 CORS
패키지를 등록할 예정이므로 아래와 같이 추가합니다.
애플리케이션 등록
rest_framework
와 corsheaders
는 1강에서 설치한 Django Rest Framework
와 Django CORS
입니다.
해당 애플리케이션을 등록하지 않는다면, 장고 프로젝트에서 위의 기능을 사용할 수 없습니다.
앞으로 추가할 애플리케이션
은 startapp
명령어를 통해 생성된 Python
모듈 파일을 의미합니다.
추가되는 애플리케이션은 모두 INSTALLED_APPS
목록에 추가해야합니다.
- Tip :
startapp
명령어는 앞으로 배울 앱 생성 강좌
에서 확인할 수 있습니다.
CORS 허용
CORS
를 설정했다면, 위와 같은 내용을 추가합니다.
CORS_ORIGIN_ALLOW_ALL
은 모든 사이트들의 HTTP 요청을 가능하게 합니다. 개발 중에는 DEBUG
처럼 True
로 사용합니다.
서비스 중인 서버에서는 False
로 사용하고, CORS_ORIGIN_WHITELIST
를 설정합니다.
CORS_ALLOW_CREDENTIALS
은 쿠키가 사이트 간 HTTP 요청에 포함 허용 여부를 설정합니다.
CORS_ALLOW_HEADERS
는 Access-Control-Allow-Headers를 포함하는 예비 요청(preflight request) 응답에 사용되는 헤더를 설정합니다.
허용되지 않는 헤더는 CORS
오류를 발생시킵니다. 자주 사용되는 content-type이나 authorization 등의 포함 여부를 확인합니다.
CORS_ALLOW_METHODS
는 사용 가능한 HTTP 메서드를 설정합니다.
CORS_ORIGIN_WHITELIST
는 사이트 간 요청을 허용하는 호스트 목록을 의미합니다.
미들웨어
미들웨어(middleware)
란 운영 체제와 응용 소프트웨어의 중간에서 조정과 중개의 역할을 수행하는 소프트웨어입니다.
데이터
, 애플리케이션 서비스
, 인증
, API
를 관리합니다.
장고의 미들웨어는 장고에서 발생하는 요청
및 응답
처리에 연결되는 프레임워크입니다.
미들웨어 등록
장고에서 CORS
를 허용하기 위해서는 목록의 가장 최상단에 CORS
미들웨어를 등록해야 합니다.
추가적으로 등록되는 미들웨어는 하단
에 등록해도 무방합니다.
루트 URL
루트 URL 설정에 대한 Python 경로를 나타내는 문자열입니다.
루트 URL 경로 설정으로 장고 프로젝트의 URL
설정값을 가져와 등록합니다.
템플릿
장고는 웹 사이트에서 활용할 수 있으므로 html
코드 등과 연동하여 사용할 수 있습니다.
BACKEND
는 사용할 템플릿 백엔드를 설정합니다. 아래와 같이 템플릿을 변경해 사용할 수 있습니다.
- ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’
- ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’
DIRS
은 장고가 템플릿 소스 파일을 찾아야하는 디렉터리 경로입니다.
APP_DIRS
은 장고가 설치된 애플리케이션에서 템플릿 소스 파일을 찾는 여부입니다.
OPTIONS
는 템플릿 백엔드에 전달할 추가 매개 변수입니다. 사용 가능한 매개 변수는 템플릿 백엔드에 따라 달라집니다.
템플릿 등록
템플릿을 사용하는 경우 DIRS
에 템플릿이 저장된 경로를 등록합니다.
현재 프로젝트 경로의 templates
폴더에서 템플릿을 검색합니다.
만약, 템플릿을 사용하지 않는다면 등록하지 않아도 됩니다.
WSGI 배포
현재 프로젝트를 서비스하기 위해 WSGI(Web Server Gateway Interface)의 경로를 의미합니다.
환경변수가 설정되지 않으면 프로젝트를 생성할 때 제공되는 wsgi.py
의 설정값을 사용합니다.
데이터베이스 설정
기본값으로 SQLite
가 설정되어 있으며, 특정 데이터베이스를 연동할 때 DATABASE
설정값을 변경합니다.
ENGINE
은 데이터베이스의 엔진을 의미하며, MySQL
이나 PostgreSQL
등을 연동할 수 있습니다.
MySQL 연동
MySQL
을 연동하기 위해서는 mysqlclient
을 설치합니다.
설치가 완료된 후, ENGINE
값을 수정해 사용할 수 있습니다.
PostgreSQL 연동
PostgreSQL
을 연동하기 위해서는 psycopg2
을 설치합니다.
설치가 완료된 후, ENGINE
값을 수정해 사용할 수 있습니다.
데이터베이스 설정 수정
데이터베이스를 연동시, 호스트(HOST)
, 포트(PORT)
, 이름(NAME)
, 유저(USER)
, 비밀번호(PASSWORD)
를 설정해야합니다.
호스트(HOST)
는 데이터베이스의 주소입니다. 만약, 로컬에서 사용하고 있다면, localhost
를 입력합니다.
포트(PORT)
는 데이터베이스의 포트 번호입니다. 데이터베이스에서 사용하고 있는 포트 번호를 작성합니다.
이름(NAME)
은 연동할 데이터베이스의 이름을 의미합니다. 사용할 데이터베이스의 이름을 입력합니다.
유저(USER)
는 데이터베이스에 접속할 계정 이름을 의미합니다.
비밀번호(PASSWORD)
는 접속할 데이터베이스에 설정된 비밀번호를 의미합니다.
데이터베이스 설정은 SECRET_KEY
와 같이 별도로 관리해야 합니다.
데이터베이스의 값이 노출된다면, 보안 기능이 상실되므로 큰 위험을 초래하게 됩니다.
클라우드 데이터베이스 연동
AWS RDS와 같이 클라우드 환경의 데이터베이스와 장고를 연동할 수 있습니다.
클라우드 데이터베이스의 엔드포인트
를 호스트(HOST)에 입력합니다.
클라우드 데이터베이스의 포트
를 포트(PORT)에 입력합니다.
위의 예시와 같이 연동해 사용할 수 있습니다.
비밀번호 유효성 검사
사용자 비밀번호의 강도를 확인하는 데 사용되는 유효성 검증기 목록
입니다.
UserAttributeSimilarityValidator
는 사용자의 아이디나 이메일의 속성이 비밀번호와 유사한지 확인합니다.
MinimumLengthValidator
는 비밀번호의 최소 길이를 확인합니다.
CommonPasswordValidator
는 비밀번호가 흔한 문자열인지 확인합니다.
NumericPasswordValidator
는 비밀번호가 숫자로만 구성되어있는지 확인합니다.
다국어 및 지역 시간 설정
LANGUAGE_CODE
는 장고 프로젝트에서 사용되는 국가를 설정합니다.
TIME_ZONE
은 데이터베이스의 시간대를 설정하는 문자열입니다.
USE_I18N
은 장고의 번역 시스템 활성화 여부를 설정합니다.
USE_L10N
은 현지화 된 데이터 형식의 사용 여부를 설정합니다.
USE_TZ
은 장고가 시간대를 인식하는 여부를 설정값입니다.
다국어 및 지역 시간 변경
다국어 및 지역시간을 한국 시간대에 맞춘다면, 위와 같이 변경해 사용합니다.
정적 파일 설정
STATIC_URL
은 정적 파일을 참조 할 때 사용할 URL을 의미합니다.
CSS, JavaScript, Media와 같은 정적 파일 경로를 설정합니다.
비어 있지 않은 값으로 설정되면 슬래시(/)로 끝나야합니다.
정적 파일 경로 변경
로컬 경로의 정적 파일을 사용한다면, 위와 같이 변경해 사용할 수 있습니다.
STATICFILES_DIRS
정적 파일이 위치한 경로 목록를 설정합니다.
기타 설정
이외에도 접근 가능한 IP인 ALLOW_IPS
나, 크론 작업 CRONJOBS
등을 추가할 수 있습니다.
일반적으로 해당 강좌에 설명된 설정을 활용합니다.
만약, 데이터베이스를 사용하지 않고 API
등의 기능등만 활용할 때에는 DATABASES
속성을 삭제해 사용할수도 있습니다.
DATABASES
가 없는 경우, 데이터베이스에 연결하지 않고 사용할 수 있습니다.
댓글 남기기