대시보드를 구현하면서 겪은 문제와 해결 과정
대시보드는 대회 진행중에 변동되는 순위를 실시간으로 보여줄 수 있어야 한다. 그렇기 때문에 약 5초마다 서버는 데이터를 보내주어야 한다.
여러 통신방법을 고민하다가 웹소켓을 사용하기로 결정하였다. 이미 대회 진행시 사용중인 웹소켓을 재 사용할 수 있고, 오버헤드가 낮기 때문에 사용을 결정하였다.
보낼 데이터를 어떻게 저장하고 있고, 어떻게 정제해 보내주어야 할지 막막한 심정이었다.
데이터 요청마다 db를 조회하여 보내주면, 대시보드를 보는 사람이 많아질수록 서버에 부담이 매우 커지게 된다. 그래서 in-memory db인 redis를 사용해 데이터를 더 빠르게 조회할 수 있도록 하였다.
보내줄 데이터를 임시로 만들어 보았다.
이 데이터를 어떻게 저장하고 있어야 하는지 많은 고민을 했다. 처음에는 저 상태 그대로 저장하는 방법을 생각했다. 근데 이러면 매번 요청마다 정렬을 해주어야 하고 삽입도 O(n)이 걸리고 페이지네이션은 또 어떻게 해야 할지 감이 오지 않았다.