장고 커스텀 500 에러 페이지 설정하기

소요 시간: 5분

장고(Django)에서 커스텀 500 에러 페이지를 설정하는 방법에 대해 정리해 보았다. 500 에러는 서버가 예기치 못한 상황에 직면했을 때 발생하는 에러인데, 이건 서버 측에서만 해결할 수 있는 문제라 사용자에게 좀 더 친절한 에러 페이지를 제공하는 게 중요하다고 생각했다. 그래서 이번에 직접 커스텀 500 에러 페이지를 설정해 보기로 했다.

먼저, 500 에러가 발생했을 때 렌더링할 뷰 함수를 작성했다. views.py 파일에 들어가서 간단한 뷰 함수 하나를 추가했다. 이 함수는 에러가 발생했을 때 '500.html'이라는 템플릿을 보여주도록 설정해줬다. 장고에서는 이런 뷰 함수를 정의하는 게 정말 간단해서 다행이었다.

# views.py
from django.shortcuts import render

def custom_500_error(request):
    return render(request, '500.html', status=500)

다음으로, 이 뷰 함수가 제대로 동작하도록 urls.py에 들어가서 설정을 바꿔주었다. 장고에서는 기본적으로 에러 핸들러가 있는데, 이를 내가 만든 커스텀 뷰 함수로 대체하는 방법도 아주 간단했다.

# urls.py
from django.conf.urls import handler500

handler500 = 'myapp.views.custom_500_error'

여기서 myapp 부분은 내 앱 이름으로 바꾸면 된다. 이걸로 500 에러가 발생할 때 내 커스텀 페이지를 보여줄 수 있게 됐다.

그다음은 중요한 작업인 HTML 템플릿 작성! 500.html 파일을 만들고, 에러가 발생했을 때 보여줄 페이지를 디자인했다. 일단 기본적으로 간단한 에러 메시지를 포함시키고, 사용자들이 에러 원인에 대해 너무 당황하지 않도록 '나중에 다시 시도해달라'는 메시지도 추가했다.

<!-- templates/500.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Server Error (500)</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
            margin-top: 50px;
        }
        h1 {
            color: #d9534f;
        }
    </style>
</head>
<body>
    <h1>Internal Server Error</h1>
    <p>We're sorry, but something went wrong on our end.</p>
    <p>Please try again later or contact support if the issue persists.</p>
</body>
</html>

그렇게 템플릿까지 만들었으니 이제 실제로 이 페이지가 제대로 동작하는지 테스트해 봐야 했다. 의도적으로 500 에러를 발생시키기 위해 test_500이라는 뷰 함수를 만들어서 강제로 예외를 발생시키는 방법을 사용했다. 그리고 urls.py에 이 테스트용 URL도 추가해주었다.

# views.py
def test_500(request):
    raise Exception("Test 500 error")
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('test500/', views.test_500),
]

이렇게 하고 나서 브라우저에서 http://localhost:8000/test500/로 접속해보니 내가 만든 500 에러 페이지가 잘 표시되는 것을 확인할 수 있었다! 정말 뿌듯한 순간이었다.

마지막으로 놓치지 말아야 할 부분이 있었다. 바로 DEBUG 설정을 꺼야 한다는 점이다. 개발 중에는 DEBUG=True로 설정되어 있어서 커스텀 에러 페이지가 보이지 않는다. 하지만 배포할 때는 반드시 DEBUG=False로 바꿔야 커스텀 페이지가 제대로 보이게 된다. 그래서 settings.py 파일을 열고 DEBUG를 False로, 그리고 ALLOWED_HOSTS 설정도 잊지 않고 추가해줬다.

# settings.py
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com']

이렇게 오늘은 장고에서 500 에러 페이지를 커스터마이징하는 방법을 완벽하게 마무리했다. 이런 설정을 통해 사용자에게 좀 더 나은 경험을 제공할 수 있을 것 같아서 기분이 좋다. 물론, 이 페이지가 자주 보이지 않기를 바라지만, 혹시라도 문제가 생기면 조금은 더 멋지게 대처할 수 있을 것 같다!


장고 리스트