Django 개발 시 Query 확인방법

금지수·2023년 1월 8일
0

Python

목록 보기
4/4

Django 프로젝트를 진행하다보면 Query를 ORM으로 해서 작성하게 됩니다. 이때 현재 작성 중인 ORM이 효율적으로 작성되어있는지 중복, 비슷한 내용이 계속 발생하지 않는지 확인할 수 있는 툴과 방법에 대해서 소개하려고 합니다.

django-extension

DEBUG=True 일때 해당 옵션을 통해 shell 상에서 발생하는 쿼리에 대해서 확인가능합니다.

python manage.py shell_plus --ipython --print-sql

django-debug-toolbar

로컬 환경에서 테스트 일시 Debug=True (개발환경)에서 사용하게 설정되어 있고, django에서만 사용가능하며, 현재 서버와 클라이언트 간의 request, response 등 다양한 정보를 브라우저에서 쉽게 확인할 수 있는 툴. header, sql, static, cache 여러 정보를 확인 할 수 있습니다. 주로 조회하는 내용의 API를 작성시에 유용하게 사용할 수 있습니다.

# settings.py

INSTALLED_APPS = [
  'django.contrib.staticfiles',
  'debug_toolbar',
]

MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]
# project/urls.py

if settings.DEBUG:
    import debug_toolbar
    urlpatterns += [
        path('__debug__/', include(debug_toolbar.urls)),
    ]

SQL을 클릭하여 현재 API에서 호출되고 있는 Query들을 확인 가능합니다.

django logging

예상하지 못하는 문제가 생길 때 바로 확인하기 어렵다. 프로덕션일 경우에는 더욱 어렵다. django에서 기본 제공해주고 있어서 커스텀하게 바꿔서 알람 혹은 기록을 남기기 위해 사용한다.

여기서 설명할 logging의 내용은 API 개발 시 작성한 View에서 어떠한 Query를 호출하고 있는지 파악하기 위한 용도. 아래의 코드를 setting 파일에 추가하여 호출되고 있는 Query를 확인해볼 수 있다.

LOGGING = {
    'version': 1,
    'formatters': {
        'default': {
            'format': '[%(asctime)s] %(levelname)s [%(filename)s:%(funcName)s:\
                %(lineno)s] %(message)s',
            'datefmt': '%d/%b/%Y %H:%M:%S'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    }
}

다양한 툴과 방법으로 불필요한 Query를 수정 및 제거 함으로써 비용도 절감하고 작성한 프로젝트의 퍼포먼스를 향상할 수 있게 됩니다.

profile
언젠간 하겠지

0개의 댓글