피드로 돌아가기
Dev.toBackend
원문 읽기
N+1 Query 최적화를 통한 응답 속도 2.1s에서 80ms로 개선
My Node.js app was making 47 database queries per request. I had no idea.
AI 요약
Context
Express와 PostgreSQL 기반 환경에서 개별 쿼리 실행 속도는 빠르나, 요청당 과도한 DB 호출이 발생하는 N+1 문제 발생. Static Analysis 및 일반적인 APM으로 탐지 불가능한 Runtime 쿼리 패턴의 병목 지점 파악 필요.
Technical Solution
node:diagnostics_channel활용을 통한 Monkey-patching 없는 비침습적 관찰 구조 설계- HTTP Transaction별 Query Fingerprint 추적을 통한 단일 요청 내 동일 쿼리 반복 실행 탐지
- AST layer에서 SQL Value를 즉시 제거하여 데이터 프라이버시를 보장하는 Shredding 메커니즘 적용
WHERE author_id = ANY($1)기반의 Batch Query 도입으로 네트워크 왕복 횟수 최소화- 대용량 JSON 파싱 작업을 Worker Thread로 이관하여 Event Loop Lag 개선 및 메인 스레드 블로킹 방지
- 불필요한 컬럼 조회를 제거한 Explicit Column Selection으로 메모리 오버헤드 감소
실천 포인트
1. SELECT * 사용을 지양하고 필요한 컬럼만 명시적으로 조회하는가?
2. Loop 내부에서 DB 쿼리를 호출하는 N+1 구조를 Batch Query나 DataLoader로 해결했는가?
3. 메인 스레드에서 실행되는 동기적 CPU 작업(예: 대형 JSON 파싱)을 Worker Thread로 분리했는가?
4. 메모리 힙 증가 추세가 일정한지 확인하여 Unbounded Cache나 Closure 누수를 점검했는가?