Django 쿼리셋 최적화를 위한 CaptureQueriesContext

Posted by Pando on October 28, 2022

Django에서 API가 느리다면 불필요한 쿼리로 인하여 속도가 느려졌을 수도 있습니다. 따라서 쿼리셋 최적화를 통해서 성능 개선을 합니다.

CaptureQueriesContext

현재 어떤 쿼리가 요청되는지는 CaptureQueriesContext를 이용하면 됩니다.

1
2
3
4
# 원하는 코드를 감싸줌
with CaptureQueriesContext(connection=connection) as context:
    ...
    context

예시

Content라는 모델을 조회하는 API를 조회한다고 가정해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db import connection
from django.test import TestCase
from django.test.utils import CaptureQueriesContext
from contents.models import Content


class ContentListAPITestCase(TestCase):

    def test_콘텐츠_API_조회(self):
        # Given
        Content.objects.create()

        # When
        with CaptureQueriesContext(connection=connection) as context:
            response = self.client.get("/contents")
            context  # <- Debug

콘텐츠 목록을 조회하는 API에서 context.captured_queries로 현재 어떤 쿼리를 조회했는지 알 수 있습니다.

CaptureQueriesContext.png

이로써 어떤 쿼리가 사용되는지 알 수 있기때문에 혹시나 중복 쿼리나 최적화를 할 수 있는 부분이 있는지 확인할 수 있습니다.