Skip to content

Conversation

@jueunk617
Copy link
Collaborator

📌 개요

스터디 플랫폼에 실시간 화상통화 기능을 위한 WebRTC 시그널링 서버를 구축했습니다.
P2P Mesh 방식으로 오디오(최대 6명)/비디오(최대 4명)/화면공유가 가능하며,
Offer/Answer/ICE Candidate 중계 및 미디어 상태 관리에 집중하여 구현했습니다.

🔨 작업 내용

1. WebRTC 시그널링 시스템 구축

  • WebSocket 기반 실시간 시그널링
    • Offer/Answer/ICE Candidate 메시지 중계
    • P2P Mesh 연결 방식 (최대 6명, n(n-1)/2 개의 peer connection)
    • 방 전체 브로드캐스트 방식 (/topic/room/{roomId}/webrtc)

2. 미디어 상태 관리

  • 카메라/오디오/화면공유 on/off 실시간 동기화
  • /app/webrtc/media/toggle - 미디어 상태 변경
  • /topic/room/{roomId}/media-status - 상태 변경 알림 브로드캐스트

3. ICE 서버 REST API

  • GET /api/webrtc/ice-servers - STUN/TURN 서버 정보 제공 (현재는 STUN 서버만)
  • 기본 Google STUN 서버 3개 제공

4. 보안 및 검증 로직

  • WebRTCSignalValidator
    • 같은 방에 속한 사용자만 시그널 교환 가능
    • 온라인 상태 확인 (오프라인 사용자 제외)
    • 자기 자신에게 시그널 전송 방지
  • JWT 기반 인증 통합 (Principal 기반)

5. 공통 유틸리티

  • WebSocketAuthHelper - Principal에서 사용자 정보 추출
  • 기존 Controller들의 중복 코드 제거

🔗 관련 이슈

Closes #118

📝 참고 사항

아키텍처 설계 방향

  • WebRTC 시스템 역할: Offer/Answer/ICE + 미디어 상태만 담당
  • 참여자 입장/퇴장 관리: 기존 방 관리 시스템에서 처리
  • 관심사 분리: 시그널링 서버로서의 역할에 집중

테스트 시나리오

User A 방 입장
User B 입장 → A-B peer connection 생성
User C 입장 → A-C, B-C peer connection 생성
A가 카메라 on → 모든 참가자에게 미디어 상태 알림
Offer/Answer/ICE 교환으로 연결 수립
B 퇴장 → A-B, B-C 연결 해제

✅ 체크리스트

  • 기능 동작 확인
  • 테스트 코드 작성
  • 문서/주석 추가 및 최신화

@github-actions github-actions bot changed the title Feat: WebRTC 시그널링 서버 구축 Feat: WebRTC 시그널링 서버 구축 (#118) Sep 30, 2025
@jueunk617 jueunk617 merged commit a231f6e into dev Sep 30, 2025
2 checks passed
@github-actions github-actions bot deleted the Feat/118 branch September 30, 2025 03:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants