관련 PR : https://github.com/urdego/Urdego_Frontend/pull/149
이 코드는 웹소켓을 통해 서버에서 실시간 알림 메시지를 수신하고, 이를 UI에 반영하는 기능을 구현하고 있습니다. 웹소켓 연결 관리, 구독 등록, 그리고 메시지 처리 로직이 각각 분리되어 있어 유지보수와 확장이 용이하도록 설계되어 있습니다.
전역 상태 관리:
Zustand를 이용하여 웹소켓 클라이언트의 연결 상태를 전역으로 관리합니다. 이 스토어는 웹소켓 연결 여부와 클라이언트 인스턴스를 보관합니다.
pending subscription 개념:
웹소켓 연결이 이루어지기 전에 구독 요청을 저장할 수 있도록 pending subscription 기능이 도입되어 있습니다. 이 방식은 연결이 완료되면 저장된 구독 정보를 기반으로 자동으로 재구독을 수행합니다.
구독 함수:
별도의 훅에서는 사용자 고유 식별자(예: userId)를 기반으로 알림 채널에 구독을 등록합니다.
메시지 처리:
수신된 알림 메시지는 특정 타입(예를 들어 초대 메시지)인지 확인한 후, 관련 토스트 알림을 띄워 사용자에게 표시합니다.
초기 웹소켓 연결:
컴포넌트 마운트 시 웹소켓 연결 상태를 확인하고, 연결이 안 되어 있으면 연결을 시도합니다.
구독 등록 및 pending subscription 추가:
사용자 세션에서 가져온 userId를 기준으로 알림 구독을 등록합니다.
알림 처리:
수신된 알림 메시지가 초대 관련 메시지인 경우, 토스트 알림을 통해 사용자에게 알리고, 사용자의 선택에 따라 대기방 정보 저장과 라우팅 등의 후속 처리를 진행합니다.
이 구조는 웹소켓 연결과 구독, 그리고 메시지 처리 로직을 명확하게 분리하여 관리하고 있습니다. 전역 상태 관리를 통한 pending subscription 기능은 연결이 불안정한 환경에서도 안정적으로 메시지를 처리할 수 있도록 돕습니다. 또한, 실시간 알림 구독과 관련된 로직을 별도의 훅으로 분리함으로써 Home 컴포넌트에서는 UI와 사용자 인터랙션에 집중할 수 있는 구조를 갖추고 있습니다.