Django 풀스택으로 개발할 때 DEBUG 설정변수를 False로 하는 경우 생기는 static 파일 경로문제
404 페이지가 제대로 나오는지 확인하기 위해 DEBUG = False 설정을 해봤다가 이 문제에 대해 알게됐다.
DEBUG = True로 하면 django에서 뭔가 에러가 났을 때 에러에 대한 자세한 내용이 페이지에 표시된다. 개발 단계에서는 유용하지만 배포 후 이런 내용이 그대로 드러나면 보안이 굉장히 취약해진다.
따라서 실제 배포 환경에서는 settings.py에서 DEBUG = False여야 하고 개발 환경에서만 True를 써야한다.
문제는 DEBUG = False 으로 놓고 runserver로 실행하면 settings에 있는 STATIC과 MEDIA 폴더 경로를 사용할 수 없게되기 때문에 템플릿 html에 css가 적용되지 않아 페이지가 제대로 표시되지 않는다.
아마 보안문제(URL 경로) 때문에 막아놓은것 같은데 CSS 파일같은 static 파일들이나 media 파일들은 따로 웹서버를 만들고 그 웹서버의 경로를 사용하게 하는 방법이 정석인 것 같다.
그러나 디버그를 끄면서도 python manage.py runserver --insecure
로 실행하면 static 경로는 적용이 된다. 단 media는 적용 안된다고 한다.
그냥 개발 단계에서는 DEBUG = True로 해놓고 쓰다가 배포 직전에 static과 media 경로 설정을 해주자.
urls.py 에서 다음과 같이 설정하면 디버그를 끈 상태에서도 static과 media 경로를 사용할 수 있다고 한다.
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}),
출처
https://senticoding.tistory.com/82
https://gaussian37.github.io/python-django-non-debug-mode/