Django-debug-toolbar를 통한 SQL 디버깅

2021. 12. 30. 17:08강의 정리/Django Models

반응형

Django-debug-toolbar

  • 현재 request / response에 대한 다양한 디버깅 정보를 보여줌.
  • 다양한 Panel 지원 # Panel은 창을 의미함.

SQLPanel을 통해, 각 요청 처리시에 발생한 SQL 내역 확인 가능 #Ajax 요청에 대한 지원은 불가능함. 

 

#django debug toolbar 설치

https://django-debug-toolbar.readthedocs.io/en/latest/

 

Django Debug Toolbar — Django Debug Toolbar 3.2.4 documentation

© Copyright 2021, Django Debug Toolbar developers and contributors Revision f03cd640.

django-debug-toolbar.readthedocs.io

0. urls.py에 아래 코드 추가

    path('__debug__/', include('debug_toolbar.urls')),

 

 

1. settings.py의 INSTALLED_APPS 'django_toolbar' 추가, MIDDLEWARE에 아래 코드 추가

MIDDLEWARE은 장고에서 각 요청을 처리하는 로직이 호출되기 전에 호출되는 함수들을 일컬어 부른다.

"debug_toolbar.middleware.DebugToolbarMiddleware",

 

INTERNAL_IPS 입력 #보안을 위해서 특정 IP에서만 디버깅할 수 있게 해줌

INTERNAL_IPS = ['127.0.0.1']

 

 

위 과정들을 마치면 위 사진과 같은 네비게이터 바 형식의 DDT가 나온다.
SQL의 작업 내역또한 볼 수 있다

 

 

위 과정까지 끝냈는데 혹시 DDT가 웹페이지에 나오지 않는다면 아래 방법을 따라해보자!

 

0. 레지스트리 편집기에서 컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.js를 검색해서 들어가자

 

1. 들어가면 Content Type이 보일 것이다. 들어가서 값 데이터를 application/javascript 로 바꿔준다

 

2. Django 서버를 닫았다가 다시 열면 문제가 해결될 것이다~!

 

 

만약 웹사이트를 서비스 중인데 어느 순간부터 사이트의 속도가 많이 느려졌다면, SQL을 확인해보자. 의도치않게 SQL이 과도하게 작업중인 경우들이 많다.

 

 

주의사항 : 웹페이지의 템플릿 (HTML)에 반드시 "<body>" 태그가 있어야만, django-debug-toolbar가 동작한다.

cuz : dbt의 html / script 디폴트 주입 타겟이 </body> 태그이기 때문이다.

 

 

코드를 통해서 SQL 내역을 확인할 수도 있다.

  • settings.DEBUG = True일 때만 쿼리 실행 내역을 메모리에 누적한다. # 실 서비스를 운영할때는 반드시 DEBUG를 꺼놓아야 한다. 안그러면 메모리가 과누적된다.
from django.db import connection, connections

for row_dict in connection.queries:
	print('{time} {sql}'.format(**row_dict))
    
connections['default'].queries

 

  • 쿼리 초기화

메모리에 누적되기에, 프로세스가 재시작되면 초기화

django.db.reset_queries() 통해서 수동 초기화도 가능

 

반응형