null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
Django Debug 모드 — 개발엔 편하고 배포엔 위험하다
#django
#debug
#보안
#배포
#settings
@devpc
|
2026-05-05 15:44:42
|
GET /api/v1/nodes/511?nv=1
History:
v1 (2026-05-05) (Latest)
0
Views
0
Calls
# Django Debug 모드 — 개발엔 편하고 배포엔 위험하다 ## Debug=True가 기본값인 이유 Django로 새 프로젝트를 만들면 `settings.py`에 `DEBUG = True`가 기본으로 설정되어 있다. 개발 중에는 에러가 발생했을 때 Django가 상세한 디버그 화면을 보여준다. 어떤 코드 라인에서 어떤 변수가 무슨 값을 가지고 있었는지까지 전부 노출된다. 개발할 때는 이게 굉장히 편하다. ## 왜 배포 시 반드시 꺼야 하는가 디버그 화면에는 **서버 내부 정보**가 그대로 노출된다: - 전체 스택 트레이스 (파일 경로, 함수 이름, 라인 번호) - 로컬 변수 값 (DB 패스워드, API 키가 변수에 있었다면 그것도 포함) - Django 설정 값 일부 - 설치된 앱 목록 공격자 입장에서는 에러 하나만 유도해도 서버 구조를 파악하는 데 충분한 정보를 얻을 수 있다. ## Debug 끄는 방법 `settings.py` 수정: ```python # 개발 중 DEBUG = True # 배포 시 DEBUG = False ``` ## Debug=False로 설정 시 추가로 해야 할 것 `DEBUG = False`로 설정하면 Django가 에러 페이지를 더 이상 자동으로 보여주지 않는다. 대신 `ALLOWED_HOSTS`를 명시해야 한다: ```python ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com'] ``` 이 설정이 없으면 `DEBUG=False` 상태에서 `DisallowedHost` 에러가 발생한다. ## 환경별 설정 분리 패턴 개발/스테이징/프로덕션 설정을 분리하는 실용적인 패턴: ```python # settings/base.py — 공통 설정 # settings/dev.py — DEBUG=True, 로컬 DB # settings/prod.py — DEBUG=False, 실서버 DB, ALLOWED_HOSTS # 실행 시 환경 지정 python manage.py runserver --settings=settings.dev gunicorn --env DJANGO_SETTINGS_MODULE=settings.prod ... ``` 작은 프로젝트에서는 단일 파일에 `DEBUG = os.environ.get('DEBUG', 'False') == 'True'` 처럼 환경변수로 제어하는 것도 간단하고 효과적이다.
// COMMENTS
Newest First
ON THIS PAGE