[설계서] 대화방 입장 프로세스 최적화 설계

조회(HTTP GET), 입장(HTTP POST), 통신(WebSocket)의 책임 분리

1. 개요 (Overview)

대화방 입장 시 발생하는 데이터 조회, 비즈니스 로직(인원 제한 등), 실시간 통신 연결을 명확히 분리하여 시스템의 안정성과 확장성을 확보합니다.

🎯 핵심 목표

2. 전체 프로세스 흐름도 (Sequence Diagram)

사용자가 대화방을 클릭한 시점부터 최종 실시간 참여까지의 흐름입니다.

  1. 방 정보 조회 (GET): 방의 기본 정보와 참여자 명단을 가져와 화면을 그립니다.
  2. 입장 요청 (POST): 정원 확인, 비밀번호 검증 등 비즈니스 로직을 수행합니다.
  3. WS 연결 및 이벤트: 서버와 소켓 연결 후 해당 방 채널(Room)에 구독합니다.

3. 상세 API 명세

3.1. 방 상세 정보 조회 (Read)

화면 렌더링을 위한 데이터를 호출합니다.

{
  "success": true,
  "message": "방 상세 조회에 성공 했습니다.",
  "data": {
    "id": "3f1c8c6a-7a4a-4a6c-9b7e-0b5c7f3a9f21",
    "host_id": "8b2d9a41-3c5e-4f7a-9d21-6a9f2c1e8b77",
    "title": "같이 수다 떨어요~",
    "tags": ["게임", "친목"],
    "current_participants": 5,
    "max_participants": 10,
    "is_mic_available": true,
    "is_private": false,
    "participants": [
      {
        "id": "u-1001",
        "nickname": "루크",
        "profile_image": "<https://cdn.example.com/profiles/luke.png>"
      },
      {
        "id": "u-1002",
        "nickname": "민지",
        "profile_image": "<https://cdn.example.com/profiles/minji.png>"
      },
      {
        "id": "u-1003",
        "nickname": "하늘",
        "profile_image": "<https://cdn.example.com/profiles/haneul.png>"
      },
      {
        "id": "u-1004",
        "nickname": "준호",
        "profile_image": "<https://cdn.example.com/profiles/junho.png>"
      },
      {
        "id": "u-1005",
        "nickname": "소라",
        "profile_image": "<https://cdn.example.com/profiles/sora.png>"
      }
    ],
    "create_date": "2026-01-06T07:10:00Z"
  }
}