⇒ API 내부에서 많은 일이 발생하기 때문에 기술을 최대한 활용하려면 WebRTC의 개념과 작동원리를 이해하는 것이 중요합니다.
❓ 좋은 설명이 있어서 이해한 내용을 적어보았습니다.
STUN 서버는 기본적으로 Peer가 자신의 public IP주소를 찾을 수 있도록 합니다.
자신의 공인 IP 주소를 알아야 하는 Peer는 STUN 서버에 요청을 보냅니다.
STUN 서버는 해당 Peer의 public IP주소로 응답합니다.
이제 이 public IP주소를 다른 Peer와 공유하여 다른 Peer가 해당 Peer를 찾을 수 있도록 할 수 있습니다.
하지만, Peer가 복잡한 NAT 및 방화벽 뒤에 있는 경우 STUN 서버도 요청한 해당 Peer의 public IP주소를 발견할 수도 제공할 수도 없습니다.
이러한 경우 ICE는 TURN에 의존하여 연결을 설정합니다.
TURN은 이름에서 알 수 있듯이 중계 서버로 두 Peer 간에 직접 연결이 불가능한 경우 데이터, 오디오, 비디오를 전송하는 중개자 역할을 합니다.
STUN 서버는 public IP를 찾는 과정에만 관여합니다.
WebRTC 연결이 설정되면 모든 추가 통신은 WebRTC를 통해 발생합니다.
하지만, TURN의 경우 WebRTC 연결을 설정한 후에도 내내 TURN 서버가 필요합니다.
TURN 서버는 의도하지 않은 것이지만 STUN의 한계로 인해 의존해야 합니다. STUN 서버는 약 86%의 경우에만 성공합니다.
“ICE is complex because we live in a complex world.”
본문
❓ 좋은 설명이 있어서 이해한 내용을 적어보았습니다.
❓ 두 질문의 답은 Signaling Mechanism이라는 개념 안에 있습니다.
WebRTC 연결이 설정되기 전에 Peer 간에 위의 정보를 전송하고 WebRTC 연결을 위해 서로 찾고 연결하는 방법을 알려주는 매개체가 필요합니다.(위 사진을 보면 흐름을 알 수 있습니다.)
⇒ Signaling Mechanism은 이름에서 알 수 있듯이 연결하려는 두 Peer 간에 연결 신호(ICE 후보, Session Description 등)을 교환합니다.**
- WebRTC는 이러한 Signaling Mechanism을 구현하기 위한 표준을 정의하지 않으며, 개발자가 선택한 메커니즘을 생성하도록 합니다.
- 정보를 교환하는 Signaling Mechanism은 정보를 각 Peer에 간단히 복사하여 붙여넣거나 WebSocket, Socket.io, Server Side Events 등과 같은 통신 채널을 사용하여 달성할 수 있습니다.
- 다시 말해, Signaling Mechanism은 Peer가 서로를 식별하고 WebRTC를 사용하여 추가 통신을 시작할 수 있도록 Peer 간에 연결 관련 정보를 교환하는 모드일 뿐입니다.
❓
1. Peer A는 ICE 프로토콜을 사용하여 ‘ICE 후보’를 생성합니다. 대부분의 경우STUN 또는 TURN 서버를 필요로 합니다.
2. Peer A는 ‘ICE 후보’와 Session Description을 단일 객체로 번들화 한다. 이 객체는 Peer A 내에 Local Description(Peer 자신의 연결 정보)으로 저장되고 Signaling Mechanism을 통해 Peer B로 전송됩니다. 이 부분을 ‘Offer’라고 합니다.
3. Peer B는 Offer를 수신하고 추후 사용을 위해 Remote Description(상대방 Peer의 연결 정보)으로 저장합니다. Peer B는 자체 ‘ICE 후보’와 Session Description을 생성하고 Local Description으로 저장하고 Signaling Mechanism을 통해 Peer A로 보냅니다.
이 부분을 ‘Answer’라고 합니다.
4. Peer A는 Peer B로부터 Answer를 받아 Remote Description으로 저장합니다.
⇒ 이를 통해 두 Peer는 서로의 연결 정보를 갖고 WebRTC를 통해 성공적으로 통신을 시작할 수 있습니다.