Skip to content

[FIX] 개인 채팅방 동시 생성 시 중복 방 및 참여 상태 불일치 해결 #640

Description

@Dimo-2562

🛠️ 수정할 부분

개인 채팅방 생성/참여 및 첫 메시지 처리 흐름에서 동시성에 안전하지 않은 부분을 수정합니다.

배경

현재 문제

  • 같은 두 사용자가 동시에 개인 채팅방을 생성하면 중복 direct room이 생길 수 있습니다.
  • 기존 방을 반환하는 경우에도 요청자의 ChatRoomMember 상태가 PENDING이면 JOINED로 전환되지 않을 수 있습니다.
  • DirectChatRoomActivationService가 countByChatRoomId(chatRoomId) == 1 및 sender 제외 PENDING 멤버 기준으로 동작해, PENDING 사용자가 먼저 메시지를 보내는 경우 본인이 계속 PENDING으로 남을 수 있습니다.

수정 방향

  • direct room을 (작은 memberId, 큰 memberId) pair로 정규화하고 DB unique 제약으로 중복 생성을 방지합니다.
  • 개인 채팅방 생성 로직을 idempotent하게 변경합니다.
    • A→B와 B→A가 같은 방으로 수렴해야 합니다.
    • unique 충돌 발생 시 기존 방을 재조회해 반환합니다.
  • 기존 direct room 반환 시 요청자의 membership이 PENDING이면 JOINED로 전환합니다.
  • 첫 메시지 기반 PENDING 활성화 로직을 count == 1에 의존하지 않도록 개선합니다.
  • 동시 생성/참여 상황에 대한 회귀 테스트를 추가합니다.

확인할 테스트 시나리오

  • A→B, B→A 동시 생성 요청 후 direct room이 1개만 존재합니다.
  • 반대 방향 요청도 같은 chatRoomId를 반환합니다.
  • 기존 방 반환 시 요청자가 PENDING이면 JOINED가 됩니다.
  • PENDING 사용자가 먼저 메시지를 보내도 PENDING으로 고착되지 않습니다.
  • 기존 개인 채팅방 목록/검색 조회는 JOINED 기준 필터링을 유지합니다.

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

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions