DJango 서버개발, 사용자 정의 에러 페이지 만들기 (404, 500 에러 처리)

Django는 파이썬으로 작성된 오픈소스 웹 프레임워크로, 빠르게 프로토타입을 만들고 배포하할 수 있게 도와주는 훌륭한 도구입니다. 웹 애플리케이션을 개발하면서, 사용자 경험을 높이기 위한 여러 가지 요소를 고려해야 하며, 그 중 하나가 바로 에러 페이지입니다. 기본적으로 Django는 여러 가지 HTTP 에러에 대해 기본 제공 에러 페이지를 갖추고 있지만, 이를 사용자 정의 페이지로 변경하여 보다 나은 사용자 경험을 제공할 수 있습니다. 이 글에서는 404 에러와 500 에러에 대한 사용자 정의 페이지를 만드는 방법에 대해 자세히 설명하겠습니다.

1. Django 프로젝트 설정하기

먼저, Django 프로젝트를 설정해야 합니다. 프로젝트를 처음부터 시작할 경우, 다음 명령어로 새 프로젝트를 생성합니다:

django-admin startproject myproject

생성된 프로젝트 폴더로 이동한 후:

cd myproject

이제 Django 서버를 실행해 보겠습니다. 아래의 명령어를 사용하여 서버를 시작합니다:

python manage.py runserver

이제 http://127.0.0.1:8000에서 기본 Django 페이지를 확인할 수 있습니다.

2. 에러 처리 페이지 만들기

Django에서 404 에러(페이지를 찾을 수 없음)와 500 에러(서버 오류) 페이지를 사용자 정의하려면, 특정 HTML 템플릿 파일을 만들어야 합니다. 먼저, 앱 내의 템플릿 디렉토리를 생성합니다. 예를 들어, myapp이라는 앱을 사용한다고 가정합시다. 다음과 같은 구조를 만듭니다:

myproject/
├── myapp/
│   ├── templates/
│   │   ├── 404.html
│   │   └── 500.html
├── manage.py
└── myproject/

2.1 404 에러 페이지 만들기

404.html 파일을 생성하고 아래와 같이 작성해보세요:

<!-- myapp/templates/404.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>페이지를 찾을 수 없습니다</title>
    <style>
        body { text-align: center; padding: 150px; }
        h1 { font-size: 50px; }
        body { font: 20px Helvetica, sans-serif; color: #333; }
        article { display: block; text-align: left; width: 650px; margin: 0 auto; }
    </style>
</head>
<body>
    <article>
        <h1>죄송합니다, 페이지를 찾을 수 없습니다.</h1>
        <p>요청하신 페이지는 존재하지 않거나 삭제되었습니다.</p>
        <a href="/ ">홈으로 돌아가기</a>
    </article>
</body>
</html>

2.2 500 에러 페이지 만들기

마찬가지로, 500.html 파일을 생성하고 다음과 같이 작성해보세요:

<!-- myapp/templates/500.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>서버 오류</title>
    <style>
        body { text-align: center; padding: 150px; }
        h1 { font-size: 50px; }
        body { font: 20px Helvetica, sans-serif; color: #333; }
        article { display: block; text-align: left; width: 650px; margin: 0 auto; }
    </style>
</head>
<body>
    <article>
        <h1>죄송합니다, 서버 오류가 발생했습니다.</h1>
        <p>지금 잠시 후 다시 시도해 주시기 바랍니다.</p>
        <a href="/ ">홈으로 돌아가기</a>
    </article>
</body>
</html>

3. Django에서 사용자 정의 에러 페이지 등록하기

이제 만든 HTML 파일을 Django에 등록하여 사용할 수 있도록 설정해야 합니다. Django 프로젝트의 settings.py 파일을 열고, 하단에 다음 코드를 추가하여 템플릿 디렉토리를 설정합니다:

# myproject/settings.py
import os

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'myapp/templates')],
        ...
    },
]

그 다음, 사용자 정의 에러 페이지를 활성화하려면, 다음과 같이 설정합니다:

# myproject/settings.py

DEBUG = False  # 디버깅 모드 끄기
ALLOWED_HOSTS = ['localhost']  # 허용된 호스트

이제 우리는 커스텀 에러 페이지를 활용할 준비가 되었습니다. Django의 모듈을 만들어 404 에러와 500 에러를 실제로 발생시켜 테스트해보겠습니다.

4. 에러 테스트하기

4.1 404 에러 테스트하기

브라우저에서 http://127.0.0.1:8000/thispagedoesnotexist와 같은 잘못된 URL에 접근하면, 우리가 만든 404.html 사용자 정의 에러 페이지가 나타나야 합니다.

4.2 500 에러 테스트하기

500 에러는 실제 상황에서 발생하기 어렵기 때문에, 의도적으로 500 에러를 발생시키기 위해 views.py 파일에 다음과 같은 코드를 추가합니다:

# myapp/views.py

from django.http import HttpResponse
from django.shortcuts import render

def trigger_error(request):
    # 이 함수는 500 에러를 발생시킵니다.
    return 1 / 0  # ZeroDivisionError를 발생시킴

위 코드를 추가한 뒤, urls.py에 이 뷰를 호출할 URL을 등록합니다:

# myapp/urls.py

from django.urls import path
from .views import trigger_error

urlpatterns = [
    path('trigger-error/', trigger_error, name='trigger-error'),  # 500 에러를 발생시키는 URL
]

이제 http://127.0.0.1:8000/trigger-error/로 접속하면, 500.html 사용자 정의 에러 페이지가 표시되어야 합니다.

5. 결론

이렇게 Django에서 사용자 정의 에러 페이지(404, 500 에러)를 만드는 방법을 살펴보았습니다. 사용자 정의 페이지를 통해 웹사이트의 일관된 디자인을 유지하고 사용자 경험을 높일 수 있습니다. 에러 페이지를 세심하게 설계하면, 방문자들이 사이트에 대한 긍정적인 인상을 받을 수 있습니다. Django의 유연성과 강력함을 활용하여 원하는 대로 웹 애플리케이션을 개발해보세요!

마지막으로, Django는 매우 많은 기능을 제공하므로, 더 많은 기능을 활용하고 싶다면 공식 문서도 참고하십시오. 다음 링크를 통해 Django의 공식 문서를 확인하실 수 있습니다: Django 공식 홈페이지.