
백엔드
10초 타임아웃에서 벗어나기까지의 여정
두줄요약
체험단 활동목록 조회 API의 10초 타임아웃을 대용량 데이터에 맞는 인덱스와 쿼리 분리로 해결했습니다. 조회 구조를 바꿔 p99 지연시간을 20ms 이하로 낮췄습니다.
문제 상황
- 체험단 활동목록 조회 API에서 일부 사용자의 페이지 로딩이 10초 이상 걸리거나 타임아웃 발생
- 1억 건 이상으로 증가한 데이터와 복잡한 화면 요구사항으로 기존 쿼리의 한계 노출
원인 분석
DATE_FORMAT사용으로 인덱스 활용 불가LEFT JOIN과 다중 정렬 조건으로 옵티마이저 최적화 저해- 16개 컬럼 동시 조회로 네트워크 전송량 과다
해결 방법
- 날짜 전용 컬럼과 커버링 인덱스 재설계로 인덱스 온리 스캔 유도
- 조회를 ID 목록, 기본 정보, 당첨자 정보로 분리
- 애플리케이션 메모리에서 결과 결합으로 조인 복잡도 완화
성능/운영 포인트
- 불필요한 인덱스 정리로 변경 작업과 버퍼 풀 경합 완화
- 데이터 전송량 99% 이상 감소로 I/O 병목 해소
- p99 지연시간 350ms 수준에서 20ms 이하로 안정화