개발자 블로그

[Django ORM] 4. EagerLoading 본문

Django/Django ORM

[Django ORM] 4. EagerLoading

hayongwoon 2022. 5. 3. 23:26

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