장고 SQL 디버깅 방법

guava·2021년 11월 14일
0

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

django-debug-toolbar

  • 공식문서 링크 : https://django-debug-toolbar.readthedocs.io/en/latest/
  • request/response에 대한 디버깅 정보를 보여준다.
  • Ajax 요청에 대한 지원은 불가능하다.
  • SQLPannel을 통해 각 요청 처리시에 발생한 SQL확인이 가능하다.
  • 템플릿에 body 태그가 있어야만 동작한다. 미들웨어를 통해 body 태그로 패널을 삽입해준다.

설치

pipenv 환경 설치 명령

# pipenv
pipenv install django-debug-toolbar --dev

settings.py에 추가

# settings.py
INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',
    # ...
    'debug_toolbar',
]

STATIC_URL = '/static/'

# ...

# 미들웨어에서 디버깅 정보를 삽입해준다.
MIDDLEWARE = [
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
]

# ...

# 디버그 툴바에 접근 가능한 IP 설정. 민감한 정보가 많기 때문에 꼭 설정하기.
INTERNAL_IPS = [
    # ...
    '127.0.0.1',
    # ...
]

프로젝트 URLConf에 추가

# project_root/project/urls.py
import debug_toolbar
from django.conf import settings
from django.urls import include, path

urlpatterns = [
    ...
    path('__debug__/', include(debug_toolbar.urls)),
]

QuerySet의 query 속성 참고

다음과 같이 쿼리문을 출력한다 → print(Post.objects.all().query)

django-querycount

설치

pipenv 환경 설치 명령

# pipenv
pipenv install django-querycount --dev

settings.py에 추가

MIDDLEWARE = [
    # ...
    'querycount.middleware.QueryCountMiddleware',
    # ...
]

기타

  • settings.DEBUG=True로 서버가 실행될 때에는 쿼리 실행내역을 메모리에 누적된다.
  • 서버가 리로드될때에 클리어되므로, 프로덕션에서 settings.DEBUG=True설정을 하면 메모리 누수가 발생할 수 있다.
  • django.db.reset_queries()를 통해서 수동 초기화가 가능하다.

0개의 댓글