이번 포스팅은
wsgi
기반으로 동작하는django
서비스를 대상으로 합니다.
Django 서비스를 실제 서버에 배포하면 보안을 위해 프로젝트 폴더의 settings.py
파일 안의 DEBUG
항목을 False
로 두고 배포합니다. 이렇게 디버그모드를 끌 경우 장고에서 기본적인 보안을 제공해 줍니다. 그러나 만약 View나 Model에서 Exception이 발생했을 경우 클라이언트에 흰색의 500에러 화면만을 띄워줍니다.
이 경우 개발자에게도 장고의 에러 화면을 보여주지 않습니다. 따라서 Exception이 발생할 경우 개발자(혹은 운영자)에게 에러를 전송할 필요가 있습니다. wsgi
기반으로 서버를 구동할 경우 에러로그는 Apache2나 NginX등의 웹서버의 접근/에러로그가 있으며 Wsgi의 에러로그로 두가지가 있습니다.
장고서버의 경우에는 Wsgi의 에러로그에 로그를 쌓습니다. 그러나, Django 프로젝트에 LOGGERS
설정값을 추가해줘야 하며 에러 트래킹을 따로 설정해줘야 합니다.
이때 사용할 수 있는 것이 Sentry와 같은 서비스입니다.
이번 가이드는 Sentry for Django를 기반으로 진행합니다.
Sentry 설치하기
우선 raven
을 설치해 줍니다.
raven
은 Sentry를 위한 Python패키지입니다.
1 | pip install raven --upgrade |
Sentry settings.py
에 설정하기
장고 프로젝트의 settings.py
파일 안 INSTALLED_APPS
에 아래 줄을 추가해줍니다.
1 | INSTALLED_APPS = [ |
이제 Sentry용 환경변수를 추가해 줍시다. 아래 DSN_URL
은 Sentry에 로그인 하신 후 Sentry for Django의 코드 부분을 복사하면 알 수 있습니다.
1 | # settings.py 파일 import문 아래에 raven을 import해주세요. |
Sentry wsgi.py
에 설정하기
이제 장고 프로젝트 폴더 안의 wsgi.py
파일을 아래와 같이 수정해봅시다.
1 | import os |
자, 이제 Sentry 사용을 위한 기본적인 설정이 끝났습니다. 여러분의 서비스를 다시 원래 서버에 배포해보세요.
Exception이 발생하면..
이제 여러분이 잡아주지 않은 Exception이 발생할 경우 아래와 같이 이메일이 옵니다.
이메일의 Issue 링크를 클릭하면 아래와 같이 에러로그 페이지가 나옵니다.
조금 더 알아보기
이번 포스팅에서는 장고의 Wsgi에서 발생하는 에러(Exception)을 Sentry 미들웨어를 통해 관리합니다. 그러나 유저에게 500페이지를 보여주는것은 여전합니다.
만약 여러분이 미리 잡아준 상황을 Sentry로 보내고 싶으시다면 Sentry를 logging와 함께 쓰기를 참고하세요.