๐ค WebRTC?
Gunwoo
Posted on April 5, 2021
๐ ๊ถ๊ธํ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋กํฉ๋๋ค.
๐ ๊ธฐ๋ก์์ ๋ฉ์ถ์ง ์๊ณ ๋์ ๊ฒ์ผ๋ก ๋ง๋ญ๋๋ค.
๐ ์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ์ง ๋๊ธ์ ๋จ๊ฒจ์ฃผ์ธ์ :D
๐ค WebRTC?
Web Real-Time Communication์ ์ฝ์๋ก ์ค์๊ฐ์ผ๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ (๋ํ android, ios๋ ์ง์)์์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ๊ธฐ์ ์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๋ณ๋์ ์ํํธ์จ์ด์ ๋์ ์์ด(๋๋ผ์ด๋ฒ, ํ๋ฌ๊ทธ์ธ ์์ด) ์ค์๊ฐ์ผ๋ก ํต์ ์(p2p) ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค๋ ๊ฒ์ด๋ค. ์์, ์์ฑ ๋ฐ ๋ฐ์ดํฐ ํต์ ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ API๋ผ๊ณ ํ ์ ์๋ค.(๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํด์ฃผ๊ณ ์๋ค.=>IE๋ ์ง์๋์ง ์๋๋ค..., ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ adapter.js) WebRTC๋ฅผ ํตํด ์์ฑํตํ, ๋น๋์ค์ฑํ ๋ฐ ํ์ผ ๊ณต์ ๋ฅผ ์ํ ์น-์ฑ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ค.
๐ WebRTC์ ๋ํ ๋๋ค๋ฅธ ์ ๋ณด!
- ๊ตฌ๊ธ์์ ์์ฑ/์์ ์ฝ๋ฑ ๋ฐ ์์ฝ ์บ์ฌ๋ง ๊ธฐ์ ์ ๊ฐ์ง 2๊ฐ์ ํ์ฌ๋ฅผ ์ธ์ํ ํ, ํฌ์์ ๊ฐ๋ฐ์ ๊ฑฐ์ฒ 2011๋ ๋์ WebRTC๋ฅผ ์คํ์์คํํ์ฌ API ํํ๋ก ๊ณต๊ฐํ๋ค.
- WebRTC๊ฐ ์๊ธฐ ์ ์๋ ์น์์ ํ์ ํต์ ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉ์๊ฐ ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ผํ๋ ๋ฒ๊ฑฐ๋ฌ์ ์์๋ค. ๊ทธ๋ฌ๋ WebRTC๋ก ์ธํด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ๋์๋ค.
- W3C์์ WebRTC์ ํ์ค๊ณผ API ์ ์๋ฅผ ์ํด ๋ ธ๋ ฅํ๊ณ , IETF(๊ตญ์ ์ธํฐ๋ท ํ์คํ ๊ธฐ๊ตฌ)์์ ํ๋กํ ์ฝ์ ํ์คํ ์์ ์ ์์ํ๋ค.
- WebRTC๋ ๊ตฌ๊ธ๋ฟ ์๋๋ผ, Mozilla, Opera ๋ฑ๊ณผ ๊ฐ์ ์น๋ธ๋ผ์ฐ์ ์ฃผ์ ๊ธฐ์ ๋ค์ ์ ์ ์ธ ์ง์์ ๋ฐ๋๋ค.
๐ WebRTC๋ฅผ ์ดํดํ๋ ค๋ฉด ํ์ํ ์ง์!
NAT(Network Address Translation)
NAT์ ํด๋น ๊ธฐ๊ธฐ์ ๊ณต์ธ(public) IP๋ฅผ ๋ถ์ฌํ๋๋ฐ, ๋ผ์ฐํฐ๊ฐ ๊ณต์ธ IP๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ๋ ์ฌ์ค(private) IP ์ฃผ์๋ฅผ ๊ฐ๊ฒ๋๋ค. ๊ณต์ธIP๋ ์ ์ผํ IP๋ฉฐ, ์ฌ์คIP๋ ํน์ ๋คํธ์ํฌ ์์์๋ง ์ ํจํ๋ค.
์ฌ๊ธฐ์ ๊ณต์ธIP๋ ์ค์ ์ฃผ์์ ๊ฐ๊ณ ์ธ๋ถ์ ๊ณต๊ฐ๋์ด ์๋ค. ๊ทธ๋ ๊ธฐ์ ๋ค๋ฅธ ์ปดํจํฐ์์ ๊ฒ์, ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ณต์ธIP๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ณด์ ๋ฐฉํ๋ฒฝ์ด ๋ฐ๋์ ํ์ํ๋ค.
์ฌ์คIP๋ ์ธ๋ถ์ ๊ณต๊ฐ๋์ง ์์ ๊ฒ์, ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฃผ๋ก ์ธํฐ๋ท์ ์ฌ์ฉํ ๋, ๋ผ์ฐํฐ์ ๊ณต์ธIP๋ฅผ ๋๊ณ ๊ทธ ๋ผ์ฐํฐ์ ์ฌ๋ฌ๋์ ๋๋ฐ์ด์ค๋ค์ด ์ฌ์คIP๋ฅผ ๊ฐ์ง๊ณ ์ ์ ์ํ๊ฒ ๋๋ค.
๋ค์ NAT์ ๋ํด ์ค๋ช ํ๊ฒ ๋๋ฉด, ํต์์ ์ผ๋ก ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ์ํด์ ๊ณต์ธ IP๊ฐ ํ์ํ๋ค. NAT์ ์ฌ์คIP๋ฅผ ๊ณต์ธIP๋ก 1๋1 ๋์์์ผ ๋ณํํ๋ ์ฅ์น์ด๋ค.
์ฌ๊ธฐ์ WebRTC๋ P2P ๋ฐฉ์์ผ๋ก ์๋ก์ ์ ๋ณด(๊ณต์ธIP)๋ฅผ ์์์ผํ๋ค.Signaling
RTCPeerConnection์ด ์์ฑ๋๊ธฐ ์ ์ ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ๊ธฐ๊ธฐ๋ผ๋ฆฌ ์๋ก์ ์์น ํ์ธ๊ณผ ๋ฏธ๋์ด ํฌ๋ฉง์ ๋ํ ํ์๋ฅผ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์๊ทธ๋๋ง์ด๋ผ ๋ถ๋ฅธ๋ค.Signaling Server
P2P ํต์ ์ ์ํด ์๋ก๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ์ ํ๋ค.๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์์ ์ฅ์น์ ์ ๊ทผํ๋ค.
Signaling ์๋ฒ๋ฅผ ํตํด ์๋๋ฐฉ์ ์ ๋ณด๋ฅผ ์ป๋๋ค.
-
Peer to Peer connection์ ํตํด ํต์ ํ๋ค.
์ฆ, ๊ฐ Peer๊ฐ ์ฐ๊ฒฐ๋๊ธฐ ์ํด์ Signaling ์๋ฒ์ ๋จผ์ ์ ๊ทผํ์ฌ ์๋๋ฐฉ์ ์ ๋ณด๋ฅผ ์์๋ธ ํ P2P Connection์ ํ๋ค. Caller๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ Signaling์๋ฒ๋ฅผ ํตํด ์์ ์ ์ ๋ณด๋ค์ ์ ๊ณตํ๊ณ , Callee๋ ๊ทธ ์ ๋ณด๋ค์ ๋ํด ์์ ์ ์ ๋ณด๋ฅผ ๋ด์ ๋ต์ฅํ๋ค.
Signaling ์๋ฒ์์ ๊ตํํด์ผ ํ ์ ๋ณด๋ค์ ์ธ์ ์ ์ด ๋ฉ์ธ์ง(ํต์ ์ ์ด๊ธฐํํ๊ฑฐ๋ ๋ซ๊ณ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๋ค), IP์ฃผ์/ํฌํธ, ๋ณด์ํค, ์ฝ๋ฑ/ํด์๋, ์๋ฌ๋ฉ์ธ์ง, ๋ฏธ๋์ด ์ ํ, ๋ฑ์ด ์๋ค.
Signaling ์๋ฒ๋ ์ง์ ๊ตฌ์ถํด๋ ๋๊ณ (WebSocket, SPI, XMPP/Jingle, Netty), cloud message platform(Pusher, Kaazing, PubNub), ์๋ง์กด์ Kinesis Video Stream , ๊ตฌ๊ธ์ AppRTC์์๋ Google App Engine์ผ๋ก ๊ตฌํ๋ ์๊ทธ๋๋ง ์๋ฒ์ ์ฌ์ฉํด๋ ๋๋ค. SDP (Session Description Protocol)
SDP๋ P2P๋ก ์๋ก ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ดํดํ๋๋ฐ ์ฌ์ฉ๋๋ค.
๋ฐ์ดํฐ์ ํด์๋, ํ์, ์ฝ๋ฑ, ์ํธํ ๋ฐฉ๋ฒ ๋ฑ์ ๊ธฐ์ ํ๋ ํ์ค(ํ๋กํ ์ฝ)์ด๋ฉฐ, ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ธ๋ค.JSEP (JavaScript Session Establishment Protocol)
ICE (Interactive Connectivity Establishment)
ICE๋ P2P๊ฐ ํต์ ์ ์ํ ๊ธฐ์ ๋ก ์๋ก์ ๊ธฐ๊ธฐ๊ฐ ํต์ ํ๊ธฐ ์ํ ์ต์ ์ ๊ฒฝ๋ก(ํต์ ๊ฐ๋ฅํ ๋ชจ๋ ์ฃผ์๋ค์ ๊ฐ์ ธ์จ๋ค)๋ฅผ ์ฐพ์ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค. ICE๋ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ์ํด STUN๊ณผ TURN์ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ๋ก SDP ์ ์ ๋ฐ ์๋ฝ ๋ชจ๋ธ์ ์ ์ฉํ ์ ์๋ค. NATํ๊ฒฝ์์ ์์ ์ ๊ณต์ธIP๋ฅผ ํ์ ํ๊ณ ์๋๋ฐฉ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ์๋ต ํ๋กํ ์ฝ์ด๋ผ๊ณ ํ ์ ์๋ค.ICE Candidate
ICE๋ฅผ ํตํด ์ป๊ฒ๋ ํ๋ณด๋ฅผ Candidate๋ผ ๋ถ๋ฅธ๋ค. SDP๋ฅผ ๊ฒฐ์ ํ ํ์๋ ICE Candidate์ ์๋ก ๊ตํํ๋ฉฐ ์ฌ๋ฌ ๊ฒฝ๋ก์ค ์ต์ ์ ICE๋ฅผ ๊ฒฐ์ ํ๊ฒ ํ๋ค. ์ด ๊ณผ์ ์์ ์ด๋ฏธ ์คํธ๋ฆฌ๋ฐ์ด ์์๋์ด๋ ์ฐ๊ฒฐ์ด๋ฐ์ ์์ ์ ํ์ง ํ์์ด ์ผ์ด๋ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ณด๋ฅผ ์์งํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก 3๊ฐ์ ์ฃผ์๋ฅผ ์ป๊ฒ๋๋ค: ์์ ์ ์ฌ์คIP์ ํฌํธ๋๋ฒ / ์์ ์ ๊ณต์ธIP์ ํฌํธ๋๋ฒ (STUN, TURN ์๋ฒ๋ก ๋ถํฐ ๋ฐ๋๋ค) / TURN์๋ฒ์ IP์ ํฌํธ๋๋ฒ (TURN ์๋ฒ๋ก ๋ถํฐ ๋ฐ๋๋ค.)STUN ์๋ฒ (Session Traversal Utilities for NAT)
STUN ์๋ฒ๋ ๊ธฐ๊ธฐ์ ๊ณต์ธ IP๋ฅผ ์ฐพ๊ณ P2P ์ฐ๊ฒฐ์ ๋ฐฉํดํ๋ ์์๊ฐ ๋ผ์ฐํฐ์ ์๋์ง ์์๋ด๋ ํ๋กํ ์ฝ์ด๋ค. ์ฆ, ํด๋น Peer์ ๊ณต์ธIP ์ฃผ์๋ฅผ ๋ณด๋ด๋ ์ญํ์ ๋ด๋นํ๋ค. ๋ํ ๋ ์๋ํฌ์ธํธ ๊ฐ์ ์ฐ๊ฒฐ์ ํ์ธํ๊ณ ๋์ ์ฐ๊ฒฐ์ ์ ์งํ๊ธฐ ์ํด์๋ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํญ์ ํจ๊ณผ์ ์ผ๋ก ์ผ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค. NAT์ ๋ณด์ ์ ์ฑ ๋ฑ์ด ์๊ฒฉํ๋ฉด ์ฐ๊ฒฐํ์ง ๋ชปํ ์๋ ์๋ค.TURN ์๋ฒ (Traversal Using Relays around NAT)
TURN์ STUN ์๋ฒ์์ ์ฐ๊ฒฐ์ด ์คํจํ์ ๊ฒฝ์ฐ ์ค๋์ค, ๋น๋์ค ๋ฑ์ ๋ฆด๋ ์ด ํด์ฃผ๋ ์ญํ์ ํ๋ค. TURN ์๋ฒ๋ ์ธํฐ๋ท๋ง์ ์์นํ๊ณ ๊ฐ Peer๋ค์ด ์ฌ์คIP์์์ ํต์ ํ๋ค. ์ฌ๊ธฐ์ ๊ฐ Peer๋ค์ด ์ง์ ์ ์ผ๋ก ํต์ ํ๋ ๊ฒ์ด ์๋ ๋ฆด๋ ์ด ์ญํ์ ํ๋ TURN ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ์ ํ๋ค. ๊ทธ๋ ๊ธฐ์ ์๋ฐํ ๋งํ๋ฉด P2P ํต์ ์ด์๋ ์ค๊ฐ์ ์๋ฒ(TURN)๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ฉฐ, ๊ทธ ๊ตฌ์กฐ์ ์ง์ฐ์ด ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค.
TURN๋ฅผ ํตํด ๋ชจ๋ ์ ๋ณด๋ฅผ ์ค๊ณํ๊ณ , STUN์ ๋นํด ๋ฆฌ์์ค๋ญ๋น๊ฐ ์ฌํ๊ธฐ ๋๋ฌธ์, ICE Candidate๊ณผ์ ์์ ๋ชจ๋ ํ๋ณด๊ตฐ์ ์ฐพ์ ํ, ๋์์ด ์๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ค.
P2P ๋์ ๊ณผ์
- ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ(๋๋ฐ์ด์ค) P2P ์ฐ๊ฒฐ์ ๋์ํ๋ค.
- ์๋ก์ ์ฃผ์๋ฅผ ๊ณต์ ํ๋ค.
- ๋ณด์์ฌํญ ๋ฐ ๋ฐฉํ๋ฒฝ์ ์ฐํ, ํต๊ณผํ๋ค.
- ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ตํํ๋ค.
์ถ๊ฐ ์ค๋ช
๊ฐ ๊ฐ์ธ์ ๋๋ฐ์ด์ค(์ปดํจํฐ)์๋ ๊ณต์ธIP๊ฐ ํ ๋น๋์ด ์์ง ์๋ค. ๊ทธ ์ด์ ๋ ๋ณด์๋ฌธ์ (๋ฐฉํ๋ฒฝ), NAT ๋ฑ์ด ์๋ค. ๋จ์ํ ๊ณต์ธIP๋ฅผ ์์๋๋ค๊ณ , ํน์ ์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์๋ค. ํด๋น ๋คํธ์ํฌ(๊ณต์ธIP)์ ์ฐ๊ฒฐ๋์ด ์๋ ์ฌ์คIP(๊ณ ์ ์) ์ฃผ์๊น์ง ์์๋ด์ผ ํน์ ์ฌ์ฉ์๋ฅผ ์ง์ ํ ์ ์๊ฒ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ฐํฐ๊ฐ NAT ์ญํ(๊ณต์ธIP์ ํฌํธ๋ฒํธ๋ฅผ ํ์ธ ํ, ํ์ฌ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์ฌ์คIP๋ฅผ ์ฐ๊ฒฐํด์ค๋ค)์ ๋ด๋นํ๊ธฐ ๋๋ฌธ์ P2P ์ฐ๊ฒฐ์ ์ํด์ ๊ฐ Peer๊ฐ ์ฐ๊ฒฐ๋ ๋ผ์ฐํฐ์ ๊ณต์ธIP ์ฃผ์์ ํฌํธ๋ฅผ ๋จผ์ ์์์ผํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ๋ผ์ฐํฐ๋ ํน์ ์ฃผ์๋ ํฌํธ์ ์ฐ๊ฒฐ์ ์ฐจ๋จํ๋ ๋ฐฉํ๋ฒฝ์ด ์ค์ ๋์ด ์์ ์ ์๋ค. ์ด๋ ๊ฒ ๋ผ์ฐํฐ๋ฅผ ํต๊ณผํด์ ์ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ NAT traversal ์ด๋ผ ํ๊ณ , ์ด ์์
์ STUN ์๋ฒ์ ์ํด ์ด๋ฃจ์ด์ง๋ค.
STUN ์๋ฒ์ ์ญํ์ ์์์ ์ค๋ช
ํ๋ฏ์ด, ๊ฐ Peer๊ฐ ์์ ์ ๊ณต์ธ IP ์ฃผ์์ ํฌํธ๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ ๋ํ ํ๋กํ ์ฝ์ด๋ค. ์ฆ, ์๋๋ฐฉ๊ณผ ๋ํ๋ฅผ ์์ํ๊ธฐ ์ ์ ์์ ์ ๊ณ ์ ์ฃผ์๋ฅผ ์กฐํํด์ ์์๋ด๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋ค์ํ ๋ฐฉํ๋ฒฝ ์ ์ฑ
์ผ๋ก ์ธํด STUN ์๋ฒ์์ ํญ์ ์์ ์ ์ ๋ณด๋ฅผ ์์์ฌ ์ ์๋ ๊ฒ์ด ์๋๋ค. ์ด๋ก์ธํด STUN ์๋ฒ๋ก ์์ ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์ค์ง ๋ชปํ ๊ฒฝ์ฐ์ ๋์์ผ๋ก TURN ์๋ฒ๋ฅผ ์ด์ฉํ ์ ์๋ค.
์ด๋ ๊ฒ STUN, TURN ์๋ฒ๋ฅผ ์ด์ฉํด ์๊ฒ๋ IP์ฃผ์์ ํฌํธ์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ฐ๊ฒฐ๊ฐ๋ฅํ ๋คํธ์ํฌ ์ฃผ์๋ฅผ Candidate๋ผ ๋ถ๋ฅด๊ณ ์ด Candidate๋ฅผ ๋ชจ๋ ์ฐพ์๋ด์ด ์ฃผ์๋ฅผ ์ฐพ์๋ธ๋ค. ์ด ๋ชจ๋ ๊ณผ์ ์ ICE๋ผ๋ ํ๋ ์์ํฌ์์ ์ด๋ฃจ์ด์ง๋ค.
๐ณ WebRTC์ ํ๋ฆ
- Session description์ ๊ตํํ๋ค.
- Signaling ํ๋ก์ธ์ค๋ call์ ์์ฒญํ๋ ์ ์ ๊ฐ offer๋ฅผ ๋ง๋ค๋ฉด์ ์์ํ๋ค.
- ์ด offer๋ session ์ ๋ณด๋ฅผ SDP ํฌ๋ฉง์ผ๋ก ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, callee์๊ฒ ์ ๋ฌ๋๋ค.
- Callee๋ caller์๊ฒ SDP ์ ๋ณด๋ฅผ ํฌํจํ answer ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ธ๋ค.
- ์์ ๊ณผ์ ์ ํตํด A์ B๋ ์ด๋ค ์ฝ๋ฑ๊ณผ ์ด๋ค video parameter๋ค์ด ์ฌ์ฉ๋ ์ง ์๊ฒ๋๋ค.
- ICE candidate๋ฅผ ๊ตํํ๋ค.
- SDP ๊ตํ ์ดํ ICE candidate ๊ตํ์ด ์์๋๋ค.
- ๊ฐ ICE candidate๋ caller ์ ์ฅ์์ ํต์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค.
- ๊ฐ Peer๋ ๊ฒ์๋๋ ์์๋๋ก candidate๋ฅผ ๋ด๋ณด๋ด๊ณ , ์ด๋ฏธ ์คํธ๋ฆฌ๋ฐ์ด ์์๋์ด๋ ๋ชจ๋ ๊ฐ๋ฅํ candidate๋ฅผ ์ ์กํ๋ค.
- ๊ฐ Peer๊ฐ ์๋ก ํธํ๋๋ candidate๋ฅผ ์ ์ํ๋ค๋ฉด, ๋ฏธ๋์ด ํต์ ์ ์์ํ๋ค.
- ์ถํ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด, ์คํธ๋ฆผ์ ํฌ๋งท์ด ๋ณ๊ฒฝ๋๋ค.
- ๋ฏธ๋์ด ์ ์ก ์์
๐ฒ WebRTC์ ์ค์ API
getUserMedia()
์ฌ์ฉ์๊ฐ ์์ ์ ๋๋ฐ์ด์ค๋ฅผ ์คํธ๋ฆผ ํ ์ ์๋๋ก ํ๊ฐ๋ฅผ ๋ฐ๋ API์ด๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ปดํจํฐ์ ์นด๋ฉ๋ผ์ ๋ง์ดํฌ ์ ๊ทผ์ ๋ด๋นํ๋ค.RTCPeerConnection
Peer๊ฐ์ ์ฐ๊ฒฐ์ ์์ฑํ์ฌ ์ค๋์ค์ ๋น๋์ค ํต์ ์ ์ฌ์ฉ ํ๊ฒ ํ๋ค. STUN ์๋ฒ๊ฐ ํ์ํ ๋ถ๋ถ์ด๋ค. ์ด ๊ฐ์ฒด๋ RTCConfiguration์ ์ธ์๋ก ๋ฐ๋๋ฐ ์ฐ๊ฒฐ์ค์ ๋ฐฉ๋ฒ๊ณผ ICE์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจ์์ผ์ผํ๋ค.RTCDataChannel
Peer๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ Tunnel API ์ด๋ค. RTCPeerConnection์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ก์ํค๊ธฐ ์ํ API์ด๊ณ , ์ด ๊ฐ์ฒด์์ createDataChannel()์ ํธ์ถํ์ฌ ์ป์ ์ ์๋ค.Select sources & outputs
Stream capture
๐ References
- [WebRTC] STUN ๊ณผ TURN ์ ๋ํ์ฌ #1 - ๊ฐ์
- Build the backend services needed for a WebRTC app
- WebRTC๋ ์ด๋ป๊ฒ ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์๊น?
- [WebRTC] WebRTC๋?
- [WebRTC] ์น๋ธ๋ผ์ฐ์ ๋ก ํ์ ์ฑํ ์ ๋ง๋ค ์ ์๋ค๊ณ ?
๐ค WebSocket?
WebSockect์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ socket connection์ ์ ์งํด์ ์ธ์ ๋ ์๋ฐฉํฅ ํต์ ๋๋ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก WebRTC ๊ตฌํ์ ์ํด ๋ง์ด ์ฌ์ฉ๋๋ค. WebSocket๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฐ์ดํฐ์ ๋น ๋ฅธ ์ ๋ฐ์ดํธ, ์ค์๊ฐ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๋งค์ฐ ์ค์ํ ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์ธ๋ฐ, webSocket์ Stateful protocol์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ํ๋ฒ ์ฐ๊ฒฐ๋๋ฉด ๊ณ์ ๊ฐ์ ๋ผ์ธ์ ์ฌ์ฉํด์ ํต์ ํ ์ ์๋ค.(๊ธฐ์กด ์น์ดํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ๋๋ถ๋ถ HTTP๋ฅผ ํตํด ์ด๋ฃจ์ด์ ธ์๊ณ , statelessํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ํ request์ ํ response๋ง ์๋ฒ์์ ์ ๋ฌ๋๋ ๊ตฌ์กฐ๋ค.) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ HTTP ์ฌ์ฉ์ ํ์์์ด ๋ฐ์๋๋ HTTP์ TCP ์ฐ๊ฒฐ ํธ๋ํฝ์ ํผํ ์ ์๋ค.
๐ SocketIO?
SocketIO๋ ์น์๋ฒ์ ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ํ์ ํด์ ๊ฐ์ฅ ์ ํฉํ ๊ธฐ์ ์ ์ฌ์ฉํด WebSocket์ ์ด์ฉํ ์ ์๋๋ก ํด์ค๋ค. ์ฆ, WebSocket์ ์ง์ํ์ง ์๋ ๊ตฌ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ์์(IE9) socketIO๋ก ๊ตฌํ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ polling flow๋ก webSocket์ ๋ฐ๋ผํ๋ฏ์ด ๊ตฌํํด์ค๋ค.
Posted on April 5, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024