Django를 개발하다 보면 아래 사진과 같이 브라우저에 에러 메시지가 자세히 출력되는 것을 본적이 있을 것입니다.



개발 단계에서는 개발자가 에러 정보를 알아야 하기 때문에, 자세한 에러 메시지를 보는 것은 당연합니다.

그런데 스크롤을 더 내리면 개발환경, 설정 부분을 모두 보여주기 때문에 해커는 이 정보들을 갖고 해킹을 시도할 수 있습니다.


다만 배포 모드에서 에러가 발생했을 때 이와 같은 자세한 에러 정보들을 보여주지 않으려면,

404 Not Found, 500 Internal server error 와 같이 상태코드와 에러 메시지만 반환하는 페이지를 응답하는 것이 좋습니다.





1. DEBUG

이제 Django 애플리케이션 개발이 끝나고, 배포하는 단계라고 가정해보겠습니다.

개발 모드와 배포 모드를 구분하는 설정은 settings.py 파일의 DEBUG 입니다.

DEBUG 값이 True면 개발 모드, False면 배포 모드가 됩니다.

즉, DEBUG = False 로 수정하면, 배포 모드가 되고 에러가 발생했을 때 자세한 에러 정보들을 출력하지 않습니다.


주의할 것은 개발 단계에서 Django가 정적 파일에 대한 응답을 해주지만, 배포 단계 에서는 정적 파일을 처리하지 않습니다.

따라서 서버가 아닌 환경에서 DEBUG = False 로 설정하면, CSS, js, image 파일을 불러올 수 없게 됩니다.

때문에 배포 모드에서 테스트를 하려면, 웹 서버와 Django를 연동한 상태에서 테스트를 해야 합니다.





2. handler

다음으로 애플리케이션의 urls.py 파일에 handler를 작성해야 합니다.

이미 django.conf.ulrs 모듈에 내장되어 있으므로 이를 불러오기만 하면 됩니다.

my_app/urls.py

from django.conf.urls import url, handler404, handler500

handler404 = "chatbot_app.views.error404"
handler500 = "chatbot_app.views.error500"


urlpatterns = [
...
]




3. 뷰 작성

마지막으로 views.py 파일에서 에러 페이지를 응답할 함수를 작성하면 됩니다.

def error404(request):
return render(request, "404.html", status=404)

def error500(request):
return render(request, "500.html", status=500)




이상으로 Django에서 에러 페이지를 응답하는 방법에 대해 알아보았습니다.