PROJECT/항해플러스 Lite 백엔드

7주차 - WIL (Weekly I Learned)

yong_ღ'ᴗ'ღ 2025. 7. 6. 15:41

🧐 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 기반의 설계

🎯 다음 주 목표

- 피드백 받았던거 보완해보기

- 대기열 구현

- 캐싱도 고민해봐야함..