django-debug-toolbar django-silk
request와 response를 분석해줘서 디버깅에 필요한 정보를 제공해준다.
CBV를 쓰면 다음과 같은 오류가 나올 때가 있다.
Internal Server Error: /
Traceback (most recent call last):
File, "/.envs/oc/lib/python.7/site-packages/django/core/handlers/base.py", line 132, in get_response response =, wrapped_callback(request, *callback_args, **callback_kwargs)
File, "/.envs/oc/lib/python.7/site-packages/django/utils/decorators.py",
line 145, in inner
return func(*args, **kwargs)
TypeError: __init__() takes exactly 1 argument (2 given)
장고에 대한 모든 에러가 함께 나오기 때문에 분석하기 어려울 수 있는데, 이럴 때는 urls.py
파일을 확인해보면 된다.
path('', HomePageView, name='home'),
다음과 같이 코드가 짜져있을 것이다.
path('', HomePageView.as_view(), name='home'),
as_view()
를 추가해주면 된다.
다음과 같은 상황에서 사용하면 좋다.
- 테스트 케이스 안에서
- HTTP 요청을 받았을 때
- 장고 커맨드를 디버깅할 때
![NOTE] production에 배포할 때 pdb breakpoints를 남겨두면 안된다.
ipdb
를 사용하면 ipython shell에서 디버깅을 할 수 있다.
Sublime Text, Textmates, Vim, Emacs 등의 텍스트 편집기를 사용할 때는 Python 및 Django 전용 옵션이나 플러그인을 찾아서 사용해라. 코드를 강조 표시하고 PEP-8 위반 사항을 식별하는 기능만 있어도 큰 도움이 된다.
IDE를 최대한 활용하지 않는다면 IDE 세팅하는 수고를 왜 하는지?
Log를 전체 다 읽는 것보다 Sentry 같은 log aggregation service를 사용하는 것이 좋다.
Production의 환경을 최대한 똑같이 만들어서 디버깅하는 것이 좋다. 다음과 같은 부분을 확인해야 한다.
- 방화벽 또는 기타 보호 조치 뒤에 프로덕션 환경과 동일한 원격 서버를 설정한다.
- 개인 식별 정보를 제거하도록 각별히 주의하면서 프로덕션 데이터를 복사한다. 여기서 개인 식별 정보란 이메일 주소를 포함하여 개별 사용자의 중요한 세부 정보를 식별하는 데 사용될 수 있는 모든 것을 의미한다.
제품 외부(예: 방화벽 뒤)에서 프로덕션 미러에 완전히 액세스할 수 없는 경우 설정.DEBUG를 True로 변경하는 것도 고려할 수 있다.
Superuser에게 500 에러시 디버깅 정보를 보여주는 middleware가 있다.
다음과 같이 사용할 수 있다.
Note
Example 35.7: UserBasedExceptionMiddleware
# core/middleware.py
import sys
from django.views.debug import technical_500_response
class UserBasedExceptionMiddleware:
def process_exception(self, request, exception):
if request.user.is_superuser:
return technical_500_response(request, *sys.exc_info())
ALLOWED_HOSTS 설정은 Django 사이트에서 제공할 수 있는 호스트/도메인 이름을 나타내는 문자열 목록이다. settings.DEBUG가 True일 때 기본값이 ['localhost', '127.0.0.1', '[::1]']로 설정된다. 그래서 개발 환경에서는 문제 없이 작동한다. 하지만 settings.DEBUG가 False로 설정되면 ALLOWED_HOSTS는 기본적으로 빈 목록으로 설정된다. 빈 ALLOWED_HOSTS 및 settings.DEBUG가 True로 설정된 상태에서는 Django가 시작되지 않는다. 로그를 확인하면 CommandError 오류가 발생하고 있음을 알 수 있다.
ALLOWED_HOSTS를 작성하는 것을 절대 까먹지 마라
Feature flag는 기능을 켜고 끌 수 있는 기능이다. 특정 유저에게만 특정 기능을 제공하고 싶거나 먼저 테스트해보고 싶을 때 사용할 수 있다.
django-waffle는 feature flag를 구현하는 패키지이다.
Feature flag가 적용된 기능을 Unit Test할 때는 켜져있는 경우와 아닌 경우 모두 테스트해야한다.