각 채팅마다 읽지 않은 인원리스트를 DB에 저장하면 되지 않을까?
특정 유저가 10,000개의 채팅을 읽지 않은 상태로 방에 접속하면 DB는 10,000개의 채팅에 대해 데이터를 갱신해야 한다.
이후, 프론트엔드는 갱신된 데이터를 다시 받아 렌더링해야한다.
이러한 고민을 멘토링을 진행하면서, 결국 채팅 데이터를 저장할 때 순서가 보장되면서 고유한 값을 채팅의 key로 저장해야한다는 생각이 들었다.
따라서, 다음과 같이 채팅에 logId를 부여하기로 백엔드에서 결정을 했다.
백엔드에서 안읽은 사람수를 계산해서 프론트에 넘겨주는 과정은 아래의 링크에서 확인해볼 수 있다.
자신을 포함한 다른 사용자가 입장하거나 나갈 때마다 unread
라는 socket 이벤트를 받는다.
unread이벤트의 응답은 다음과 같다.
key | value(채팅의 logId) |
---|---|
1 | 6578402a51a926a577b8cfaf |
2 | 6578403651a926a577b8cfd9 |
위의 데이터를 가지고 어떻게 모든 채팅의 안 읽은 사람 수를 계산할 수 있을까??
위의 데이터를 해석하자면 1명이 안 읽은 채팅 logId는 6578402a51a926a577b8cfaf 이후의 채팅이다.
2명이 안 읽은 채팅 logId는 6578403651a926a577b8cfd9 이후의 채팅이다.