You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CQRS: Store Service(Write/RDBMS)와 Search Service(Read/Elasticsearch) 분리.
Kafka: 서비스 간 느슨한 결합을 유지하며 데이터 최종 일관성 보장. 장애 발생 시 메시지 유실 방지.
3. Redis ZSet을 활용한 대기열 관리
문제: RDBMS COUNT(*)로 대기 순번을 계산할 경우 대량 트래픽 시 DB 부하 심각.
해결:Redis Sorted Set (ZSet) 도입.
성과: 대기 순번 확인 시간 복잡도를 $O(\log N)$으로 단축하여 실시간 응답 속도 개선.
🏀 트러블슈팅 (Troubleshooting) & 성능 개선
1. 인기 맛집 예약 트래픽 제어 (Distributed Queue)
상황: 인기 매장 예약 오픈 시 트래픽 폭주로 인한 Connection Refused 및 응답 지연 발생 (평균 446ms, 오류율 0.91%).
해결: Redis ZSet 기반의 대기열 시스템 도입.
진입 제어: 스케줄러가 'Score=예약제한시간'을 기준으로 N명씩만 예약 가능 상태로 전환.
최적화: 대기열 진입 시에만 순위를 계산하고, 이후 알림은 '입장 인원 수'만 전달하여 클라이언트가 순위를 계산하도록 하여 서버 연산 최소화.
결과: 안정적인 트래픽 처리 및 서버 리소스 효율화 달성.
2. 웨이팅 번호 발급 동시성 이슈 해결
* **문제:** JMeter 테스트 시 동시 요청에 대해 중복된 웨이팅 번호가 발급되는 현상 발생.
* **시도 1 (DB Lock):** `PESSIMISTIC_WRITE` 락 적용 → 정합성은 해결되었으나 대기 시간 누적으로 성능 저하 (72ms).
* **시도 2 (Redis Atomic):** **Redis `INCR` 명령어 사용**.
* **결과:** 락 없이 원자성(Atomicity)을 보장하며 처리 속도 **72ms → 0.002ms**로 획기적 개선.
3. 리뷰 조회 성능 최적화 (Index & Cursor Paging)
* **문제:** 100만 건 데이터 조회 시 Full Table Scan 발생 (61.96ms), Deep Pagination 시 성능 저하.
* **해결:**
1. 복합 인덱스 적용 (`idx_store_created_at`).
2. `Offset` 방식 대신 `Cursor` 기반 페이징(No-Offset) 도입.
* **결과:** 쿼리 실행 시간 **32.45ms → 0.025ms (약 1,298배 개선)** 및 일정한 조회 속도 $O(1)$ 보장.