.ENV를 배우며 ENV 파일 안에 DEBUG를 같이 넣어주는 게시글들이 많았다.
그래서 DEBUG가 무엇인지 알아보았다.
DEBUG = 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업 과정
DEBUG 항목은 기본값이 True다. 하지만 장고 공식 문서에는 "운영 환경에서 DEBUG는 반드시 False로 해야 한다"고 되어 있다.
장고는 실행 도중에 오류가 발생하면 DEBUG가 True인 경우 오류 내용을 화면에 상세하게 출력한다. 이때 settings.py 파일과 urls.py 파일에 설정한 항목들도 노출된다.
이 말은 파이보를 DEBUG=True 상태로 운영하면 오류 발생시 서버 정보가 노출된다는 말과 같다.
이것은 어쩌면 서버 해킹 등의 매우 나쁜 결과를 초래할 수도 있다. 따라서 운영 환경에서는 반드시 DEBUG 항목을 False로 설정해야 한다. -점프 투 장고-
위와 같은 이유로 서버 배포시 DEBUG를 통해 서버 정보가 노출될 수 있다고 한다.
프로젝트를 만들때 노란 배경에 오류 코드와 함께 url 정보가 나오는 모습을 볼 수 있었는데 그 항목들이 보안에 위배되는것을 알 수 있었다.
DEBUG=false
DEBUG=false 사용시 주의해야할 점으론 media, static 파일에 대해 문제가 생긴다.
urlpattern += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
그동안 media, static 파일 사용시 사용한 코드는 DEBUG=True 상태에서 runserver로 서버를 작동할때만 사용된다.
Debug=False에서는 Nginx나 Apache에서 /static과 /media 경로와 연결되는 디렉토리를 지정설정해주거나 urls.py에 등록되어 있지 않으면 에러가 발생한다.
해결방안
from django.views.static import serve
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
urls.py에 위 라이브러리와 코드를 추가하면 정상적으로 media파일과 static파일에 관한 링크를 Debug 모드가 아닐 때에도 불러올 수 있다.