1. 개요

1.1 Transport (전송 계층)

1.2 ICE (Interactive Connectivity Establishment) Candidate

2. 흐름

  1. 클라이언트 요청: 음성 채팅방에 참여하기 위해 Transport 생성 요청
  2. 서버 Transport 생성: createWebRtcTransport 메서드 호출
    1. mediasoup 라우터가 Transport 생성
    2. 생성과 동시에 icecandidate 이벤트 리스너 등록 (Transport가 ICE 후보를 찾을 때마다 실행)
  3. 서버 Transport 응답: 생성된 Transport 초기 정보 응답
  4. 클라이언트 Transport 생성: 클라이언트는 서버로부터 받은 정보로 자신의 Transport 생성
  5. ICE Candidate 교환(양방향):
    1. 서버 → 클라이언트
      1. 서버의 Transport가 새로운 ICE 후보를 찾으면 icecandidate 이벤트 발생
      2. 이벤트 리스너가 이를 잡아 클라이언트로 전송
    2. 클라이언트 → 서버
      1. 클라이언트의 Transport도 새로운 ICE 후보를 찾으면 클라이언트 코드가 이를 잡아 서버로 전송
      2. 서버의 voice.gateway.ts 에서 받아 transport.addIceCandidate() 와 같은 메서드를 호출하여 후보 등록
  6. 연결 수립: 양측이 충분한 ICE 후보를 교환하고 성공적으로 통신 경로를 확인하면 dtls 핸드셰이크 등의 과정을 걸쳐 Transport 연결이 connected 상태가 되고 미디어를 주고 받을 수 있음