
백엔드
무신사 성장과 함께 거대해져온 600줄짜리 쿠폰 쿼리와의 아름다운 이별
두줄요약
600줄짜리 쿠폰 쿼리를 분리·캐싱·로직 이관으로 개선한 사례를 소개했습니다. 평균 지연시간과 DB 사용률을 낮추며 유지보수성과 비용 효율을 높였습니다.
문제 상황
- 상품 상세 페이지에서 최적 쿠폰을 실시간 제공해야 하는 요구로 쿠폰 조회 쿼리 복잡도 증가
- 600줄 규모의 레거시 쿼리가 트래픽 증가를 감당하지 못하고 인프라 비용 부담으로 이어짐
원인 분석
- JOIN, SubQuery, UNION, GROUP BY, ORDER BY, CASE 등이 뒤섞인 무거운 단일 쿼리 구조
- 데이터베이스가 계산과 조회를 모두 떠안으며 유지보수성과 성능이 함께 악화
해결 방법
- 쿠폰 조회를 여러 개의 짧은 쿼리로 분리하고 애플리케이션에서 결과 조합
- 자주 조회되지만 변동이 적은 데이터는 캐싱 처리
- 일부 조건 판단과 연산을 Application 로직으로 이동
성능/운영 포인트
- S3, Memcached, 분산 저장 등 여러 시도 후 최소 DB 사용 방향으로 정리
- 평균 latency 110ms에서 83ms로 개선, DB 사용률도 크게 감소
- 쿼리 단순화로 유지보수성과 인프라 비용 절감 효과 확보