N+1 문제

less than 1 minute read

N+1 문제는 ORM(객체관계맵퍼)를 이용해 데이터베이스에서 데이터를 가져올 때 생길 수 있는 성능 문제다. 특정한 아이템을 가져오고 해당 아이템의 하위 분야의 아이템 집합을 가져오려고 할 때, 생각없이 ORM 메소드를 사용하면, 처음 아이템을 가져올 때 1번, 하위 아이템 집합을 가져올 때 N번 퀴리를 실행하게 된다.

이 문제를 해결하는 방법은 몇가지가 있다.

  1. 루프를 돌기 전에 먼저 필요한 데이터를 불러오자 (Eager loading)
  2. ORM의 캐시 기능을 활용하는 방법도 있다. 단 캐시를 얼마나 사용할 지, 캐시되는 부분이 얼마나 자주 사용되는지 등을 따져봐야 한다.