웹 서버에서 성능 문제의 주범은 비효율적인 DB 접근이다. 이 부분을 개선하기 위해서는 ORM이 만들어내는 쿼리를 잘 이해하고, 그 쿼리의 실행 계획 등을 잘 확인할 필요가 있다. 하지만 장고는 이 부분에서 다른 프레임워크들에 비해 어느정도 불편함이 있다.
가령 레일즈의 경우 별 다른 설정 없이도 로그에서 날라가는 쿼리와 그 쿼리를 촉발한 위치를 확인할 수 있는데, 장고는 이런 것들을 확인하기 위해서 장고 디버그 툴바등의 힘을 빌어야 한다.
위와 같이 레일즈의 경우 쿼리와 쿼리를 유발한 코드를 확인할 수 있다.
물론 훌륭한 디버깅 툴바가 있어 좀 더 편하게 탐색할 수 있다. 하지만 디버그 툴바는 다음 단점들을 가지고 있다.
따라서 실제 날라간 쿼리를 로그에 남기는 것이 필요하다.
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 로그를 확인할 수 있다.