더 빠르게, 그리고 무너지지 않게 — 전시 아키텍처 개선기 (1/3)
아키텍처
더 빠르게, 그리고 무너지지 않게 — 전시 아키텍처 개선기 (1/3)
두줄요약
전시 상품 API의 Redis 병목과 캐시 단일 의존 문제를 구조적으로 개선했습니다. Kafka CDC, 병렬 처리, 다단계 조회로 더 빠르고 무너지지 않는 서빙 구조를 만들었습니다.
문제 상황
- 전시 상품 API가 트래픽 집중 시 Redis 캐시 병목과 네트워크 egress 한계로 timeout 발생
- 캐시 단일 의존 구조라 pod를 늘려도 병목이 해소되지 않는 상황
- RDB식 Document 분산과 제휴점별 순차 처리로 MongoDB 조회 비용과 응답 지연이 큰 상태
원인 분석
- 최종 응답 전체를 날짜 조합별로 Redis에 통째로 저장해 중복과 payload 비대가 심화
- Redis가 애플리케이션 병목이 아니라 인프라 네트워크 한계에 먼저 도달
- 조회 경로가 파편화된 Document와 순차 IO에 묶여 있어 구조적으로 느린 상태
해결 방법
- Document 통합으로 조회 경로를 단순화하고 Virtual Thread로 제휴점별 병렬 처리 도입
- Kafka 기반 CDC로 메타 캐시를 변경 즉시 갱신하고 실시간 가격은 별도 경로로 분리
- Redis → Local Cache → MongoDB 3단계 조회와 서킷 브레이커로 캐시 장애 시에도 서비스 지속
성능/운영 포인트
- TPS 211에서 666으로 향상
- P95 응답 시간 4.13초 구간을 캐시 없이도 1초대로 단축
- Redis와 MongoDB CPU 부하를 각각 10% 이하 수준으로 완화
