N+1 쿼리 문제, 발견하고 고치는 법
·
IT
목록 화면을 여는데 쿼리 로그에 같은 모양의 SELECT가 수백 줄 찍힌다면 N+1 문제다. ORM을 쓰는 프로젝트에서 가장 흔하게 만나는 성능 문제이고, 원인을 알면 고치는 것은 대체로 한 줄이다. 이 글은 왜 생기는지, 어떻게 발견하는지, 어떻게 고치는지를 순서대로 다룬다.어떻게 생기는가주문 목록을 보여주면서 각 주문의 사용자 이름을 함께 출력한다고 하자.orders = Order.objects.all()[:100] # 쿼리 1번for o in orders: print(o.user.name) # 주문마다 1번씩, 총 100번첫 줄에서 주문 100건을 가져오는 쿼리가 한 번 나간다. 그다음 반복문에서 o.user에 접근할 때마다 사용자를 가져오는 쿼..