WebRTC 이론 파헤치기 [1] WebRTC?

권영민·2022년 2월 5일
0

IT Tech

목록 보기
1/1

WebRTC란 무엇?

WebRTC(Web Real-Time Communication)은 웹 애플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디오를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있는 기술이다. WebRTC를 구성하는 일련의 표준들은 플러그인이나 서드파티의 설치 없이도 종단간의 데이터 공유 및 화상 화면 공유가 가능하게 한다.

이것이 MDN Web Docs에서 볼 수 있는 WebRTC의 간략한 정의이다. 우리는 보통 종단 클라이언트간에 통신할 때 http를 이용한 단방향 통신, 소켓 통신이 대표적이라 할 수 있는 양방향 통신을 알고 있는데- 사실 이들은 모두 결국 '서버'를 경유하는 방식이다. 즉, 우리가 클라이언트간에 통신하는 모든 중간다리에 서버가 존재한다는 점이다. 이는 어쩌면 당연한 얘기이지만 WebRTC는 그런 전통적인 방식을 뒤엎은 새로운 통신 방식이다. 음- 간단하게 얘기하면 WebRTC는 클라이언트가 서버를 거쳐 다른 클라이언트와 통신하는 것이 아니고 연결을 원하는 클라이언트간에 P2P로 연결될 수 있게 해주는 기술이다.

왜 WebRTC를 알아야 하지?

WebRTC는 그다지 오래된 기술은 아니다. 2011년 본격적으로 세상에 공개된 기술로, 2022년 현재 10년을 조금 넘은 기술인 셈이다. 이 획기적인 기술은 기존에 쉽게 개발하기 어려웠던 화상 통신, 화상 회의 기능을 개발할 수 있는 훌륭한 키트가 되어주었다. WebRTC라는 기술은 이미 Google, Facebook(현 Meta), 마이크로소프트, 카카오, 하이퍼커넥트, NC소프트 등 각 분야 굴지의 기업들의 IT 서비스에서 그 능력을 발휘하고 있다. Zoom으로 화상 회의를 하고, 자신이 즐겨하는 게임의 스트리밍을 하고, ... 우리 주변에서 이미 흔하게 접하고 있는 기술이란 말이다. 그리고 특히 코로나19로 우리의 일상이 새로운 국면을 맞이하면서 스트리밍과 화상 서비스의 수요가 급증한만큼 WebRTC는 더더욱 주목받고 있다.

WebRTC의 동작순서

사실 WebRTC의 원리를 쉽게 요약해서 정리하기란 어렵다. WebRTC는 아직도 진화 중인 기술이며, 완벽하게 표준화되거나 정리된 기술은 아니기 때문에 제대로 사용하기 위해선 여러가지 배경지식과 기술에 대한 이해가 필요하다. 그렇지만 대략적인 원리를 가지고 WebRTC API들을 활용한다면, 간단한 토이 프로젝트 정도는 생각보다 수월하게 만들어서 테스트해볼 수 있을 것이다. 그걸 위해서 정말 초간단하게 동작순서를 요약하고, 그 과정에서 WebRTC에 대한 어떤 지식들이 필요한지, WebRTC API들은 어떤 것이 있는지를 알아가려고 한다.

브라우저간의 주소 공유

브라우저간에 P2P 통신을 하려면, 당연히 서로의 주소를 알아야 한다. 왜? 브라우저는 웹 서버가 아니다. 외부에서 접근할 수 있는 주소가 없다는 얘기다. 결국 녀석들은 서로의 주소를 알아내야 할 방법이 필요하단 말이다.

NAT 우회

하지만 막상 주소를 아는 것만으로는 또 P2P가 그리 간단히 가능하진 않다. 특히나 실제 네트워크 환경에선 방화벽이나 Symmetric NAT와 같은 당연히 계산해야할 변수들이 많다. 이런 상황들을 대처하기 위해서 WebRTC에선 또 다른 해결방법들이 필요하다.

실시간 연결

주소도 알았고, 여러 이유들로 P2P 연결을 방해하는 네트워크 변수들까지 해결하고 나면 서로는 서로의 데이터를 주고 받을 수 있게 된다. 이건 미디어스트림을 통한 오디오/비디오들이 오고가는 화상 통신, 스트리밍이 될 수도 있고 텍스트나 바이너리 데이터가 오고가는 일종의 채팅 기능, 파일 전송 등도 수행할 수 있다.

마무리

시리즈 첫 글인만큼 사실 WebRTC라는 기술이 정말 획기적이고 P2P 연결이라는 강력한 장점을 가졌다는 것 이외에 특별히 알게 된 것은 없어보인다. 동작순서를 너무 간단하게 3가지로 요약하긴 했지만, 사실 그 각각의 순서에 필요한 디테일한 내부 동작들과 구성 요소들을 차근차근 알아가다보면 WebRTC의 세계가 생각보다 방대하고 만만치 않다는 것을 알게 될 것이다.

profile
안녕하세요. 열정, 낭만, 그리고 실력으로 승부하려는 개발자 권영민입니다.

0개의 댓글