피드로 돌아가기
Dev.toBackend
원문 읽기
N+1 쿼리 제거 및 Index 최적화로 Throughput 400배 향상
How I Improved API Throughput by 326 and Reduced Latency by 99.7% in a .NET Backend
AI 요약
Context
60만 건의 차량 데이터와 100만 건의 포스트를 처리하는 .NET 기반 마켓플레이스 시스템의 성능 병목 발생. 특히 고빈도 읽기 요청이 발생하는 /cars 및 /feed 엔드포인트에서 DB Connection Timeout과 높은 에러율이 나타난 구조적 한계 노출.
Technical Solution
- Lazy Loading으로 인한 N+1 쿼리 문제를 해결하기 위해 Select() 기반의 Projection Query를 도입하여 단일 SQL 문으로 데이터 추출 최적화
- Full Sequential Scan 방지를 위해 WHERE, ORDER BY, JOIN 조건에 최적화된 Composite Index를 설계하여 검색 효율성 극대화
- 불필요한 엔티티 전체 로드 대신 API 응답에 필요한 필드만 정의한 DTO 기반 쿼리를 통해 DB-App 서버 간 데이터 전송량 최소화
- 데이터 변경 빈도가 낮은 차량 리스트에 대해 Redis 기반의 Short-term Caching을 적용하여 Database Load 분산
- k6를 활용한 Stage Ramp 패턴 부하 테스트로 실제 트래픽 규모에 따른 임계점 파악 및 성능 검증 수행
실천 포인트
- Read-heavy API 설계 시 EF Core의 Lazy Loading 대신 Explicit Projection 사용 여부 검토 - 10만 건 이상의 테이블에서 WHERE 및 ORDER BY 절에 사용되는 컬럼의 Index 생성 여부 확인 - 개발 환경이 아닌 운영 환경 수준의 Seed Data를 활용한 Load Testing 수행 - DB-App 간 전송 데이터 최소화를 위한 전용 Projection 모델(DTO) 적용