킹의 개발일지

WebRTC protocol 본문

WebRTC

WebRTC protocol

k1ng 2023. 2. 5. 03:21

팀원들과 프로젝트 회의 중 프로젝트에 WebRTC를 적용해 리얼타임 서비스를 만들어 보자는 의견이 나와서 공부한 내용을 정리 해보고자 한다. 그럼.. 시작!


그래서 WebRTC가 뭔데?

코로나로 비대면 활동이 늘어나면서 사람간의 화상 회의 서비스가 널리 쓰여지고 있는데, WebRTC 이 녀석이 바로 화상 회의를 쉽게 가능토록 해주는 녀석이다! 

 

설명 하자면, WebRTC(Web Real-Time Communication)는 웹 어플리케이션에서 음성, 영상을 캡처하고 스트리밍할 수 있을 뿐만 아니라 중개자 없이 브라우저 간에 데이터를 교환할 수 있도록 하는 기술이다. 심지어 카카오톡 같은 채팅 어플 또한 만들 수 있다!

그리고 WebRTC를 구성하는 일련의 표준을 통해 사용자가 플러그인이나 기타 소프트웨어를 설치하지 않고도 데이터를 공유할 수 있고 P2P 원격 회의 또한 수행할 수 있도록 해준다!

 

무언가와 비교하면서 WebRTC를 설명하면 이해하기 좋을 거 같아 HTTP, WebSocket 등과 비교하면서 설명하려고한다.


HTTP

브라우저와 서버는 http를 사용해서 소통을 한다. 업로드, 다운로드, 이미지 심지어 우리가 보는 인터넷 페이지도 서버에서 그려져 나올 수 도 있다.

 

Http가 작동하는 방식은 단순하다!

사용자가 어느 웹 사이트에 들어가면 브라우저는 서버에게 http 요청(request)을 보낸다. 그다음 서버는 해당 request를 보고 사용자가 원하는 것을 확인하고 서버는 브라우저에게 http 응답(response)을 보낼 것이다. 이것이 바로 http가 작동하는 방식이다.

 

여기서 중요한 점은 서버가 브라우저에게 응답하고 나면 브라우저와 연결을 끊어 버린다는 것이다. 이 이후에는 서버는 금붕어처럼 요청을 보내왔던 브라우저를 잊어버리게 되는것이다... 때문에 서버는 더이상 브라우저에게 무엇도 보낼 수 없다는 것이다. 이 때문에 http를 상태정보가 없는 stateless하다고 하는것이다.

 

그래서 만약 채팅 어플을 http를 사용해서 만든다면 채팅이 왔나 안 왔나 조마조마하게 쉼없이 F5를 연타해야할 것이다...

F5를 연타하지 않아도 되게 나온것이 바로 Websocket protocol이다!

Websocket 

http처럼 요청, 응답, 연결 방식을 쓰는것이 아니라 웹 소켓은 커넥션을 Open - Close된 여부로 판단한다.

브라우저가 웹 소켓을 사용해서 서버와 연결하면, 커넥션은 Open 된것이고 응답후 바로 연결이 끊기는 http와 달리, 명시적으로 닫는다고 하기 전까지는 계속 열려있을 것이다.

이는 전화 통화와 닮아있다. 전화 연결은 양방향 이므로 웹 소켓 또한 브라우저, 서버 둘다 메세지를 주고 받을 수 있다. 때문에 브라우저가 요청을 보내지 않더라도 브라우저에게 데이터를 전송 할 수 도 있다!

 

웹 소켓 설명을 했으니, 작동방식을 살펴 보자.

채팅을 예로 들면 채팅방에 있는 사람들은 모두 다 같은 웹 소켓 서버에 연결 된 것이다. 그래서 한 사용자가 웹 소켓 서버에 메세지를 보내면 서버가 해당 메세지를 채팅방에 있는 다른 사람들에게 보내주는 것이다.

 

이 예만 보더라도 사용자가 많아지면 웹 소켓 서버에 과부화가 많을 것이 보이지 않는가, 사용자가 많아지면 메세지를 전부 트래킹하기 힘들 뿐 만 아니라 이 메세지를 채팅방에 있는 모든 사람에게 포워딩 해야하니 말이다!

 

그렇다면 서버가 이 많은 사람들을 관리하기 힘드니 그냥 브라우저끼리 연결하도록 두면 어떨까? 두둥..

이것이 바로 WebRTC의 등장이다.

 

WebRTC

WebRTC는 브라우저를 서버에 연결시키는 것이 아니라 브러우저끼리 연결 되도록 도와준다. 그래서 만약 다른 사람에게 메세지를 보낸다면 이 메세지는 서버를 통해서 가는것이 아니라 다이렉트하게 전달 될 것이다! 이를 P2P(peer-to-peer) 커뮤니케이션이라 한다. 채팅을 예로 들어서 그렇지 단순 텍스트를 넘어서 음성, 영상도 서버를 거치지 않고 주고 받을 수 있다! (다른 포스트에서 설명하겠지만 브라우저끼리 연결하려면 서버가 필요하긴 하다..) 중개자가 없으니 속도 향상은 두말할 것 없을 것이다!

 

그러나 WebRTC도 단점이 있다.. 만약 10000명의 사람이 있다면 나는 9999개의 데이터를 다운받아야 하는것이다. 또한 내 컴퓨터는 9999명에게 업로드를 해주어야 한다는 소리이다. 자연스레 확장성에는 제약이 생길것이다 ㅜ

 

지금까지 WebRTC가 무엇인지 다른 프로토콜을 예로들어 설명했다. 다음번에는 WebRTC을 적용하는데 필요한 개념과 용어들을 정리 해보고자 한다!

그럼 20,000..

 

 

 

 

'WebRTC' 카테고리의 다른 글

WebRTC 용어 정리!  (0) 2023.02.05