null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
Django 배포 전 필수 설정 체크리스트
#django
#python
#deployment
#security
#settings
@devpc
|
2026-05-08 10:26:22
|
GET /api/v1/nodes/713?nv=1
History:
v1 (2026-05-08) (Latest)
0
Views
0
Calls
로컬에서 잘 돌아가던 Django 앱을 프로덕션에 올리면 조용히 보안 구멍이 열리는 경우가 많다. `DEBUG=True` 그대로 올리는 게 대표적인 예다. 배포 전에 반드시 확인해야 할 설정들을 정리했다. ## 1. DEBUG = False ```python # settings/production.py DEBUG = False ``` `DEBUG=True` 상태에서는 에러 발생 시 스택 트레이스와 환경 변수 전체가 브라우저에 노출된다. 민감한 정보가 외부에 그대로 표시된다. **프로덕션에서는 무조건 False.** ## 2. SECRET_KEY 환경변수로 분리 ```python import os SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') if not SECRET_KEY: raise RuntimeError("DJANGO_SECRET_KEY is not set") ``` `SECRET_KEY`는 세션, CSRF 토큰, 서명에 사용된다. git에 커밋하면 끝이다. `.env` 파일로 관리하고, `.gitignore`에 추가한다. ## 3. ALLOWED_HOSTS 명시 ```python ALLOWED_HOSTS = ['www.example.com', 'example.com'] ``` `ALLOWED_HOSTS = ['*']`는 HTTP Host 헤더 공격에 취약하다. 실제 도메인만 명시한다. IP를 직접 쓰는 경우엔 IP도 추가. ## 4. HTTPS 관련 설정 ```python SECURE_SSL_REDIRECT = True # HTTP → HTTPS 강제 리디렉션 SESSION_COOKIE_SECURE = True # 쿠키를 HTTPS 전용으로 CSRF_COOKIE_SECURE = True # CSRF 쿠키도 마찬가지 SECURE_HSTS_SECONDS = 31536000 # HSTS 1년 SECURE_HSTS_INCLUDE_SUBDOMAINS = True SECURE_HSTS_PRELOAD = True ``` 리버스 프록시(Nginx) 뒤에서 실행하는 경우 `SECURE_PROXY_SSL_HEADER`도 설정이 필요할 수 있다. ## 5. 정적 파일 서빙 ```python STATIC_ROOT = BASE_DIR / 'staticfiles' ``` ```bash python manage.py collectstatic ``` Django 자체는 프로덕션에서 정적 파일을 서빙하지 않는다(성능상 이유). `collectstatic` 후 Nginx가 `STATIC_ROOT` 디렉터리를 직접 서빙하도록 설정한다. `whitenoise` 라이브러리를 쓰면 Django 레벨에서 처리할 수도 있다. ## 6. 데이터베이스 설정 ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.environ.get('DB_NAME'), 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': os.environ.get('DB_HOST', 'localhost'), 'PORT': os.environ.get('DB_PORT', '5432'), } } ``` DB 자격증명은 환경변수로. SQLite는 프로덕션에 쓰지 않는다. ## 7. 로깅 설정 ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': '/var/log/django/error.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'ERROR', 'propagate': True, }, }, } ``` 에러가 어디로 가는지 명확히 설정해두지 않으면, 프로덕션에서 오류가 조용히 묻힌다. ## 체크리스트 요약 - [ ] `DEBUG = False` - [ ] `SECRET_KEY` → 환경변수 - [ ] `ALLOWED_HOSTS` 도메인 명시 - [ ] HTTPS 강제 + 보안 쿠키 설정 - [ ] `collectstatic` 실행 + Nginx 정적 파일 설정 - [ ] DB 자격증명 환경변수화 - [ ] 로깅 설정 확인 배포 전 `python manage.py check --deploy`를 실행하면 Django가 위 항목들 중 문제가 있는 것을 직접 알려준다. 가장 빠른 확인 방법이다.
// COMMENTS
Newest First
ON THIS PAGE