이전에 만들었던 아주 허접한 앱을 발전시키고자 리팩토링을 하던 중 상담 기능 추가가 필수적이어서 WebRTC를 활용해보려고 글을 적습니다. 일단 자료가 적고 UIKit이나 끄적될 줄 알았던터라 조금 더 low-level의 공부 + 새로운 API를 습득하는 것이 쉽지는 않아 걱정되지만 완주와 제대로된 서비스를 목표하며 달려보도록 하겠습니다!
1. 그래서 WebRTC가 뭔데?
약자 그대로 Web RealTime Communication, 웹에서 실시간 소통을 가능하게 하는 Open Framework 입니다. Framework라는 말에서 우리가 어떤 태도로 접근해야 하는지 각이 나오죠? 라이브러리처럼 우리가 필요한 곳에만 쏙쏙 집어넣고 사용하는 방식이 아니라 구조와 체계를 이해하고 그 안에서 우리가 할 수 있는게 무엇인지 배워야 한다는 것을 뜻합니다. 즉, 이 프레임워크에는 high-quality communications을 위한 기본 구성 요소(네트워크, 오디오, 비디오 컴포넌트)가 포함되어져 있으니 이런 것들을 어떻게 사용해야 하는지 잘 이해하고 사용해야 겠죠?
아무튼 이 정의에서 주목할 만한 점은 이런 realtime communication이 다른 브라우저와 가능하다는 것입니다! Framework에서 제공하는 소스 코드를 사용해서 웹, 안드로이드, iOS에서 별다른 소프트웨어 없이! 플러그인 없이! 카메라, 마이크 등을 사용해서 실시간 커뮤니케이션을 구현할 수 있다는 겁니다. 이런게 WebRTC가 Skype나 FaceTime과 다른 점이죠!

어떻게 이런 기능이 가능할까요? 저도 웹 쪽은 잘 모르지만... 우리가 사용하는 소스 코드들이 JavaScript의 API를 통해서 접근할 수 있고 그래서 WebRTC 작업이 W3C 및 IETF 프로토콜 수준의 API 수준에서 표준화되고 있기 때문이랍니다.(?) 뭐 아무튼 JavaScript라는 통용되는 API를 사용하고 있기 때문에 모든 브라우저에 접근할 수 있다는 말 같습니다... (아니라면 수정해주세여 ㅠㅠ)
2. 그럼 그 소스 코드 좀 보여줘봐
제가 참고하는 자료에는 JavaScript의 자료라 나중에 Swift로 대체해서 올리겠습니다! 지금은 개념만! 그리고 아마 개발을 좀 해보신 분이시라면 Swift에서 어떻게 접근해야 하는지 감이 오실 겁니다! 아마도?

1. Get User Media
첫 번째는 우리 앱이 사용자에게 미디어 장치에 액세스 할 수 있도록 권한을 요청하는 것입니다. 그러면 WebRTC는 우리 장치에게 Stream이라는 것을 부여하고 코드를 통해서 사용할 수 있게 되죠!
2. RTCPeerConnection
두 번째 API는 RTCPeerConnection입니다. 위에서 미디어 장치를 사용해서 Local Media Stream이라는게 생겼다면 다음 순서로 RTCPeerConnection이라는 객체를 만듭니다. 요걸 다른 사용자에게 보내기 위해서 HTTP처럼 SRTP라는 프로토콜을 사용해서 Peer To Peer로 보냅니다! (다른 곳에서 들은 정보로는 PTP이기 때문에 다른 데이터 서버의 도움없이 구현할 수 있고 덕분에 데이터값이 줄었다는.. 이야기를 주워들었습니다. 아무튼) SRTP는 우리가 주고받을 미디어가 중간에 저장 공간 없이 다른 브라우저로 바로 이동합니다. 그리고 전송 중에도 기본적으로 암호화가 됩니다:) 짱짱맨
3. Data Channel
마지막 API는 Data Channel입니다. WebRTC는 비디오와 오디오만 전송할 수 있는게 아닙니다! 다양한 데이터 역시 전송할 수 있습니다. 온라인 게임 채팅과 같이 실시간 데이터 정보 교환이 필요한 모든 종류의 응용 프로그램에서 사용할 수 있습니다.
3. 왜 WebRTC가 중요할까요?
- 다른 플러그인, 소프트웨어 필요없이 브라우저로만 운용할 수 있기 때문입니다.
- 또 STUN, ICE, TURN, RTP-over-TCP 및 프록시 지원을 사용하는 NAT 및 방화벽 통과 기술을 포함하고 있기 때문입니다.
- 요즘 브라우저가 다 지원하기 때문입니다!
- 레이턴시가 짧습니다!
- 무료에 진입장벽이 낮답니다... 이건 잘.. ㅎㅎ
오늘은 여기까지 다음 시간에 이어서 하겠습니다!
참고자료
https://www.youtube.com/watch?v=0XceZw0Ktn0&list=PLayYqdnyegt0qX8EfEGExxZF3DxkyA1Dj&index=2
'iOS 개발' 카테고리의 다른 글
WebRTC 3 : 다음 스텝을 위한 개념정리 (0) | 2021.07.21 |
---|---|
WebRTC 2 : Signaling Server (0) | 2021.07.21 |
weak와 unowned의 차이점 (0) | 2021.05.31 |
댓글