개선 계기

기존 채팅의 소켓 통신의 경우, 채팅방 컴포넌트가 마운트될 때마다 새로운 connect가 이루어지고 언마운트 시 disconnect를 진행했습니다.

또한 ‘유저가 작성한 채팅 하이라이트’ 기능을 위해 통신 과정에서 userId를 주고받고 있었습니다.

image.png

이로 인해 아래와 같은 부분에서 개선이 필요해졌습니다.

어떻게 개선해볼까?

[개선안 1] 전역 상태로 Socket 저장하기

image.png

image.png

[개선안 2] Shared Worker Thread에 Socket 저장

<aside> <img src="/icons/drafts_lightgray.svg" alt="/icons/drafts_lightgray.svg" width="40px" />

관련 자료

따라서 소켓 연결을 효율적으로 관리하기 위해 Shared Worker를 활용했습니다.

Shared Worker는 여러 브라우저 탭이나 스레드에서 동일한 Worker를 공유할 수 있으므로, 소켓 연결을 중앙에서 관리할 수 있는 구조로 개선할 수 있었습니다.

image.png

image.png