Django Academy · 강의

M2M을 위한 prefetch_related

다대다 데이터를 효율적으로 일괄 로드합니다

레슨 3/413개 단계

M2M을 위한 prefetch_related은(는) CoddyKit의 무료 Django Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Django Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

prefetch_related 살펴보기

prefetch_related는 다대다 관계와 역방향 연결처럼 조인할 수 없는 관계를 지능적으로 묶어서 처리합니다. 📦

여러 번이 아닌 두 번의 쿼리

하나의 거대한 조인 대신 관련 행을 위한 두 번째 쿼리를 실행한 다음 Python에서 서로 연결합니다.

기본 호출

이전과 마찬가지로 관계 이름을 prefetch_related에 전달하면 Django가 조회를 자동으로 묶어 처리합니다.

authors = Author.objects.prefetch_related('books')

N+1보다 두 번이 나은 이유

저자를 위한 쿼리 하나와 모든 저자의 도서를 위한 쿼리 하나로 총 두 번만 이동합니다. 순회하는 저자 수와 관계없이 동일합니다.

for author in authors:
    print(author.books.count())

여러 행에 적합

각 객체가 여러 행과 연결되는 경우 사용하세요. 다대다 필드와 역방향 외래 키에 특히 적합합니다.

역방향 관계도 작동함

저자가 자신의 모든 도서에 접근하는 경우처럼 역방향 접근자에서 특히 효과적입니다. select_related로는 처리할 수 없는 경우입니다.

두 도구 함께 사용하기

하나의 쿼리셋에 두 최적화 도구를 연결하여 각 도구가 가장 잘 처리하는 관계 유형에 사용할 수 있습니다.

Book.objects.select_related('author').prefetch_related('tags')

Prefetch로 제어하기

Prefetch 객체를 사용하면 가져올 관련 행을 필터링하거나 정렬하여 세밀하게 제어할 수 있습니다.

from django.db.models import Prefetch
Author.objects.prefetch_related(
  Prefetch('books', queryset=Book.objects.filter(year=2024)))

Python에서 처리하기

일치하는 작업은 SQL이 아니라 Python에서 수행됩니다. 따라서 규모가 큰 다대다 조인에서 발생하는 행 폭증을 피할 수 있습니다.

반복문 안에서 신중하게 필터링하기

루프 안에서 미리 가져온 집합에 filter를 호출하면 다시 새로운 쿼리가 실행됩니다. 일괄 처리의 이점을 유지하려면 Prefetch를 사용하세요.

두 도구, 하나의 목표

단일 연결에는 select_related를, 여러 연결에는 prefetch_related를 사용하세요. 둘을 함께 사용하면 거의 모든 뷰에서 N+1 문제를 해결할 수 있습니다. 🚀

빠른 확인

이 경우에 적합한 최적화 도구를 선택하세요.

복습

prefetch_related는 다대다 연결과 역방향 연결을 두 번째 쿼리로 일괄 조회한 뒤 Python에서 연결합니다. 완전한 처리를 위해 select_related와 함께 사용하세요. ✅

무료로 시작

AI 튜터와 함께 Python을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
30
레슨
120

자주 묻는 질문

“M2M을 위한 prefetch_related” 강의는 무료인가요?

네 — “M2M을 위한 prefetch_related” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Django Academy 강의 전체를 잠금 해제할 수 있습니다. Django Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“M2M을 위한 prefetch_related”에서 뭘 배우나요?

다대다 데이터를 효율적으로 일괄 로드합니다 브라우저에서 직접 실행하는 실습 코드로 Django Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Django Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Django Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“M2M을 위한 prefetch_related” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Django Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Django Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. N+1 문제 찾기
  2. ForeignKey를 위한 select_related
  3. M2M을 위한 prefetch_related
  4. Debug Toolbar로 프로파일링
← Django Academy(으)로 돌아가기