개발자 블로그
[Django ORM] 4. EagerLoading 본문
EagerLoading이란
즉시 로딩한다는 말로 lazyloading과 반대되는 개념이라 할 수 있다. 따라서 lazyloading의 문제인 N+1과 같은 문제를 해결해 줄 수 있다! 그렇다고 해서 lazyloading이 안좋다는 말이 아니다! 때에 따라 더 효율적인 코드를 짜기 위해 다양한 방법을 알기 위함이다.
그렇다면, 즉시 로딩을 하기 위해 장고는 어떤 메소드를 제공하는가! 바로 select_related()와 prefetch_related()라는 메소드이다.
먼저 N+1 문제를 예제를 살펴보면서 알아보자!
users : Qeuryset() = User.objects.all() # lazyloading으로 아직 sql을 호출 안 함.
for user in users:
user.userinfo # Qeuryset관점에서는 정말 sql을 호출해야할 때는 여기이다.
# 따라서 100명의 유저가 있다고 하면, 이 부분에서 100번 sql을 호출을 하게 된다!
레이지 로딩은 리스트로 묶어 바로 sql을 호출할 수도 있고 select_related()와 prefetch_related()라는 메소드를 활용해서 즉시 로딩을 할 수 있다.
다음 시간에 select_related()와 prefetch_related() 메소드를 더 자세히 공부해서 블로깅을 해야겠다.
'Django > Django ORM' 카테고리의 다른 글
[Django ORM] 3. Lazy Loading & Caching (0) | 2022.05.03 |
---|---|
[Django ORM] 2. QuerySet을 잘 사용하는 법 (0) | 2022.05.02 |
[Django ORM] 1. QuerySet (0) | 2022.04.28 |
Prolog. 참고 문서 및 블로그 (0) | 2022.04.22 |