오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Technology/Webrtc

WebRTC는 어떻게 P2P 통신을 가능하게 하는가?[1]

junha6316 2022. 9. 27. 11:06

 비전공자인 내 입장에서 WebRTC는 학습했던 기술중에서는 손에 꼽히도록 어려운 개념중에 하나였다. WebRTC를 하기 위한 네트워크 관련된 개념이 특히 이해하기 어려웠다. 그것 뿐만 아니라 P2P를 맺기위한 다양한 프로토콜이 어디서 어떤식으로 맺어지는지 또 서버는 왜 이렇게 많이 등장하는지 STUN, TURN, 시그널링등 알 수 없는 말들 뿐이였다.. 고생을 토로하는 건 여기까지 하자! 이번 주제는 상당히 많은 양을 다루고 있기 때문에 여러개의 글로 이루어 질 것이다. 오늘은 WebRTC 전반에 대해서 다뤄보도록 하겠다. 코드는 없으니 주의하자..

 

1. WebRTC 전체 과정

먼저 당연히 WebRTC가 어떤 기술인지 한마디로 정의해봐야한다. WebRTC는 Web Real Time Communication의 약자로 다른 드라이버나 플러그인 없이 웹을 통해서 P2P 실시간 통신을 할 수 있게 해주는 기술을 의미한다. 여기서 P2P는 당신의 컴퓨터와 내 컴퓨터를 의미한다. 좀 더 쉽게 표현해보자면 크롬만으로 음성/영상을 전달하는 기술이라고 생각하면 된다. 이걸 보면서 아니 그게 이름까지 따로 만들어야 하는 기술이라고 생각할 수 도 있겠다. 하지만 서버없이 통신에 참여하는 주체가 나와 당신 뿐이라는게 WebRTC를 어렵게 만드는 이유중에 하나이다.

 

위에서 WebRTC를 웹기술을 기반으로 P2P 통신을 하는 것이라고 했다. P2P 통신은 친구를 만나는 것과 같다. 친구를 만나면 언제 만날지 만나서 무엇을 할지 이런 것들을 정하지 않는가? 나는 잘 모르지만 정상적인 사회인들은 그렇다고 들었다. WebRTC도 마찬가지이다. WebRTC 는 아래 3가지 단계로 이루어진다.

  1. 만날 장소 정하기
    • STUN, TURN, ICE
  2. 어떻게 통신할지 정하기
    • Signaling, SDP
  3. 통신하기
    • RTP, RTCP

 

1. 만날 장소 정하기

 첫번째 단계인 만날 장소 정하기는 네트워크 상에서 어디서 만날지를 정하는 단계이다. 친구를 만나는 것과 다르게 인터넷에서는 상대 IP주소와 포트를 알아야 통신이 가능한다. 따라서 WebRTC 통신할 주소와 포트를 교환하는 과정을 필요한데 이 과정이 만날 장소 정하기 과정이다. 서로의 주소와 포트를 교환하는데 도움을 주는 것이 STUN, TURN이고 가장 최적의 경로를 찾아주는 방법이 ICE이다. 지금 당장은 이해가 되지 않겠지만 일단이렇게 정리해보자. WebRTC는 서로 주소를 교환하는 단계가 필요하고 이 단계에 STUN, TURN, ICE가 사용된다.

 

2. 어떻게 통신할지 정하기

 두번째 단계는 서로 만날 곳을 정했다면 이제 어떤식으로 통신할지 정해야한다. 서로 어떤식으로 미디어 데이터를 송수신할지 정해야한다는 뜻이다. 미디어 데이터를 어떻게 송수신할지를 적어놓은 것이 SDP(Session Description Protocol)이고 이를 교환할 수 있게해주는 것이 시그널링 서버이다. 한편 데이터를 그냥 교환하면 안되나 라는 생각이 들 수 있다. 여기에 대한 답을 해보자면 미디어 데이터는 생각보다 데이터의 양이 크기 때문에 압축해야하는데 압축하는 방식을 코덱이라고 한다. (정확한 설명은 아니지만 그냥 넘어가자) 즉 상대방이 압축한 방식을 알아야 다시 복원시 정상적인 복원을 할 수 있다. 이부분도 이후에 자세히 기술 하도록 하겠다. 일단 넘어가보자 이로서 통신 준비는 완료되었고 이제 실제로 통신만 하면된다.

 

3. 통신하기 

 마지막 단계인 통신하기 단계이다. 이제 서로의 주소:포트로 SDP에 적혀져있는 것을 바탕으로 미디어 데이터를 보낼 차례이다. 여기에 사용하는 프로토콜을 RTP, RTCP라고 하며 각각 풀어쓰면 Real Time Protocol, Real Time Control Protocol 이라고 한다. RTP는 실제로 미디어 데이터가 오고가는 프로토콜이고 RTCP는 RTP가 더 원활히 이루어질 수 있도록 도와주는 프로토콜이라고 생각하면된다.

 

2. 정리

 오늘은 WebRTC의 전체적인 과정에 대해 다루어 보았다. 만날장소 정하기, 어떻게 통신할지 정하기, 통신 이렇게 3가지 단계로 나누어 각각의 단계에서 필요한 서버와 프로토콜에 대해 간략히 설명해보았다. 서로의 주소와 포트를 교환하기 위해 STUN, TURN, ICE가 사용되며 데이터 통신 스펙인 SDP를 교환하기 위해 시그널링 서버가 사용되고 마지막으로 실제 통신에 RTP, RTCP가 사용되는 것을 알았다. 다음 시간에는 만날 장소 정하기에 대한 구체적인 글을 적어보도록 하겠다!