뒤로
한경민
한경민 ·

기절초퐁 문제 해결 사례 3 - 유저 접속 상태 변경 알림 최적화

0 문제 정의

  • 기존 구현에서 모든 유저의 접속 상태 변화가 모든 접속된 유저에게 하나의 userActivity WebSocket 이벤트로 공지된다.
  • 프론트엔드에서 유저가 접속 상태가 변화된 타 유저의 정보를 보고 있던 보고 있지 않던 이벤트를 받으면 확인하는 과정이 요구된다. 유저가 상태 변화가 일어난 타 유저의 정보를 보고 있지 않다면 불필요한 연산 소모.

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

댓글

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.