🧠 이번 주에 새로 배운 것
- 대용량 트래픽 환경일 경우 랭킹 집계와 계산을 분리해서 반영하는 테크닉을 알게 되었습니다. 초 실시간은 보장되지 않지만, 쓰기 부하를 완화하기 위한 결과임을 알았습니다.
- 텀블링 윈도우, 슬라이딩 윈도우 개념을 알게되었고, 슬라디이 윈도우 기법으로 랭킹을 구현하는 방법을 알게 되었습니다. 콜드 스타트가 없는 장점이 있지만 구현이 복잡한 단점이 있습니다.
💭 이런 고민이 있었어요
- 조회, 주문, 좋아요 이벤트의 랭킹 집계시 랭킹 일자를 어떤 시간으로 반영해야할지 고민이였습니다. 멘토님이 선호한 시간은 client가 보내준 시간 이였습니다.
- score가 동일할 경우 일관된 정렬을 보장하기 위해 tie-breaker를 적용하였습니다. productId 저장시 고정된 자리수를 0으로 채워(zero-padding) 내림차순으로 2차 정렬을 하였습니다.
💡 앞으로 실무에 써먹을 수 있을 것 같은 포인트
- 실시간 랭킹 구현시 트래픽 환경과 요구사항 복잡도에 따라 실시간 랭킹 구현을 적절히 구현할 수 있는 안목이 생겼습니다.
- zset의 활용법을 익혔습니다. 실시간 랭킹이 아니여도 zset을 적용하기 용이한 요구사항이 생긴다면 큰 병목없이 구현할 자신감이 생겼습니다.
🤔 아쉬웠던 점 & 다음 주에 해보고 싶은 것
- 코드 구조와 책임이 아쉬운 면이 있습니다. 서비스간의 책임을 재할당하여 의존성 방향을 적절하게 수정할 예정입니다.