본문 바로가기
캠프 개발일지

개발일지 - 14일차: 랭킹 시스템 구현

by JHBang 2024. 3. 13.

코로나에 걸리는 바람에 3월 7일부터 일주일간 아무것도 못했다.....

 

역시 건강하고 봐야 개발이든 뭐든 할 수 있구나를 뼈저리게 느꼈다. 열 때문에 머리가 지끈거려 도저히 컴퓨터 앞에 앉아있지를 못했다. 하지만 드디어 12일부터 좀 움직일 만 해져서 개발을 이어나가고자 한다.

 

글을 작성하는 지금은 3월 13일이지만 밤을 새 버렸기 때문에 3월 12일에 했던 내용을 오늘 간단히 정리해 보겠다. 

 

일단 저번에 목표에 좋아요 기능을 추가했었다.

 

이 좋아요를 기준으로 실시간으로 확인할 수 있는 목표 랭킹을 구현해야 했다.

 

처음 생각한 목표 랭킹 구현은 단순히 랭킹 조회 api를 불러올 때 목표 테이블에서 10개 씩 like 기준 내림차순으로 불러올 계획이였다.

 

하지만 실시간으로 변하는 좋아요 수를 적용하고 제대로 사용하기 위해선 데이터의 읽고쓰기가 빠른 redis를 이용해서 좋아요와 목표 id만을 가진 sortedset 데이터를 저장하기로 결정했다.

 정리하자면

 

1. SortedSet 사용해서 각 post의 ID를 멤버로, 좋아요 수를 스코어로 사용하여 정렬된 세트에 저장

2. post의 좋아요 수가 변경될 때마다 Redis의 SortedSet에 있는 해당 post의 점수를 업데이트하여 실시간으로 랭킹 갱신

3. 사용자가 랭킹을 조회할 때, Redis에서 정렬된 세트의 상위 N개 항목을 즉시 가져와 빠르게 랭킹 정보를 제공

 

사실 정확히 맞게 설계한 건지는 잘 모르겠다.

 

굳이 redis를 사용해서 이렇게 구현할 지 아니면 처음 생각한 대로 DB에서 바로 받아올 지 고민이다.

 

내일 튜터님께 여쭤볼 예정이다. 관련 내용을 다음 개발 일지에 작성해야겠다.