📋 개요
하나의 협업 방 안에서 여러 개의 독립적인 코드 편집 세션을 생성하고 운영할 수 있도록 기능을 확장합니다.
📝 상세 설명
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 객체를 세션에 직접 등록하는 안정적인 방식으로 개선했습니다.
📋 개요
하나의 협업 방 안에서 여러 개의 독립적인 코드 편집 세션을 생성하고 운영할 수 있도록 기능을 확장합니다.
📝 상세 설명
As-Is (문제 상황)
Room)은 단 하나의 코드 편집 환경만 공유할 수 있었습니다.To-Be (해결 방안)
Room,CodeSession,RoomParticipant엔티티를 도입하여 방과 세션 정보를 데이터베이스에 영구적으로 저장합니다.Room이 여러 개의CodeSession을 가질 수 있는 1:N 구조로 시스템을 변경합니다.sessionId기준으로 세분화하여(.../session/{sessionId}), 각 세션의 통신이 다른 세션에 영향을 주지 않도록 완벽히 격리합니다.👩💻 변경/추가될 엔드포인트
POST /api/collab-rooms: 협업 방과 기본 세션을 생성합니다.POST /api/collab-rooms/{roomId}/sessions: 특정 방 안에 새로운 코드 세션을 생성합니다.✅ 참고 사항
RoomDTO는WebSocketRoom으로 리네임하여, 현재 활성화된 실시간 세션을 관리하는 용도로만 사용하도록 역할을 명확히 분리했습니다.StompChannelInterceptor의 로직을 강화하여, Spring SecurityAuthentication객체를 세션에 직접 등록하는 안정적인 방식으로 개선했습니다.