프로젝트

WebRTC offer 와 answer 가 뭐지

정코딩딩 2024. 8. 23. 13:55

WebRTC 에 대해서 구현하려고 여러 블로그를 살펴보다가 offer 와 answer 라는 개념이 나오는데.. 

너무 헷갈려서 한번 정리를 해보려고 합니다!

 

먼저 간단하게 다시 말해서 

WebRTC 란 ?

Web Real - Time Communication 의 약자로, 말 그대로 브라우저 간 실시간 음성, 영상, 데이터 통신을 가능하게 하는 기술입니다. 

webRTC 의 피어 간 연결 설정 과정을 이해하기 위해서는 "offer" 와 "answer" 에 대한 이해가 필수적입니다.

 

WebRTC 에서 클라이언트가 서로 통신하기 위해서는 세가지 주요 과정을 거치게됩니다.

1. 신호 교환(Signal Exchange) : 연결에 필요한 정보를 교환합니다.

2. 네트워크 설정(NAT Traversal) : 피어가 서로의 IP 주소를 찾아서 직접 연결할 수 있도록 설정합니다.

3. 미디어/데이터 스트림 설정(Media/Data Stream Setup) : 실제로 오디오, 비디오, 데이터 스트림이 전송될 준비를 완료합니다.

 

이 세가지 과정 중에서 offer 와 answer 는 첫번째 과정인 신호교환에서 사용되는 개념입니다!

offer 란?

하나의 피어가 다른 피어에게 어떤 미디어 트랙(오디오, 비디오 등)을 사용할 것인지, 어떤 코덱을 사용할 것인지, 그리고 어떻게 네트워크 연결을 설정할 것인지에 대한 정보를 포함하고 있습니다. 이 정보는 SDP(Session Description Protocol)라는 형식으로 표현됩니다.

 

Answer 란?

offer 를 받은 피어는 여기에 대한 응답을 해줘야하는데, 이 응답이 바로 Answer 입니다!

Answer 는 offer 에서 제안된 내용을 수락하거나 거부할 수 있습니다. 

Answer 도 마찬가지로 SDP 형식으로 표현되며, 최종적으로 양쪽 피어 간의 연결 설정을 확정짓는 역할을 합니다.

 

연결을 하기 위해 양쪽 피어들이 offer 와 answer 를 주고받으면서 서로 어떤 스펙으로 연결을 할지, 어떤 것들을 주고받을지에 대해 서로 조율하고 최종적으로 결정하고 확정짓는 부분이라고 이해하면 될 것 같습니다! 서로 요구사항이 맞아지면 그때서야 서로의 IP 주소로 진짜 연결을 시작할 수 있도록 하는 것이죠!


이제 Offer 와 Answer 를 사용하는 그 절차에 대해 알아보겠습니다.

 

먼저, Offer 를 생성합니다. 

피어 A 가 연결을 시작하려고 할 때, 자신의 미디어 트랙과 네트워크 설정을 포함한 offer 를 생성하고 연결하고자 하는 피어 B 에게 전송합니다. 피어 A 가 생성한 offer 는 webSocket 혹은 HTTP 등의 신호 서버로 전달되게 됩니다.

 

피어 B 는 피어 A 로 부터 offer 를 전달받습니다. 그러면, offer 를 확인해보고 자신의 미디어 트랙과 네트워크 설정을 고려해서 Answer 를 생성합니다. 마찬가지로 피어 B 도 생성한 Answer 를 피어 A 에게 신호 서버를 통해 전송합니다.

 

피어 A 는 피어 B 로 부터 받은 Answer 를 수신하고 최종적으로 피어 간 연결 설정이 완료됩니다! 이제 두 피어는 서로 미디어 트랙을 교환하거나 데이터를 주고받을 수 있게 됩니다.


webRTC 에서 두 피어가 직접 통신을 하기 위해서는 서로의 네트워크 위치를 알아야합니다. 여기서 네트워크 위치라고 하면 IP 주소와 포트번호를 의미합니다. 근데, 만약 두 피어가 서로 다른 네트워크에 있을 경우에는 직접적인 연결이 어려울 수 있어서 이 문제를 해결하기 위해 등장한 것이 ICE 입니다. ICE 는 피어 간의 연결을 설정할 수 있는 다양한 방법을 찾고, 그 중에서 가장 최적의 방법을 선택하는 과정을 관리합니다.

 

ICE Candidates 란?

ICE Candidates 는 피어가 통신에 사용할 수 있는 가능한 네트워크 경로들의 집합 입니다. ICE 는 각 피어가 가능한 모든 경로를 수집하고 이를 상대 피어와 교환하여 가능한 경로를 협상하는데에 사용하게 됩니다. 

 

그래서 offer/answer 교환과 함께, 피어 간의 실제 네트워크 경로를 설정하기 위해 ICE Candidates 도 함께 교환됩니다.

그래야 offer/answer 를 주고 받은 후에 네트워크 연결을 할 수 있게 되니까요! 여기까지가 간단한 webRTC 의 offer/answer 에 대한 설명이었습니다~~

 

끝!