Skip to content

feat: 실시간 협업을 위한 다중 세션 기능 구현 #34

@1anminJ

Description

@1anminJ

📋 개요

하나의 협업 방 안에서 여러 개의 독립적인 코드 편집 세션을 생성하고 운영할 수 있도록 기능을 확장합니다.


📝 상세 설명

As-Is (문제 상황)

  • 하나의 협업 방(Room)은 단 하나의 코드 편집 환경만 공유할 수 있었습니다.
  • 모든 참여자가 동일한 코드를 봐야 하므로, 여러 소그룹 활동이나 개별적인 코드 리뷰가 불가능했습니다.
  • 방 정보가 서버 메모리에만 임시로 저장되어, 서버 재시작 시 모든 협업 방 정보가 사라지는 문제가 있었습니다.

To-Be (해결 방안)

  • 데이터베이스 연동: Room, CodeSession, RoomParticipant 엔티티를 도입하여 방과 세션 정보를 데이터베이스에 영구적으로 저장합니다.
  • 다중 세션 구조: 하나의 Room이 여러 개의 CodeSession을 가질 수 있는 1:N 구조로 시스템을 변경합니다.
  • 메시지 격리: WebSocket 통신 토픽 주소를 sessionId 기준으로 세분화하여(.../session/{sessionId}), 각 세션의 통신이 다른 세션에 영향을 주지 않도록 완벽히 격리합니다.
  • 사용자 흐름 개선: 방 생성 시 "main"이라는 기본 세션이 자동으로 생성되고, 참여자는 "방송하기"와 같은 액션을 통해 자신만의 세션을 새로 추가할 수 있는 기반을 마련합니다.

👩‍💻 변경/추가될 엔드포인트

  • POST /api/collab-rooms: 협업 방과 기본 세션을 생성합니다.
  • POST /api/collab-rooms/{roomId}/sessions: 특정 방 안에 새로운 코드 세션을 생성합니다.

✅ 참고 사항

  • 기존 메모리 기반 Room DTO는 WebSocketRoom으로 리네임하여, 현재 활성화된 실시간 세션을 관리하는 용도로만 사용하도록 역할을 명확히 분리했습니다.
  • WebSocket 연결 시 JWT 인증을 처리하는 StompChannelInterceptor의 로직을 강화하여, Spring Security Authentication 객체를 세션에 직접 등록하는 안정적인 방식으로 개선했습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions