[Django] SQL 쿼리 로그 확인하기 (feat. 콘솔창)

반응형

django Logo

# 콘솔창에서 SQL 쿼리 보기
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
        },
    },
    "loggers": {
        "django.db.backends": {
            "handlers": ["console"],
            "level": "DEBUG",
        },
    },
}

 

 
Contents

    1. 배경

    장고에서는 DataBase API로 ORM을 쓰기 때문에 실제 사용할 때, SQL 쿼리가 어떻게 동작하는지 알고 싶은 경우가 많습니다. 특히 특정 기능에서 속도가 느린 경우, SQL 쿼리가 어떻게 되는지 먼저 확인하면 매우 좋습니다. 장고에서 extension으로 제공하는 디버깅 툴을 이용해서도 쿼리가 어떻게 수행되는지 볼 수 있지만, 콘솔 창에서도 쿼리가 수행되는 내역을 볼 수 있습니다. 이번엔 콘솔 창에서 쿼리 수행 내역을 보는 간단한 방법을 알아보겠습니다.

    2. 해결

    1) settings.py에 설정 추가

    # 콘솔창에서 SQL 쿼리 보기
    LOGGING = {
        "version": 1,
        "disable_existing_loggers": False,
        "handlers": {
            "console": {
                "level": "DEBUG",
                "class": "logging.StreamHandler",
            },
        },
        "loggers": {
            "django.db.backends": {
                "handlers": ["console"],
                "level": "DEBUG",
            },
        },
    }

    * 설명

    disable_existing_loggers를 False로 지정해, 기존 로거를 비활성화시키고, handlers에서 console 부분의 level을 DEBUG로 calss는 스트림 핸들러(콘솔 창에 보여주는 핸들러)로 설정합니다. 여기서 level은 심각한 정도를 의미합니다. DEBUG는 10의 값을 갖으며 심각한 정도가 가장 낮습니다. 순서는 DEBUG(10) < INFO(20) < WARNING(30) < ERROR(40) < CRITICAL(50) 순입니다. CRITICAL이 가장 심각합니다. 디폴트는 INFO부터 보여줍니다. 

    다음으로는 loggers에서 djanbo.db.backends의 handlers를 ["console"]로 지정해주고, level을 DEBUG로 지정해줍니다. 그러면 위에서 정의한 console 핸들러에 DEBUG부터 스트림 핸들러로 콘솔창에 보입니다.

     

    2) 결과 화면

    위 settings를 정의하고, python manage.py runserver를 다시 실행한 모습입니다. 빨간색으로 어떤 쿼리들이 몇 초가 걸려 실행되었는지가 잘 나옵니다. (0.001)은 0.001초입니다. 1초가 1000ms니까, 1ms가 걸렸다는 뜻입니다. 아래 빨간 네모 친 부분을 보면 장고가 시작하며 어떤 테이블들을 조회했는지 간략하게 표시해보았습니다.

     서버가 뜨기 전 sqlite_master와 django_migrations 테이블을 참조하는 것을 볼 수 있습니다. 그리고 /blog/ URL로 들어갔을 때, django_session -> auth_user -> blog_post 순으로 참조하는 것을 볼 수 있습니다.

    .

     

    Reference
    1. django Logo: https://codecondo.com/jobs-for-django-developers/django-framework-logo/
    2. Content: 인프런 장고 강의 https://www.inflearn.com/course/%EC%9E%A5%EA%B3%A0-%EC%84%A4%EA%B3%84%EC%B2%A0%ED%95%99-%EC%9E%85%EB%AC%B8/
     

    장고 설계철학으로 시작하는 파이썬 장고 입문 - 인프런 | 강의

    장고 개발을 위한 필수 파이썬 문법과 장고 설계철학에 대한 깊은 이해를 통해, 장고 웹개발을 제대로 시작해보세요., - 강의 소개 | 인프런...

    www.inflearn.com

    반응형

    댓글

    Designed by JB FACTORY