7주차 - WIL (Weekly I Learned)
🧐 7주차 과제
1. Ranking Design - (인기도) 빠른 매진 랭킹을 Redis 기반으로 개발하고 설계 및 구현
2. Asynchronous Design - 대기열 기능에 대해 Redis 기반의 설계
🙋♀️ 고민했던 부분
◾ 처음엔 5분 주기 배치로 DB를 조회해 Redis에 예매율을 갱신하는 스케줄러 방식을 고려했다.
◽ 이유: Redis를 활용하더라도 DB에 자주 접근하지 않도록 하기 위해
◾ 하지만 스케줄러 방식으로 했을 경우 아래와 같은 단점이 있을 것 같았다.
◽ 실시간성이 떨어지고, 실제 예매 완료 시점과 랭킹 반영 시점 간의 지연 발생
◽ 불필요한 콘서트 전체 조회 쿼리가 주기적으로 발생하여 DB 부하 가능성
◽ 예매 취소나 상태 변경이 스케줄러 주기 사이에 발생하면 데이터 정확도가 낮아질 수 있음
◾ 그래서 결제 완료 시점에 Redis에 바로 반영하는 실시간 업데이트 방식으로 전환했다.
◽ Redis의 장점을 가장 잘 살리는 구조라고 생각했다. (Sorted Set 사용)
◽ Redis를 단순 조회용으로만 사용하는 것이 아니라, 쓰기(write)까지 활용하며 제대로 된 캐시+정렬 스토리지로 사용
✅ Keep (잘한 점 / 유지할 점)
- 일간/주간/월간의 랭킹 TTL 설정을 통해 데이터 유효성 관리
- 공통 로직(updateReservationRateRanking)을 통해 랭킹 갱신 처리 중복 제거
- Redis CLI를 활용해 직접 키/스코어 확인하며 값이 잘 들어가는지 검증
💬 이번 주 알게 된 것들
- Redis Sorted Set(ZADD, ZREVRANGE, ZSCORE)의 구조와 실시간 랭킹 구현 방식
- 일간/주간/월간 랭킹 구분을 위해 키 네이밍을 어떻게 구성해야 관리가 쉬운지
🔁 지난 주 목표 회고
[✔] 결제 완료 시 예매율 실시간 계산 및 Redis 저장 처리 (일간/주간/월간 랭킹)
[❌] 대기열 기능에 대해 Redis 기반의 설계
🎯 다음 주 목표
- 피드백 받았던거 보완해보기
- 대기열 구현
- 캐싱도 고민해봐야함..