Django DEBUG = False 와 static 설정

개발자 강세영·2022년 7월 7일
0

TIL

목록 보기
43/70

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/

0개의 댓글