뒤로
한경민
·
기절초퐁 문제 해결 사례 3 - 유저 접속 상태 변경 알림 최적화
0 문제 정의
- 기존 구현에서 모든 유저의 접속 상태 변화가 모든 접속된 유저에게 하나의
userActivityWebSocket 이벤트로 공지된다. - 프론트엔드에서 유저가 접속 상태가 변화된 타 유저의 정보를 보고 있던 보고 있지 않던 이벤트를 받으면 확인하는 과정이 요구된다. 유저가 상태 변화가 일어난 타 유저의 정보를 보고 있지 않다면 불필요한 연산 소모.
1 해결책
- 관련 Pull Request : ✨ feat : 유저 컴포넌트를 보고 있는 유저에게만 activity 변경 정보 전달 #185
- 서버에서
GET /user/:userId/info와 요청자가 머무르고 있는 UI 정보를 바탕으로:userId로특정되는 유저 정보를 보고 있는 유저들의 목록 in-memory 로 저장하고, 변화 시 업데이트. - socket.io 의 room 기능 활용하여 특정 유저의 접속 상태가 변경될 때, 해당 유저의 정보를 보고 있는 유저들을
activity-${userId}라는 room 에 넣어두고, 해당 room 에만userActivity이벤트 전송.
2 리뷰
- 장점
- 불필요한 네트워크 전송 감소. 서버는 각 클라이언트가 필요로 하는 유저들의 접속 상태 변화만 이벤트로 공지한다.
- 단점
- 유저 접속, 접속 해제, UI 변경 시 서버 연산량 증가.
- socket.io room 개수 증가 및 서버가 in-memory 로 저장해야할 데이터량 증가.
1
댓글
로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다.