피드로 돌아가기
Dev.toDatabase
원문 읽기
Eager Loading을 통한 쿼리 횟수 51회에서 2회로 최적화
Rails Interview #1: The N+1 Query Problem
AI 요약
Context
Active Record의 Lazy Loading 기본 동작으로 인해 루프 내부에서 연관 데이터에 접근 시 개별 쿼리가 반복 실행되는 N+1 Query 문제 발생. 50개의 게시물을 렌더링할 때 메인 쿼리 1회와 각 게시물의 작성자 조회를 위한 50회의 추가 쿼리가 발생하는 비효율적 구조 분석.
Technical Solution
- includes 도입을 통한 데이터 로드 전략 최적화 및 Rails 프레임워크의 자동 결정 구조 활용
- 별도 쿼리 실행 후 메모리 내 매핑을 수행하는 preload 방식을 적용하여 단순 데이터 조회 성능 향상
- LEFT OUTER JOIN 기반의 eager_load를 사용하여 필터링 및 정렬 조건이 포함된 복합 쿼리 최적화
- INNER JOIN 기반의 joins를 통해 메모리 로드 없이 연관 관계 필터링만 수행하는 리소스 절감 설계
- Bullet gem 및 APM 도구를 활용한 개발-운영 전 단계의 쿼리 중복 실행 감지 체계 구축
실천 포인트
1. 루프 내 연관 객체 속성 접근 시 includes 적용 여부 검토
2. 단순 조회가 아닌 연관 테이블 기준 필터링/정렬 필요 시 eager_load 사용
3. 연관 데이터 읽기 없이 필터링만 수행할 경우 joins 활용으로 메모리 낭비 방지
4. CI 파이프라인 내 assert_queries 도입을 통한 N+1 회귀 테스트 자동화