🗒️ 설명 --- - 채팅 읽음 이벤트는 단일 WebSocket 채널(`chat.read.{roomId}`)을 통해 전송됩니다. - 새 메시지가 도착할 때는 **상대방의 상태**가 전송되어 "상대방이 읽었다"는 신호로 동작합니다. - 내가 채팅방에 입장할 때는 **나의 상태**가 전송되어 "내가 입장했다"는 신호로 동작합니다. - 같은 채널로 서로 다른 주체의 상태가 전달되어, 클라이언트가 수신한 payload의 `memberId`를 기준으로 구분 처리해야 하는 혼선이 발생합니다. 🔄 재현 방법 --- 1. 채팅방에 A, B 두 사용자가 참여 중인 상태 준비 2. B가 채팅방에 입장 → `chat.read.{roomId}` 채널로 B(나)의 상태 전송됨 3. A가 새 메시지 전송 → `chat.read.{roomId}` 채널로 B(상대방)의 상태 전송됨 4. 두 상황에서 수신한 payload의 `memberId`가 각각 다름을 확인 📸 참고 자료 --- 📋 이벤트 전송 주체 비교: - 새 메시지 도착 → 상대방 state 전송 (sendReadEvent(opponentState)) - 방 입장 → 나의 state 전송 (sendReadEvent(myState)) - 전송 채널: `/exchange/chat.exchange/chat.read.{roomId}` (동일) ✅ 예상 동작 --- - 읽음 이벤트 채널로 전송되는 payload는 일관된 주체의 상태를 담아야 합니다. - 방 입장 시에도 상대방이 확인할 수 있는 정보(예: 상대방의 읽음 커서 또는 입장 여부)를 일관된 규칙으로 전송해야 합니다. - 클라이언트가 추가적인 분기 처리 없이도 올바르게 읽음 상태를 반영할 수 있어야 합니다. ⚙️ 환경 정보 --- - **OS**: - **브라우저**: - **기기**: 🙋♂️ 담당자 --- - **백엔드**: 이름 - **프론트엔드**: 이름 - **디자인**: 이름
🗒️ 설명
chat.read.{roomId})을 통해 전송됩니다.memberId를 기준으로 구분 처리해야 하는 혼선이 발생합니다.🔄 재현 방법
chat.read.{roomId}채널로 B(나)의 상태 전송됨chat.read.{roomId}채널로 B(상대방)의 상태 전송됨memberId가 각각 다름을 확인📸 참고 자료
📋 이벤트 전송 주체 비교:
/exchange/chat.exchange/chat.read.{roomId}(동일)✅ 예상 동작
⚙️ 환경 정보
🙋♂️ 담당자