Django SQL 로그 남기기

구경회·2022년 6월 16일
6
post-thumbnail

웹 서버에서 성능 문제의 주범은 비효율적인 DB 접근이다. 이 부분을 개선하기 위해서는 ORM이 만들어내는 쿼리를 잘 이해하고, 그 쿼리의 실행 계획 등을 잘 확인할 필요가 있다. 하지만 장고는 이 부분에서 다른 프레임워크들에 비해 어느정도 불편함이 있다.

가령 레일즈의 경우 별 다른 설정 없이도 로그에서 날라가는 쿼리와 그 쿼리를 촉발한 위치를 확인할 수 있는데, 장고는 이런 것들을 확인하기 위해서 장고 디버그 툴바등의 힘을 빌어야 한다.


위와 같이 레일즈의 경우 쿼리와 쿼리를 유발한 코드를 확인할 수 있다.


물론 훌륭한 디버깅 툴바가 있어 좀 더 편하게 탐색할 수 있다. 하지만 디버그 툴바는 다음 단점들을 가지고 있다.

  1. 브라우저에서 제대로 활용이 가능하다. 하지만 REST API 용도로 활용할 경우 modheader 같은 툴을 또 브라우저에 설치해야한다.
  2. 초기 설정이 번거롭다.
  3. 1번과 엮여 알파 서버 등의 경우 쿼리 로그 등을 제대로 확인하기 불편하다.

따라서 실제 날라간 쿼리를 로그에 남기는 것이 필요하다.

로깅 설정

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        ...생략...
    },
    "handlers": {
        "debug-console": {
            "level": "DEBUG",
            "class": "logging.StreamHandler",
        },
    },
    "loggers": {
        "django.db.backends": {
            "level": "DEBUG",
            "handlers": ["debug-console"],
        },
    },
}

위와 같이 설정하면 로그가 남는다. 핸들러의 경우 커스텀하게 설정이 가능한데, 별 다른 설정 없이 해도 별 문제가 없어 저렇게 사용했다. 이제 DEBUG 이상의 로그를 받는 설정이 되어 있을 때 SQL 로그를 확인할 수 있다.

참고자료

profile
즐기는 거야

0개의 댓글