1억 건 데이터베이스에서 10초 걸리던 API를 20ms로 개선한 무신사의 성능 최적화 전략
🤖 AI 추천
1억 건 이상의 대용량 데이터베이스 환경에서 복잡한 API 성능 문제를 겪고 있거나, 커버링 인덱스, 인덱스 최적화, 쿼리 분리 등 데이터베이스 성능 개선 경험을 쌓고 싶은 백엔드 개발자 및 DBA에게 추천합니다.
🔖 주요 키워드

핵심 기술
무신사 커뮤니티개발팀은 '내 체험단 활동' 목록 조회 API에서 발생한 10초 이상 소요되는 성능 문제를 해결하기 위해, 데이터 폭발적 성장과 복합적인 화면 요구사항에 초점을 맞춰 인덱스 최적화, 함수 사용 지양, 불필요한 컬럼 조회 최소화, 쿼리 분리를 통한 성능 개선을 성공적으로 수행했습니다.
기술적 세부사항
- 문제 분석: 1억 건 이상 축적된 데이터와 복잡한 화면 요구사항으로 인한 기존 쿼리의 성능 병목 발생.
- 병목 식별:
DATE_FORMAT()
함수의 인덱스 미활용,LEFT JOIN
과 복잡한ORDER BY
절로 인한 옵티마이저 비효율, 16개 컬럼의 불필요한 대량 데이터 전송. - 1단계 개선: 사용률 낮은 인덱스 제거 및
DATE_FORMAT()
함수 대신 날짜 전용 컬럼(신청일자
) 추가. - 2단계 개선:
WHERE
,ORDER BY
조건과 함께SELECT
절에 필요한 컬럼을 포함하는 커버링 인덱스 설계 시도. - 3단계 개선:
SELECT
절의 불필요한 컬럼(상품명, 상품옵션 등)이 커버링 인덱스에 포함되지 않아 발생하는 실제 테이블 접근 문제 해결. - 최종 솔루션:
SELECT r.신청번호
로 최소한의 데이터만 조회하는 완벽한 커버링 인덱스 쿼리 실행.- 애플리케이션 레벨에서 여러 개의 단순 쿼리로 데이터를 분리하고, 메모리 상에서 데이터를 조인하는 방식 채택.
- 1단계: 정렬된 ID만 조회 (커버링 인덱스 활용)
- 2단계: 필요한 기본 정보 조회 (신청번호 IN ...)
- 3단계: 당첨자 정보 조회 (신청번호 IN ...)
- 4단계: 애플리케이션에서 데이터 결합
- 쿼리 분리 및 애플리케이션 조인 이유: 각 테이블 독립적 최적화, JOIN 복잡도 제거, 확장성, 디버깅 용이성 확보.
개발 임팩트
- 성능 향상: p99 Latency를 350ms에서 20ms 이하로, 평균 응답 시간을 100ms에서 10ms로 개선 (각각 17배, 10배 향상).
- 안정성 확보: 10초 타임아웃 문제를 100% 해결하여 안정적인 서비스 제공.
- 데이터 전송량 감소: 50KB에서 400 bytes로 99% 이상 감소하여 네트워크 I/O 병목 해소.
- I/O 패턴 개선: Random I/O에서 Sequential I/O로 전환하여 처리 속도 향상.
- 기술적 유연성: 향후 파티셔닝, 샤딩, NoSQL 도입 등 확장 전략 고려.
- 프로세스 개선: ADR(Architecture Decision Record) 작성 및 점진적 개선(Iterative Improvement) 문화 정착.
커뮤니티 반응
- (내용에 언급되지 않음)
톤앤매너
이 글은 대용량 데이터베이스 환경에서 발생하는 실질적인 성능 문제를 분석하고, 단계별 해결 과정을 상세히 공유하며, 기술적 의사결정 과정과 그 효과를 명확한 지표로 제시하는 전문적이고 정보 전달 중심의 톤을 유지하고 있습니다.
📚 관련 자료
MySQL
본문에서 다루는 데이터베이스 시스템이 MySQL이며, 쿼리 최적화, 인덱스 활용, 성능 튜닝 등 대부분의 기술적 논의가 MySQL의 특성을 기반으로 합니다.
관련도: 95%
Hibernate ORM
애플리케이션 레벨에서 데이터를 조회하고 결합하는 과정은 ORM(Object-Relational Mapping) 프레임워크를 통해 이루어질 가능성이 높으며, Hibernate는 Java 환경에서 널리 사용되는 ORM입니다. 쿼리 분리와 데이터 결합 방식에 대한 이해를 돕습니다.
관련도: 70%
Apache Bench (ab)
API 성능 테스트 및 측정에 사용될 수 있는 도구입니다. 본문에서 개선 전후의 Latency 및 타임아웃 발생률과 같은 지표를 제시하는 데 있어, 이러한 벤치마킹 도구의 역할이 중요함을 시사합니다. (Note: Apache Bench는 GitHub 프로젝트가 아니지만, 관련 기술 맥락에서 중요도가 높습니다.)
관련도: 60%