๐ ๊ฐ์
๋ฐ๊ฐ์ต๋๋ค. WebRTC ๊ด๋ จ ๊ธ์ด ์ ์ ์ฒซ ํฌ์คํ ์ด ๋์๋ค์. ์ด ๋ด์ฉ์ ์์ฑํ๊ฒ ๋ ๋ฐ๋ ๋๋ฆ์ ๊ณ๊ธฐ๊ฐ ์์ต๋๋ค.
๋ถํธ์บ ํ์์ ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์, ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด WebRTC๋ผ๋ ๊ธฐ์ ์ ์ฒ์ ์ ํ๊ณ ์ ์ฉํ์์ต๋๋ค. ๊ตฌํ ๋จ๊ณ๋ถํฐ ๋ง์ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์๊ณ , ์๋ง์ ๊นํ ๋ ํฌ์งํ ๋ฆฌ์ ๋ธ๋ก๊ทธ ๊ธ์ ์ฐธ๊ณ ํ์ง๋ง, ๊ธฐ์ด ์ด๋ก ์ ๋ํ ๋ถ์กฑํจ์ ๋๋ ์ฑ๋ก ๋ฐ๋๋ผ์ธ์ ์ซ๊ฒจ ํ๋ก์ ํธ๋ฅผ ์ด์๋ถ์ ๋ง๋ฌด๋ฆฌ ํ์์ต๋๋ค.
๊ฐ์ธ์ ์ธ ํ๊ณ ๋ฅผ ์งํํ๋ฉด์ ์ด๋ฐ ์๊ฐ์ด ๋ค์์ต๋๋ค.
“๋ฉด์ ์์ WebRTC์ ๋์ ๋ฐฉ์์ด๋ ์ฌ์ฉ ์ด์ ๋ฅผ ๋ฌผ์ด๋ณธ๋ค๋ฉด, ์ ๋๋ก ์ค๋ช ํ ์ ์์๊น?”
“๋๊ตฐ๊ฐ WebRTC๋ฅผ ์ฒ์ ์ด๋ค๊ณ ์กฐ์ธ์ ๊ตฌํด์จ๋ค๋ฉด, ๋ช ์พํ๊ฒ ์ค๋ช ํด์ค ์ ์์๊น?”
์ง๋ฌธ์ ๋ํ ์ ๋๋ต์ “NO” ์์ต๋๋ค. ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ฌด์์ธ์ง ์ธ์งํ๊ณ , ๊ณผ๊ฑฐ์ ์ ์ฒ๋ผ ๋ง๋งํจ์ ๋๋ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋๊ณ ์ ๋ค์ ๊ณต๋ถํ๊ณ ์ด ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
์ด ํฌ์คํ ์ ์ด๋ก ํธ๊ณผ ์ค์ต ์ฝ๋ ํธ์ผ๋ก ๋๋์ด ์์ฑ๋์์ผ๋ฉฐ, ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- WebRTC๋?
- WebRTC ๋์๋ฐฉ์
- ํต์ฌ ์ ๋ฆฌ
- ๋ง์น๋ฉฐ
๐ค WebRTC๋?
Web Real-Time Communication์ ์ฝ์๋ก, ๋ณ๋์ ํ๋ฌ๊ทธ์ธ ์์ด ์น/์ฑ ํ๊ฒฝ์์ ์นด๋ฉ๋ผ, ๋ง์ดํฌ, ๋ฐ์ดํฐ ์ฑ๋์ ํตํ ์ค์๊ฐ ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
์ฃผ์ ํน์ง
- Peer-to-Peer ์ฐ๊ฒฐ
- ๋ฏธ๋์ด/๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ฌ์ฉ์ ๊ฐ ์ ์ก
- Real-Time๊ณผ ๋น์ทํ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ ๊ณต
- P2P ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํ Signaling ๋จ๊ณ ํ์
- ๋ฏธ๋์ด๋ฟ ์๋๋ผ ๋ฐ์ดํฐ ์ ์ก๋ ๊ฐ๋ฅ
- ์ค๋์ค/๋น๋์ค ์ธ์ ํ ์คํธ, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ P2P๋ก ์ ์ก ๊ฐ๋ฅ
- ๊ฒ์, ์ฑํ , ํ์ผ ์ ์ก ๋ฑ์ ํ์ฉ
- ๋ธ๋ผ์ฐ์ ์์ฒด ์ง์
- ๋ณ๋ ํ๋ฌ๊ทธ์ธ ์์ด ๋์
- Chrome, Firefox, Safari ๋ฑ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ์ง์
- Android ๋ฐ iOS์์๋ ์ง์ ๊ฐ๋ฅ
- ์ผ๋ถ ๋น์ฃผ๋ฅ ๋ธ๋ผ์ฐ์ /๋ฒ์ ์์๋ ๋ฏธ์ง์ ๊ฐ๋ฅ์ฑ ์์
- ๋น๊ต์ ๋ฎ์ ์ง์
์ฅ๋ฒฝ
- ๊ธฐ๋ณธ JavaScript API๋ก ๊ตฌ์ฑ
์ WebRTC๊ฐ ํ์ํ ๊น?
๊ธฐ๋ฅ ๊ฐ๋ฐ ์๊ตฌ ์ฌํญ์ผ๋ก ์ฌ์ฉ์ ๊ฐ ์ค์๊ฐ ํ์์ฑํ ์ด ์๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ์ง๊ธ๊น์ง๋ REST API๋ก JSON ์ํ์ฐจ๋ง ํ๋ค๊ฐ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ค๋ ๋จธ๋ฆฌ๊ฐ ์ํ์์ง๋๋ค. WebRTC๊ฐ ์๋ค๋ฉด ๊ณ ๋ คํด์ผํ ์์๋ค์ด ๋๋ฌด๋ ๋ง์ต๋๋ค.
- P2P ์ฐ๊ฒฐ์ ์ง์ ๊ตฌ์ฑํ ๊ฒ์ธ๊ฐ?
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ฅผ ํตํด ์ค๊ณํ ๊ฒ์ธ๊ฐ?
- ์ค์๊ฐ์ด๋ผ๋ฉด UDP๋ฅผ ์ง์ ๋ค๋ค์ผ ํ๋?
- ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ ๋ญ๊ฐ ์์๊น?
- ํ๋ฌ๊ทธ์ธ์ด๋ ๋ณต์กํ ์ค์ ์ด ํ์ํ ๊ฑด ์๋๊น?
- ์์์ผ ํ ํ๋กํ ์ฝ์ ๋ ์ ์ด๋ ๊ฒ ๋ง์ ๊ฑด์ง…
์ด์ฏค ๋๋ฉด ๋จธ๋ฆฌ์นด๋ฝ์ด ํ ์ฌ์ฉ ๋น ์ง๊ธฐ ์์ํฉ๋๋ค.
๋คํํ๋ WebRTC๋ ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ ๋์ด์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
๊ฐ๋จํ๊ฒ ์ฃผ์ ํน์ง์ ์ดํด๋ดค์ผ๋, ์ด์ ๋ถํฐ๋ ๊ธฐ์ ์ ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ํด WebRTC๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด ๊น์ง ์๊ณ ์ ๋นํ ์ ์์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
๐ WebRTC ๋์๋ฐฉ์
์์ ๋ด์ฉ์์, WebRTC๋ P2P ์ฐ๊ฒฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
P2P ์ฐ๊ฒฐ์ ์ค๋ฆฝํ๊ธฐ ์ํด Signaling ์ด๋ผ๋ ๊ณผ์ ์ ๋จผ์ ๊ฑฐ์นฉ๋๋ค. ์ Signaling์ด ํ์ํ์ง ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง๋ฅผ ๋ ๋ช ์ ์ ์ ๊ฐ ํ์์ฑํ ์ ์๋ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์คํ์ ํ๋ฆ์ ๋ฐ๋ผ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
์, ์ด์ ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด ๋ ์จ ์ด์๋ก ์ธํด์ ์ง์ฝ์ ํ๊ธฐ๋ก ํฉ๋๋ค.
ํ์ง๋ง, ๋์ ๋ง๋์ ๋๊ณ ์ถ์๊ฑฐ์ฃ . ์ด ๋, ์คํฐ์ง๋ฐฅ์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด์ ํ์์ฑํ ์ผ๋ก ๋ง๋์๊ณ ์ ์ํฉ๋๋ค.
๋ฑ์ด๋ ์๊ฐํ์ต๋๋ค.
“์ฐ๋ฆฌ ๊ฐ์ ์ปดํจํฐ์์ ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค์ IP์ PORT ๋ฒํธ๋ฅผ ์์์ผ ์ ํํ P2P๋ก ์ฐ๊ฒฐํ ์ ์์ํ ๋ฐ, ์ด๋ป๊ฒ ์์๋ด์ง?”
Signaling
Signaling ์ด๋, ๊ณ ์ IP๋ฅผ ๊ฐ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ (e.g, AWS EC2๋ก ๋ฐฐํฌํ ์๋ฒ)์ ํตํด WebSocket, REST API ๋ฑ์ ๋ณ๋์ ์ฑ๋์ ์ฌ์ฉํด ์๋ก์ SDP ์ ๋ณด์ ICE Candidate๋ฅผ ๊ตํํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ ์ปดํจํฐ๋ ์ผ๋ฐ ๊ฐ์ ๋คํธ์ํฌ ํ๊ฒฝ์ ์๊ธฐ ๋๋ฌธ์, ์ธ๋ถ ์ฐ๊ฒฐ์ ์๋ํ ๋๋ง๋ค ์ฌ์ฉ ๊ฐ๋ฅํ IP์ PORT ๋ฒํธ๊ฐ ๋งค๋ฒ ๋์ ์ผ๋ก ๋ฐ๋๊ณ , NAT๊ฐ ๋์ํ๋ ๋ผ์ฐํฐ ๋ค์ ์จ์ด ์์ด ์๋ก์ IP, PORT ๋ฒํธ๋ฅผ ์ง์ ์ ์ ์์ต๋๋ค.
ํ์ง๋ง ๋๊ตฐ๊ฐ ํ์์ฑํ ์๋น์ค๋ฅผ ์ํด ๋ฐฐํฌํ ์๋ฒ๊ฐ ์๋ค๊ณ ํด๋ด ์๋ค.
ํด๋น ์๋ฒ๋ ์ธ์ ๋ ์ ๊ทผํ ์ ์๋๋ก ๊ณ ์ ๋ IP:PORT๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ ๊ฐ์ ์ด ์๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์์ ์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์, ์๋ฒ๋ ๋ฑ์ด์ ์ ๋ณด๋ฅผ ์คํฐ์ง๋ฐฅ์๊ฒ, ์คํฐ์ง๋ฐฅ์ ์ ๋ณด๋ฅผ ๋ฑ์ด์๊ฒ ์ ๋ฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด์ฒ๋ผ P2P ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํ ์ด๊ธฐ ๋ฉ์์ง ๊ตํ ๊ณผ์ ์ Signaling์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ค๊ฐํ๋ ์๋ฒ๋ฅผ Signaling Server ๋ผ๊ณ ํฉ๋๋ค. Signaling ๊ธฐ๋ฅ์ WebRTC API์ ํฌํจ๋ผ ์์ง ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํด์ผ ํฉ๋๋ค. ํ์ง๋ง, ์ ๋ฌ ๋์๋ง ๋ช ํํ ๊ตฌ๋ถํ ์ ์๋ ๋ก์ง์ ์์ฑํ๋ค๋ฉด ๋ฉ์์ง๋ฅผ ๋ฐ์ ๊ทธ๋๋ก ๋์์๊ฒ ์ ๋ฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
ํ๊บผ๋ฒ์ ์์ํ ํค์๋๊ฐ ์์์ก๋ค๋ฉด ์ ๊น ๋ฉ์ถ๊ณ ์ถ์ด์ง ์๋ ์์ต๋๋ค. ๊ถ๊ธํ ๋ถ๋ถ, ๊ฐ๋ณ๊ฒ ์ ๋ฆฌํ๊ณ ๊ฐ๋ด ์๋ค.
NAT(Network Address Translation)
“์ ์๋ฒ๋ ๊ณ ์ IP์ด๊ณ , ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ ๋์ ์ธ IP/PORT๋ฅผ ์ฐ๋ ๊ฑฐ์ง?”
ํต์ฌ์ ๋ฐ๋ก IPv4 ์ฃผ์์ ๋ถ์กฑ๊ณผ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ NAT ๋๋ฌธ์ ๋๋ค.
IPv4๋ ์ฝ 43์ต ๊ฐ์ ์ฃผ์(2³²)๋ฅผ ์ ๊ณตํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋นจ๋ฆฌ ๊ณ ๊ฐ๋์์ต๋๋ค. ์๋ํ๋ฉด ์ปดํจํฐ, ์ค๋งํธํฐ์ ๋ฌผ๋ก ์ด๊ณ ๋์ฅ๊ณ , ์ธํ๊ธฐ, ์๋์ฐจ๊น์ง ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋๋ ์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ๋ชจ๋ ๊ธฐ๊ธฐ์ ๊ณ ์ ํ IP๋ฅผ ๋ถ์ฌํ๊ธฐ์ ์๊ฐ ํฑ์์ด ๋ถ์กฑํฉ๋๋ค.
์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ด NAT ์ ๋๋ค.
NAT๋ ํ๋์ ๊ณต์ธ IP๋ฅผ ์ฌ๋ฌ ๋ด๋ถ ์ฅ์น๋ค์ด ํจ๊ป ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง์์ ์ฐ๋ ๊ณต์ ๊ธฐ๋ ์ฌ์ค NAT ๊ธฐ๋ฐ์ ์ฅ์น์ ๋๋ค. ๊ณต์ ๊ธฐ๋ ๋ด๋ถ ๋คํธ์ํฌ์ ์ฌ์ค IP๋ค์ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์๊ณ , ๋์ ์์ ์ ๊ณต์ธ IP๋ก ํต์ ์ ์ค๊ฐํฉ๋๋ค.
์ ๊ทธ๋ฆผ์์ ๋ฑ์ด๊ฐ ์ธ๋ถ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋์ ๋ ๊ณผ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๊ณต์ ๊ธฐ์ ์ฐ๊ฒฐ๋ ๋ฑ์ด์ ๋ฐ์คํฌํ์ ๋ก์ปฌ DHCP ์๋ฒ๋ฅผ ํตํด์ private IP ํ ๋น๋ฐ์ต๋๋ค.
- 192.168.0.23
- ๋ฑ์ด๊ฐ ๊ณ ์ IP๋ฅผ ๊ฐ์ง ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ๋ผ์ฐํฐ๊ฐ NAT ๋ณํ์ ์ํํ๊ณ ์ธ๋ถ๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
- ๋ผ์ฐํฐ๊ฐ ๊ฐ์ง ๊ณต์ธ IP + ์ฌ์ฉ ๊ฐ๋ฅํ PORT ๋ก ๋ณํ
- 192.168.0.23:52933 ⇒ 112.113.114.115:62000
- ์ฐ๊ฒฐ์ด ์ง์๋๋ค๋ฉด NAT๊ฐ ๋งคํํ ํด๋น IP:PORT ๋ฅผ ๋ฑ์ด๊ฐ ๊ณ์ ์ ์ ํ๋ฉด์ ์ฌ์ฉ
- ๋ผ์ฐํฐ๊ฐ ๊ฐ์ง ๊ณต์ธ IP + ์ฌ์ฉ ๊ฐ๋ฅํ PORT ๋ก ๋ณํ
- ๋ฑ์ด๋ ์ธ๋ถ ์๋ต์ ๋ฐ๊ณ ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋ฉ๋๋ค.
- ํ ๋น ๋ฐ์๋ IP:PORT๋ฅผ ๋งคํ ํ ์ด๋ธ์์ ์ ์ธ
- PORT ๋ฒํธ 62000์ด ๋ค์ ๊ฐ์ฉ ์ํ๊ฐ ๋จ
๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ฒ๋ผ ์ผ๋ฐ ์ฌ์ฉ์๋ ๋ณดํต NAT ๋ค์ ์์ต๋๋ค.
๊ทธ ์์์๋ ์ฌ์ค IP๋ฅผ DHCP์๋ฒ์๊ฒ ๋์ ์ผ๋ก ํ ๋น๋ฐ๊ณ ์ธ๋ถ์์๋ ๊ณต์ ๊ธฐ์ ๊ณต์ธ IP ํ๋๋ง ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ๋๊ตฌ์ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋ผ์ผ ํ๋์ง ์ธ๋ถ์์๋ ์๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด๋ ๊ฒ ๋์ํจ์ผ๋ก์จ ์ผ๋ฐ ์ฌ์ฉ์๋ ํ์ํ ๋๋ง๋ค ๋์ ์ผ๋ก IP:PORT๋ฅผ ํ ๋น๋ฐ๊ณ ํด์ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, IP ์ฃผ์ ๋ถ์กฑ ํ์์ ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ฉด ์๋ฒ๋ ์ ๊ณ ์ IP๋ฅผ ์ธ๊น์?
WebRTC์์ Signaling Server์ฒ๋ผ ์ค๊ฐ ์ญํ ์ ์ํํด์ผ ํ๋ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ค์ด ํญ์ ์ ๊ทผํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ณ ์ IP๊ฐ ์ฌ์ค์ ํ์์ ๋๋ค.๊ณ ์ ๋ ์์น์ ์๊ธฐ ๋๋ฌธ์ ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด ์๋ฒ์ ํต์ ํ๊ธธ ์ํ ๋, ์๋ฒ๋ฅผ ํตํด ์๋ก์ ์ ๋ณด๋ฅผ ๊ตํํ๊ณ ์ฐ๊ฒฐํ ์ ์๋ ๊ฑฐ์ฃ . ๋งค๋ฒ ๋ฐ๋๋ IP๋ก ์ด์ํ๋ค๋ฉด ์ฌ์ฉ์๋ ํผ๋์ค๋ฝ๊ณ , ๋๋ฉ์ธ ๋งคํ๋ ํ๋ค ์ ๋ฐ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ผ๋ฐ ์ฌ์ฉ์๋ ๊ณ ์ IP๋ฅผ ๋ชป ๊ฐ์ง๋ ๊ฑธ๊น์?
๊ผญ ๊ทธ๋ฐ ๊ฑด ์๋๋๋ค. ์ผ๋ฐ ์ฌ์ฉ์๋ ๊ณ ์ IP๋ฅผ ์ ์ฒญํด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฐ์ ์ฉ ์ธํฐ๋ท ํ๊ฒฝ์์๋ ํน๋ณํ ์ ์ฒญํ์ง ์์ผ๋ฉด ๋์ IP๊ฐ ๊ธฐ๋ณธ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ณ ์ IP๋ ์ถ๊ฐ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๊ณ , ๊ด๋ฆฌ ๋น์ฉ๋ ์ฆ๊ฐํ๋ฉฐ ๋ณด์ ์ธก๋ฉด์์๋ ๋์ IP๊ฐ ๋ ์์ ํ๋ค๊ณ ์ฌ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
SDP (Session Description Protocol)
“SDP๋ ์ด๋ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๊ธธ๋ ๊ตํ์ ํด์ผํ ๊น?”
๋ด๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฏธ๋์ด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋์ง๋ฅผ ์๋ ค์ฃผ๋ ์ค๋ช ์์ ๋๋ค.
WebRTC์์ ํผ์ด ๊ฐ ์ฐ๊ฒฐ์ ์๋ฆฝํ๊ธฐ ์ํด, ๊ฐ์์ ํ๊ฒฝ๊ณผ ๋ฅ๋ ฅ์ ๋ฌธ์ ํํ๋ก ์ ๋ฆฌํด์ ์๋ก ๊ตํํด์ผ ํฉ๋๋ค.
{
"sdp" : "...", // ์ธ์
์ค๋ช
๋ฌธ์์ด
"type": "offer" // ๋๋ "answer"
}
RTCPeerConnection์ createOffer() ๋๋ createAnswer() ํธ์ถ์ ํตํด์ ์์ ์ SDP๋ฅผ ์์ฑํ๋ฉด sdp์ type ํ๋๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
v=0
o=- 2011585323452908947 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS f5471704-1d3a-4ee9-904d-88c34dd79e39
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:OrFD
a=ice-pwd:8+5g70q/An4QYpxFt9XxErsN
a=ice-options:trickle
a=fingerprint:sha-256 CF:06:5C:E1:57:D0:C1:B4:13:72:25:85:57:C6:36:7E:CC:E2:67:44:DA:DD:5F:E9:A5:19:52:5F:3C:6E:A9:5B
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendrecv
a=msid:f5471704-1d3a-4ee9-904d-88c34dd79e39 c9076eae-d8c4-4535-b702-ab5ee80b0781 // WebRTC์์ media stream๊ณผ track ์๋ณ์ ์ง์
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
.
.
.
์ ๋ฐ์ดํฐ๋ ์์ฑํ SDP ๋ฐ์ดํฐ ์ผ๋ถ๋ฅผ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค.
์ด๋ค ๋ฏธ๋์ด๋ฅผ, ์ด๋ค ๋ฐฉ์์ผ๋ก, ์ด๋ค ์ฝ๋ฑ์ผ๋ก ๋ณด๋ผ ์ ์๋์ง๋ฅผ ๊ธฐ์ ํ ์ ๋ณด ์งํฉ์ ๋๋ค.
“์ ๊ฐ์์ SDP ๋ฅผ ๊ตํํด์ผํ ๊น”
๊ฐ ํผ์ด์ ๋ธ๋ผ์ฐ์ ๋ ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ๊ตฌ์ฑ, NAT, ์ฝ๋ฑ ์ง์, ํธ๋ ๊ฐ์ ๋ฑ ๋ค๋ฅธ ํ๊ฒฝ ์ ๋๋ค. ์๋ก ์ด๋ค ์กฐ๊ฑด์ผ๋ก ๋ฏธ๋์ด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋์ง ํฉ์ํ๊ธฐ ์ํด offer(caller์ SDP)์ answer(callee์ SDP)๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํฉ๋๋ค.
- offer(SDP): Caller๊ฐ ์์ ์ ์กฐ๊ฑด์ ๋จผ์ ์ ์
- answer(SDP): ๋ฐ์ offer์ ๋ํด์ Callee๊ฐ ์ด๋ฅผ ์์ฉํ๊ฑฐ๋ ์กฐ์ ํด์ ์๋ต
์์ชฝ์ด ์๋ก ์์ฉ ๊ฐ๋ฅํ ์กฐ๊ฑด์ ํฉ์ํ๋ฉด ICE Candidate ๊ตํ์ ํตํด ์ค์ ๋คํธ์ํฌ ์์์ ์ฐ๊ฒฐ์ ์๋ฆฝํ๊ฒ ๋ฉ๋๋ค.
ICE Candidate (Interactive Connectivity Establishment)
P2P ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋ชจ๋ ๋คํธ์ํฌ ๊ฒฝ๋ก ํ๋ณด(IP:PORT)๋ฅผ ๋์ดํ ์ ๋ณด์ ๋๋ค.
"candidate:1025593763 1 udp 2122260223 192.168.0.44 51935 typ host generation 0 ufrag JuFu network-id 1 network-cost 10"
์ ๋ฐ์ดํฐ๋ ์ค์ ์์งํ ICE Candidate ์ค ํ๋์ ๋๋ค.
์ฐ๊ฒฐ ์ ํ, IP ์ฃผ์, PORT ๋ฒํธ, ์ฐ์ ์์, ์ ์ก ๋ฐฉ์ ๋ฑ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๊ฐ ํผ์ด๋ ๋ก์ปฌ IP, STUN, TURN ๋ฑ์์ ๋ค์ํ ํ๋ณด ๊ฒฝ๋ก๋ฅผ ์์งํฉ๋๋ค. ์๋๋ฐฉ๊ณผ ์ง์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ๋ชจ๋ ํ๋ณด๋ฅผ ์๋ก์๊ฒ ์ ๋ฌํฉ๋๋ค. ํ๋ณด๋ค์ ๋ฐ์ ๋ค, ๊ฐ์ฅ ์ํํ ๊ฒฝ๋ก๋ฅผ ์ ํํด ์ฐ๊ฒฐ์ ์๋ฆฝํฉ๋๋ค.
์๋ก์ SDP๋ง ์ฃผ๊ณ ๋ฐ์๋ค๋ฉด ์ฐ๊ฒฐ ๋ฐฉ์์ ์ ์ ์์ง๋ง ์ด๋๋ก ์ฐ๊ฒฐํ ์ง ์ ์ ์์ต๋๋ค. ICE Candidate๋ง ์์ผ๋ฉด ์ด๋๋ก ์ฐ๊ฒฐํ์ง๋ ์ ์ ์์ง๋ง, ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ์ง ์ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ์๋, ์ฐ๊ฒฐํ๊ธธ ์ํ๋ ํผ์ด ๊ฐ SDP์ ICE Candidate ๊ฐ ๋ ๋ค ์ ์ ๊ตํ ๋์ด์ผ ์์ ์ ์ธ ํ์์ฑํ ์ ์งํํ ์ ์์ต๋๋ค.
STUN / TURN
์์์ ICE Candidate๋ “P2P ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํด ๊ฐ๋ฅํ ๋ชจ๋ ๋คํธ์ํฌ ๊ฒฝ๋ก ํ๋ณด(IP:PORT)๋ฅผ ๋์ดํ ์ ๋ณด”๋ผ๊ณ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ํ๋ณด๋ค์ ์ด๋ป๊ฒ, ์ด๋์ ์์ง๋๋ ๊ฑธ๊น์?
๋ฐ๋ก STUN๊ณผ TURN ์๋ฒ์ ๋์์ ๋ฐ์์ผ ๊ฐ๋ฅํ ์ด์ผ๊ธฐ์ ๋๋ค.
“STUN์ด ๋ญ์ฃ ? ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌํํด์ผ ํ๋์?”
STUN (Session Traversal Utilities for NAT)๋ ์์ ์(NAT ๋ค์ ์จ์ด์๋ ์ผ๋ฐ ์ ์ ) ์ธ๋ถ(NAT ๊ฐ ๋ ธ์ถํ ๊ณต์ธ IP:PORT)์์ ๋ดค์ ๋ ์ด๋ค IP์ ํฌํธ๋ฅผ ์ฌ์ฉ ์ค์ธ์ง ์๋ ค์ฃผ๋ ์๋ฒ์ ๋๋ค.
์ผ๋ฐ ์ฌ์ฉ์๋ ๋๋ถ๋ถ NAT ๋ค์ ์์ด์ ๋ด๋ถ IP๋ง ์๊ณ ์์ต๋๋ค (์: 192.168.x.x). WebRTC ์ฐ๊ฒฐ์ ์ํด์ ์๋๋ฐฉ์๊ฒ ๊ณต์ธ IP:PORT ์ ๋ณด๋ฅผ ์๋ ค์ค์ผ ํฉ๋๋ค. ์ด๋ STUN ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์ธ๋ถ ๊ธฐ์ค์ IP:PORT๋ฅผ ์๋ ค์ค๋๋ค.
STUN์ ๋ณ๋ค๋ฅธ ์ธ์ฆ ์์ด public STUN ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌ์ถํ์ง ์์๋ ๋๋ค๋ ๋ง์ด ๋๊ฒ ๋ค์. ๋น๊ต์ ๋ฆฌ์์ค ๋ถ๋ด์ด ์ ๊ณ ๋ฌด์ ์ ๊ณต์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋๋ฐ, ์์ฃผ ์ฌ์ฉ๋๋ STUN ์๋ฒ๋ stun.l.google.com:19302 ์ด๊ณ , ๋ค๋ฅธ ์๋ ํํฐ STUN ์๋ฒ๋ค๋ ์ฌ๋ฟ ์กด์ฌํฉ๋๋ค.
“STUN๋ง ์์ผ๋ฉด ๋ ๊ฒ ๊ฐ์๋ฐ, TURN ์ ๋ ๋ญ์ฃ ? ์ด๊ฑด ์ง์ ๊ตฌํํด์ผ ํ๋์?”
STUN ์ ํตํ ์ธ๋ถ ๋ ธ์ถ IP:PORT ๋ฅผ ์ป๋ ์ฐ๊ฒฐ ์์ฒด๋ฅผ ์ฐจ๋จํ๊ฑฐ๋ ๋ฐฉํ๋ฒฝ ์ด์, ๋์นญ NAT ๊ตฌ์กฐ๋ก ์ธํด ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ์ด ๋, ์ตํ์ ์๋จ์ด TURN (Traversal Using Relays around NAT) ์ ๋๋ค.
๐ค ๋์นญ NAT๋?
๋์นญ NAT๋ ๋งคํํ ๊ณต์ธ IP:PORT๋ฅผ ํน์ ๋ชฉ์ ์ง์ ํ์ ํฉ๋๋ค.
STUN์ ํตํด์ ๋ ธ์ถ๋ ๊ณต์ธ IP:PORT์์ ์์๋๋ค๊ณ ํด๋, ํด๋น IP:PORT๋ STUN์ ์ํ ์ฃผ์์ด๊ณ STUN์ด ์๋ ๋ค๋ฅธ ์ฃผ์์ง์์ STUN์ ํตํด ์ป์ ๊ณต์ธ IP:PORT ๋ก ์ฐ๊ฒฐ์ ์๋ํ๋ฉด NAT๋ ํด๋น ์ฃผ์์ ์์ฒญ์ ์ธ์ํ์ง ๋ชปํฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด, ๋์นญ NATํ๊ฒฝ์์ STUN์ผ๋ก ์ป์ IP:PORT๋ "STUN์ ์์ฒญ๋ง" ๋ฐ์๋ค์ผ ์ ์๋ ์ฃผ์๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก, ํด๋น ์ฃผ์๋ก STUN์ด ์๋ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ์๋ํ ์ ์๊ฒ ๋ฉ๋๋ค.
TURN์ STUN์ผ๋ก ์ง์ ์ฐ๊ฒฐ์ด ์ ๋๋ฉด, ์ค๊ณ ์๋ฒ๋ฅผ ํตํด ํต์ ํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฒ์ ๋๋ค.
TURN ์๋ฒ๋ ์์ ์ IP์ ํฌํธ๋ฅผ ์๋ํด์ฃผ๊ณ , ํด๋ผ์ด์ธํธ ๊ฐ ํธ๋ํฝ์ ์ค๊ฐ์์ ๋์ ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋๊ณ ํ์์ฑํ ์ ์งํํ๋ค๋ฉด, ์ค์ ๋ก P2P๊ฐ ์๋ TURN ๊ฒฝ์ ํ ํํ๋ก ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ฃผ๊ณ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๊ฒฐ๊ตญ P2P ์ฐ๊ฒฐ์ ์คํจํ์ง๋ง, ์๋ฒ๋ฅผ ๊ฑฐ์น๋ ์์ ์ ์ธ ์ฐ๊ฒฐ๋ก ์ด์ด์ง ์ ์๋๊ฑฐ์ฃ .
TURN์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌ์ถํ ์๋ ์๊ณ , ํด๋ผ์ฐ๋ ์๋น์ค๋ ์กด์ฌํฉ๋๋ค.
์ ๊ฐ ํ ํ๋ก์ ํธ๋ฅผ ์งํํ์ ๋, ์คํ ์์ค์ธ coturn ์ ๋ฐ๋ก ๋ฐฐํฌํ์ฌ ์ตํ์ ์๋จ์ธ ๋ฆด๋ ์ด ์ฐ๊ฒฐ์ด ์ํ๋๋๋ก ๊ตฌํํ์์ต๋๋ค. coturn ์ ์ง์ ๋ฐฐํฌํ๋ ๊ฒ ๋ง๊ณ ๋ ์ ์ฉํ ๊ธฐ์ ๋ค์ด ๋ง์ ๊ฒ์ผ๋ก ์๊ณ ์์ผ๋, ์ค์ ์๋น์ค์ ์ ์ฉํ๊ณ ์ถ์ผ์๋ค๋ฉด ํ ๋ฒ ์ฐพ์๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค ๐
๊ทธ๋ผ ์ด์ , WebRTC์ P2P ํ์์ฑํ ์ฐ๊ฒฐ์ ์ดํดํ๊ธฐ ์ํ ๊ด๋ จ ํค์๋ Signaling, NAT, SDP, ICE Candidate, STUN/TURN์ ์๊ฒ๋์ผ๋, ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ ํ์์ฑํ ์ ์ํ ์ฐ๊ฒฐ ๊ณผ์ ์ ์์ฑ๋ ๊ทธ๋ฆผ์ผ๋ก ๋ค์ ํ ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ STUN ์ผ๋ก ์ป์ ICE Candidate๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ, Signaling์ ํ๋ฆ์ ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด Signaling Server๋ฅผ ํตํด์ SDP๋ฅผ ๊ตํํฉ๋๋ค.
- caller์ SDP = offer
- callee์ SDP = answer
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด ์๋ ํํฐ์ STUN ์๋ฒ๋ฅผ ์ฌ์ฉํด์ ICE Candidate๋ฅผ ์์งํฉ๋๋ค.
- ๊ฐ๊ฐ STUN์ ํตํด ์์งํ ICE Candidate๋ฅผ Signaling Server ๋ฅผ ํตํด ๊ตํํฉ๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ ๊ตํํ ICE Candidate๋ฅผ ํตํด P2P ์ฐ๊ฒฐ์ ์ฑ๊ณตํฉ๋๋ค.
STUN๋ง์ผ๋ก๋ ๋ถ๊ฐ๋ฅ ํ ์ํฉ์์ TURN์ ๋์์ ๋ฐ๋ Signaling์ ํ๋ฆ์ ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด Signaling Server๋ฅผ ํตํด์ SDP(caller๋ offer, callee๋ answer) ๋ฅผ ๊ตํํฉ๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด ์๋ ํํฐ์ STUN ์๋ฒ๋ฅผ ์ฌ์ฉํด์ ICE Candidate๋ฅผ ์์งํฉ๋๋ค.
- ๊ฐ๊ฐ STUN์ ํตํด ์์งํ ICE Candidate๋ฅผ SDP์ฒ๋ผ Signaling Server ๋ฅผ ํตํด ๊ตํํฉ๋๋ค.
- ์ด๋, ์๋ก ์ฃผ๊ณ ๋ฐ์ STUN ๊ธฐ๋ฐ ICE Candidate๋ก ์ฐ๊ฒฐ์ ์๋ํ์ง๋ง ์คํจํฉ๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ด ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌ์ถํ TURN ์๋ฒ๋ฅผ ํ์ฉํ์ฌ ICE Candidate๋ฅผ ์์งํฉ๋๋ค.
- TURN์ ํตํด ์์งํ ICE Candiate๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ค์ P2P๊ฐ ์๋ TURN์ ๊ฒฝ์ ํ๋ ์ฐ๊ฒฐ์ด ์ค๋ฆฝ๋ฉ๋๋ค.
- ๊ฐ๊ฐ TURN์ ํตํด ์์งํ ICE Candidate๋ฅผ Signaling Server ๋ฅผ ํตํด ๊ตํํฉ๋๋ค.
- ๋ฑ์ด์ ์คํฐ์ง๋ฐฅ์ TURN ์ ICE Candidate๋ฅผ ํตํด, P2P๊ฐ ์๋ relay ๊ธฐ๋ฐ ์ฐ๊ฒฐ์ ์ฑ๊ณตํฉ๋๋ค.
๐งน ํต์ฌ ์ ๋ฆฌ
- WebRTC: P2P ๊ธฐ๋ฐ ์ค์๊ฐ ํต์ ๊ธฐ์
- Signaling: WebRTC ์ฐ๊ฒฐ ์ ์ ํ์ํ SDP์ ICE Candidate ๊ตํ
- SDP: ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฏธ๋์ด๋ฅผ ์ก์์ ํ ์ ์๋์ง์ ๋ํ ์ค๋ช ์
- ICE Candidate: ์ฌ์ฉํ ์ ์๋ IP:PORT ํ๋ณด ๋ชฉ๋ก
- STUN: ์์ ์ ๊ณต์ธ IP์ PORT ์๋ณ
- TURN : P2P ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๋ ์ค๊ณ ์๋ฒ ์ญํ
๐๐ป ๋ง์น๋ฉฐ
์ง๊ธ๊น์ง WebRTC์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๋์ ์๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ ๊ณผ์ ๊น์ง ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
์ด๋ก ์ ๋ฐํ์ผ๋ก ํ ์ค์ต์ ์ํ์ ๋ค๋ฉด ์๋ ํฌ์คํ ์ ํ์ธํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ค์ต์ WebRTC & ์คํ๋ง๋ถํธ & ๋ฆฌ์กํธ ๊ธฐ๋ฐ 1๋ 1 ํตํ๊ธฐ๋ฅ ๊ตฌํ์ ๋๋ค
[WebRTC] WebRTC ํ์์ฑํ ์ค์ต (SpringBoot + React)
๐ Preview ๐ ๊ฐ์๋ฐ๊ฐ์ต๋๋ค.WebRTC ์ด๋ก ์ ์ด์ด์ ํ์ ์ฑํ ์ค์ต์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. [WebRTC] WebRTC ์ฐข์ด๋ฒ๋ฆฌ๊ธฐ - ์ด๋ก ์ ๋ฆฌ๐ ๊ฐ์๋ฐ๊ฐ์ต๋๋ค. WebRTC ๊ด๋ จ ๊ธ์ด ์ ์ ์ฒซ ํฌ์คํ ์ด ๋์๋ค์. ์ด ๋ด
phellinus-linteus.tistory.com
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ถ๊ธํ ์ ์ ๋ํ ์ง๋ฌธ ํ์ํฉ๋๋ค!
๋ถ์กฑํ, ์๋ชป๋ ์ค๋ช ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐๐ป
๐ Reference
Network address translation - Wikipedia
From Wikipedia, the free encyclopedia Technique for traversing IP address spaces without routing Network address translation between a private network and the Internet Network address translation (NAT) is a method of mapping an IP address space into anothe
en.wikipedia.org
BlogGeek.me | The leading authority on WebRTC
The leading authority on CPaaS & WebRTCKeep up and be up to speed on the world of communications, WebRTC and CPaaSWebRTC for Business People ('25 Edition)Get reportFreeGet reportFreeTop 7
bloggeek.me
WebRTC
An open framework for the web that enables Real-Time Communications (RTC) capabilities in the browser.
webrtc.org
'DrillDown > WebRTC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WebRTC] WebRTC ํ์์ฑํ ์ค์ต (SpringBoot + React) (0) | 2025.05.30 |
---|