Skip to content

❗[버그][채팅/WebSocket] 읽음 이벤트 채널에서 상황별로 다른 주체의 상태가 전송됨 #765

Description

@Chuseok22

🗒️ 설명

  • 채팅 읽음 이벤트는 단일 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:
  • 브라우저:
  • 기기:

🙋‍♂️ 담당자

  • 백엔드: 이름
  • 프론트엔드: 이름
  • 디자인: 이름

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

작업전작업 시작 전 준비 상태

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions