[Network] WebRTC: ์น ์ ์ค๋์ค, ๋น๋์ค ์ค์๊ฐ ์ก์์ ํ๋กํ ์ฝ
๐ก ๋ณธ ๋ฌธ์๋ 'WebRTC: ์น ์ ์ค๋์ค, ๋น๋์ค ์ค์๊ฐ ์ก์์ ํ๋กํ ์ฝ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
์น ์์์ ์ค๋์ค, ๋น๋์ค ๋ฑ ์ค์๊ฐ์ผ๋ก ์ก์์ ํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ธ WebRTC์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. WebRTC๋?
MDN์ WebRTC ๋ฌธ์์์๋ WebRTC๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ณ ์์ต๋๋ค.
WebRTC(Web Real-Time Communication) ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ดํธ๊ฐ ์ค๊ฐ์ ์์ด ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ค๋์ค๋ ์์ ๋ฏธ๋์ด๋ฅผ ํฌ์ฐฉํ๊ณ ๋ง์๋๋ก ์คํธ๋ฆผ ํ ๋ฟ ์๋๋ผ, ์์์ ๋ฐ์ดํฐ๋ ๊ตํํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์ ๋๋ค.
ํ๋ง๋๋ก ์์ฝํ์๋ฉด ๋๋ผ์ด๋ฒ๋ ํ๋ฌ๊ทธ์ธ ์ค์น ์์ด ์น ๋ธ๋ผ์ฐ์ ๊ฐ P2P ์ฐ๊ฒฐ์ ํตํด ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด WebRTC์ ๋ฑ์ฅ๊ณผ ๋ฐ์ ์ ๊ฐ์ธํ๋ ์น์ ์์งํ๋ ์น 3.0๊ณผ๋ ๊ฐ์ ๊ธธ์ ๊ฑท๊ณ ์๋๋ฐ์.
์๋ ์์ด๋ ์น(World Wide Web)์ด 1990๋ ๋์ ์ฒ์ ๋ฑ์ฅํ์ ๋, ์น์ ๋จ์ํ ํ์ดํผ๋งํฌ๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ธ ๋ฌธ์ ๊ธฐ๋ฐ์ ๋ชจ๋ธ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ 2000๋ ๋ ์ค๋ฐ์ ์ด๋ฅด๋ฌ์๋ XHR(XMLHttpRequest) ๋ฐฉ์์ ํตํด ํ์ด์ง ์ ํ ์์ด ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ๋๋ฉด์, ์น์ ๋์ ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ ์ ์๋ ํ๋ซํผ์ด ๋์์ต๋๋ค. ์ด๋ ๋ฑ์ฅํ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ด ๋ฐ๋ก ์ง๋ฉ์ผ์ด๋ ํ์ด์ค๋ถ, ํธ์ํฐ ๊ฐ์ ๊ฒ๋ค์ด ์์ฃ .
WebRTC๋ ๊ธฐ์กด์ ์น 2.0์์ ํ์ธต ๋ ๋์๊ฐ, ์๋ฒ์ ๊ฐ์ ์ค๊ฐ์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ์ P2P๋ก ์ฐ๊ฒฐํ๋ ๊ธฐ์ ์ ๋๋ค. ์ฌ์ค ์ฐ๋ฆฌ์๊ฒ ๋ฏ์ค์ง ์์ ๊ธฐ์ ๋ค์ธ ํ์ ํตํ์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, ํ์ผ ๊ณต์ , ์คํฌ๋ฆฐ ๊ณต์ ๋ฑ์ด WebRTC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ต๋๋ค. P2P ์ฐ๊ฒฐ์ ์ค๊ฐ ์๋ฒ๋ฅผ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์๋๊ฐ ๋ณด์ฅ๋๋ฉฐ, HTTPS๊ฐ ๊ฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์ ๊ณต๊ฒฉ์ ๋ํ ๋ณด์์ด ๋ณด์ฅ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ์ผ๋ก ์ํธ์์ฉ ํ ์ ์๋ค๋ ํน์ฑ์ ๋ฐํ์ผ๋ก ๋์ฑ ๊ฐ์ธํ๋๊ณ ์ฐธ์ฌ ์ ๋์ ์ธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ ๊ธฐํ๊ฐ ๋๊ธฐ๋ ํฉ๋๋ค.
P2P ์ฐ๊ฒฐ์์๋ ์๋์ ๋ณด์, ํจ์จ์ฑ์ ๊ณ ๋ คํด์ผ๊ฒ ์ง๋ง, WebRTC๊ฐ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ์ํด์๋ ๋ค์ํ ํ๋ซํผ๊ณผ ๋ธ๋ผ์ฐ์ ์์ ์ ์ํ๋ ์ฌ์ฉ์๋ค์๊ฒ ๋์ผํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ผ์ด ์ฒซ ๋ฒ์งธ์ผ ๊ฒ์ ๋๋ค. ๋๋ฌธ์ WebRTC์์ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ ๊ฐ ํธํ์ฑ์ ๊ฐ์ฅ ํฐ ์์ ์ผ ์๋ฐ์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ํธํ์ฑ
WebRTC๋ ๊ตฌ๊ธ์ด ์ฃผ๋ํ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์น ํ์ค์ด๊ธฐ ๋๋ฌธ์, ํนํ ํฌ๋กฌ(Chrome)์์ ํธํ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ดํญ์ค(Firefox)์ ์คํ๋ผ(Opera) ๋ฑ์ด WebRTC ํ์ค์ ์ ๊ทน์ ์ผ๋ก ํ์ํ๊ณ ์์ฃ . ํํธ ์ฌํ๋ฆฌ(Safari) ์ญ์ WebKit ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ WebRTC๊ฐ ์ง์๋๊ธฐ๋ ํ์ง๋ง, ์ ํ์ ์ ์ฑ ์ด ๋ ๊ทธ๋ ๋ฏ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ ๋นํด ํธํ์ฑ๋ ๊ฐ์ฅ ๋จ์ด์ง๊ณ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํด์ฃผ๋ ์ค์ ๋ค์ด ์ ์ ํธ์ ๋๋ค. ๊ทธ๋์ ์ ๋ ์ฌํ๋ฆฌ๋ฅผ ๋ญํค IE(…) ๋ผ๊ณ ๋ถ๋ฅด๊ณค ํฉ๋๋ค.
์ฆ WebRTC๋ ์์ง๊น์ง ๋ค์ํ ํ๋ซํผ์์ ํ์คํ๊ฐ ์์ ํ ๊ตฌํ๋์ง๋ ์์ ๊ธฐ์ ์ ๋๋ค. ์ ํํ ์ด์ผ๊ธฐํ์๋ฉด WebRTC ์์ฒด๋ 1.0 ๋ฒ์ ์ ํ์ค์ด ์์ง๋ง, ์ด ๊ท๊ฒฉ์ ๋ชจ๋ ์ค์ํ๋ ํ๋ซํผ๋ค์ด ์์ง๊น์ง ๋ง์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋๊น ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ๋ณ๋ก๋ ํธํ์ฑ๊ณผ ์ํธ ์ด์ฉ์ฑ์ด ์์ดํ๋ค๋ ์ด์ผ๊ธฐ์ฃ . ๊ทธ๋์ ๊ฐ ๋ธ๋ผ์ฐ์ ์ WebRTC API์๋ moz, webkit ๊ฐ์ ๋ฒค๋ ํ๋ฆฌํฝ์ค(vendor prefix)๊ฐ ๋ถ์ด์์ต๋๋ค.
์ด๋ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ adapter.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ shim ํจํด ๋ฐ ํด๋ฆฌํ์ ์ด์ฉํด ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ ์ ์๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ฅผ ์ฌ์ ์ ์ฒ๋ฆฌํด์ค๋๋ค. ๋ํ, ๋ฒค๋ ํ๋ฆฌํฝ์ค๋ฅผ ์ ๊ฒฝ ์ธ ํ์ ์์ด ๋์ผํ API๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์, ์ฝ๋ ์ปจ๋ฒค์ ์ ์ง์ ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์์์๋ ํฐ ๋์์ ์ค๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก WebRTC๋ ๋จ์ผ ๋ธ๋ผ์ฐ์ ๋ฒค๋์์ ์ ๊ณตํ๋ API๊ฐ ์๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ๋ณ๋ก ๊ฐ๋ฐ๋๋ ์๋์ ์ง์๋๋ ๋ฒ์ ์ด ๋ค๋ฅด๋ฏ๋ก ํธํ์ฑ๊ณผ ์ํธ ์ด์ฉ์ฑ์ ํญ์ ์ฒดํฌํด์ผ ํฉ๋๋ค.
P2P ์ ์ฐจ
WebRTC๋ P2P ๋ฐฉ์์ ์ปค๋ฎค๋์ผ์ด์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค.
- ๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ P2P ์ปค๋ฎค๋์ผ์ด์ ์ ๋์
- ์๋ก์ ์ฃผ์๋ฅผ ๊ณต์
- ๋ณด์ ์ฌํญ ๋ฐ ๋ฐฉํ๋ฒฝ ์ฐํ
- ๋ฉํฐ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ตํ
์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ 2๋ฒ๊ณผ 3๋ฒ ๋จ๊ณ๊ฐ ์ผ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ์ ์ ๊ทผ ๋ฐฉ๋ฒ์ผ๋ก๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์น ์๋ฒ๊ฐ ์๋๊ธฐ ๋๋ฌธ์, ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ์ฃผ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ๋๋ฌธ์ WebRTC๊ฐ P2P ๊ธฐ๋ฐ์ด๊ธด ํ์ง๋ง ํต์ ์ค์ ์ด๊ธฐ ๋จ๊ณ์์๋ ์ค์ฌ์์ ์ญํ ์ด ํ์ํฉ๋๋ค.
๋ฐฉํ๋ฒฝ๊ณผ NAT ํธ๋๋ฒ์
์ผ๋ฐ์ ์ธ ์ปดํจํฐ์๋ ๊ณต์ธ IP๊ฐ ํ ๋น๋์ด ์์ง ์์ต๋๋ค. ๊ทธ ์์ธ์ผ๋ก๋ ๋ฐฉํ๋ฒฝ(Firewall), ์ฌ๋ฌ ๋์ ์ปดํจํฐ๊ฐ ํ๋์ ๊ณต์ธ IP๋ฅผ ๊ณต์ ํ๋ NAT, ์ ํด ์ํ์ IP๋ฅผ ์ผ์์ ์ผ๋ก ์๋๋ฐ๋ DHCP ๋๋ฌธ์ ๋๋ค. ์ด ๋๋ฌธ์ ๋จ์ํ ๊ณต์ธ IP๋ง์ ์์๋ธ๋ค๊ณ ํด์, ํน์ ํ ์ฌ์ฉ์๋ฅผ ๊ฐ๋ฆฌํฌ ์๋ ์์ต๋๋ค. ๊ณต์ธ IP๋ฟ๋ง ์๋๋ผ ํด๋น ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์ฌ์ค IP ์ฃผ์๊น์ง ์์๋ด์ผ ํน์ ํ ์ฌ์ฉ์๋ฅผ ์ง์ ํ ์ ์๊ฒ ๋์ฃ .
์ผ๋ฐ์ ์ผ๋ก๋ ๋ผ์ฐํฐ๊ฐ NAT ์ญํ ์ ํฉ๋๋ค. ์ธ๋ถ์์ ์ ๊ทผํ๋ ๊ณต์ธ IP์ ํฌํธ ๋ฒํธ๋ฅผ ํ์ธํ์ฌ ํ์ฌ ๋คํธ์ํฌ ๋ด์ ์ฌ์ค IP๋ค์ ์ ์ ํ ๋งคํ์์ผ์ฃผ์ฃ . ๊ทธ๋ฌ๋๊น ์ด๋ค ๋ธ๋ผ์ฐ์ ๋ ๊ฐ๊ฐ ์๋ก ์ง์ ํต์ ์ ํ๋ ค๋ฉด, ๊ฐ์ ํ์ฌ ์ฐ๊ฒฐ๋ ๋ผ์ฐํฐ์ ๊ณต์ธ IP ์ฃผ์์ ํฌํธ๋ฅผ ๋จผ์ ์์๋ด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ด๋ค ๋ผ์ฐํฐ๋ค์ ํน์ ์ฃผ์๋ ํฌํธ์์ ์ฐ๊ฒฐ์ ์ฐจ๋จํ๋ ๋ฐฉํ๋ฒฝ ์ค์ ์ด ๋์ด ์์ ์๋ ์์ต๋๋ค. ์ด์ฒ๋ผ ๋ผ์ฐํฐ๋ฅผ ํต๊ณผํด์ ์ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ณผ์ ์ NAT ํธ๋๋ฒ์ (NAT traversal)์ด๋ผ๊ณ ํฉ๋๋ค.
STUN, TURN
STUN ๋ฐฉ์ vs TURN ๋ฐฉ์
์ด NAT ํธ๋๋ฒ์ ์์ ์ STUN(Session Traversal Utilities for NAT) ์๋ฒ์ ์ํด ์ด๋ฃจ์ด์ง๋๋ค. STUN ๋ฐฉ์์ ๋จ๋ง์ด ์์ ์ ๊ณต์ธ IP ์ฃผ์์ ํฌํธ๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ ๋ํ ํ๋กํ ์ฝ์ ๋๋ค. ์ฆ, STUN ์๋ฒ๋ ์ธํฐ๋ท์ ๋ณต์กํ ์ฃผ์๋ค ์์์ ์ ์ผํ๊ฒ ์๊ธฐ ์์ ์ ์๋ณํ ์ ์๋ ์ ๋ณด๋ฅผ ๋ฐํํด์ค๋๋ค. ์ฆ, WebRTC ์ฐ๊ฒฐ์ ์์ํ๊ธฐ ์ ์ STUN ์๋ฒ๋ฅผ ํฅํด ์์ฒญ์ ๋ณด๋ด๋ฉด, STUN ์๋ฒ๋ NAT ๋ค์ ์๋ ํผ์ด(Peer)๋ค์ด ์๋ก ์ฐ๊ฒฐํ ์ ์๋๋ก ๊ณต์ธ IP์ ํฌํธ๋ฅผ ์ฐพ์์ค๋๋ค.
์ฝ๊ฒ ๋งํด์ ๋ค๋ฅธ ์ฌ๋์ด ์ฐ๋ฆฌ ์ง์ ์ฝ๊ฒ ์ฐพ์์ฌ ์ ์๋๋ก ์ฌ์ ์ ์ฐ๋ฆฌ ์ง ์ฃผ์๋ฅผ ์กฐํํด์ ์์๋ด๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ง์ฝ ๋ ๊ฐ์ ์ฅ์น๊ฐ ์ฑ๊ณต์ ์ผ๋ก STUN ์๋ฒ์์ ์๊ธฐ ์์ ์ ์ฃผ์๋ฅผ ์์๋์ ๊ฒฝ์ฐ์๋ P2P ์ฐ๊ฒฐ์ ์๋ํ ๋ ๊ฐ์ ๊ณ ์ ํ ์ฃผ์๊ฐ ์๊ธด ์ ์ ๋๋ค.
ํ์ง๋ง STUN ์๋ฒ๋ฅผ ์ด์ฉํ๋๋ผ๋ ํญ์ ์์ ์ ์ ๋ณด๋ฅผ ์์๋ผ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ค ๋ผ์ฐํฐ๋ค์ ๋ฐฉํ๋ฒฝ ์ ์ฑ ์ ๋ฌ๋ฆฌ ํ ์๋ ์๊ณ , ์ด์ ์ ์ฐ๊ฒฐ๋ ์ ์ด ์๋ ๋คํธ์ํฌ๋ง ์ฐ๊ฒฐํ ์ ์๊ฒ ์ ํ์ ๊ฑธ๊ธฐ๋ ํฉ๋๋ค(Symmetric NAT). ์ด ๋๋ฌธ์ STUN ์๋ฒ๋ฅผ ํตํด ์๊ธฐ ์์ ์ ์ฃผ์๋ฅผ ์ฐพ์๋ด์ง ๋ชปํ์ ๊ฒฝ์ฐ, TURN(Traversal Using Relay NAT) ์๋ฒ๋ฅผ ๋์์ผ๋ก ์ด์ฉํ๊ฒ ๋ฉ๋๋ค.
TURN ๋ฐฉ์์ ๋คํธ์ํฌ ๋ฏธ๋์ด๋ฅผ ์ค๊ฐํ๋ ์๋ฒ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค. TURN ๋ฐฉ์์ ์ค๊ฐ์ ์๋ฒ๋ฅผ ํ ๋ฒ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์, ์๋ฐํ ์ด์ผ๊ธฐํ์๋ฉด P2P ํต์ ์ด ์๋๊ฒ ๋๋ฉฐ ๊ทธ ๊ตฌ์กฐ์ ์ง์ฐ์ด ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ๋ณด์ ์ ์ฑ ์ด ์๊ฒฉํ ๊ฐ์ธ NAT ๋ด๋ถ์ ์์นํ ๋ธ๋ผ์ฐ์ ์ P2P ํต์ ์ ํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์, TURN ๋ฐฉ์์ ์ตํ์ ์๋จ์ผ๋ก ์ ํ๋์ด์ผ ํฉ๋๋ค.
ICE์ Candidate
์ฌํ๊ป ์ด์ผ๊ธฐํ STUN, TURN ์๋ฒ๋ฅผ ์ด์ฉํด์ ํ๋ํ๋ IP ์ฃผ์์ ํ๋กํ ์ฝ, ํฌํธ์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๋คํธ์ํฌ ์ฃผ์๋ค์ ํ๋ณด(Candidate) ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์ ํ๋ณด ์ฐพ๊ธฐ(Finding Candidate)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ด๋ ๊ฒ ํ๋ณด๋ค์ ์์งํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก 3๊ฐ์ ์ฃผ์๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
- ์์ ์ ์ฌ์ค IP์ ํฌํธ ๋๋ฒ
- ์์ ์ ๊ณต์ธ IP์ ํฌํธ ๋๋ฒ (STUN, TURN ์๋ฒ๋ก๋ถํฐ ํ๋ ๊ฐ๋ฅ)
- TURN ์๋ฒ์ IP์ ํฌํธ ๋๋ฒ (TURN ์๋ฒ๋ก๋ถํฐ ํ๋ ๊ฐ๋ฅ)
ํํธ, ์ด ๋ชจ๋ ๊ณผ์ ์ ICE(Interactive Connectivity Establishment) ๋ผ๋ ํ๋ ์์ํฌ ์์์ ์ด๋ฃจ์ด์ง๋๋ค. ICE๋ ๋ ๊ฐ์ ๋จ๋ง์ด P2P ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋๋ก ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
์ง๊ธ๊น์ง์ ๋ด์ฉ์ ์์ฝํ์๋ฉด, ICE ํ๋ ์์ํฌ๊ฐ STUN, ๋๋ TURN ์๋ฒ๋ฅผ ์ด์ฉํด ์๋๋ฐฉ๊ณผ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ํ๋ณด๋ค์ ๊ฐ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋๊น ๋ ๋ธ๋ผ์ฐ์ ๊ฐ P2P ํต์ ์ ์ํด ํต์ ํ ์ ์๋ ์ฃผ์๋งํผ์ ํ์คํ๊ฒ ์์๋ธ ์ ์ ๋๋ค. ๋ฐ๋ผ์ ๋ง์ง๋ง์ผ๋ก ๋จ์ ๊ฒ์ ์ด์ ๋ฏธ๋์ด์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๊ฒ์ ๋๋ค.
SDP
์ง๋ ฌํ๋ SDP ๋ฐ์ดํฐ. JS์์ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ณด๋ ค๋ฉด ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
SDP(Session Description Protocol) ๋ WebRTC์์ ์คํธ๋ฆฌ๋ฐ ๋ฏธ๋์ด์ ํด์๋๋ ํ์, ์ฝ๋ฑ ๋ฑ์ ๋ฉํฐ๋ฏธ๋์ด ์ปจํ ์ธ ์ ์ด๊ธฐ ์ธ์๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์ฑํํ ํ๋กํ ์ฝ์ ๋๋ค. ํ์ ํตํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์์๋ก ๋ค์ด๋ณด์๋ฉด ์น์บ ๋น๋์ค์ ํด์๋๋ฅผ ๋ณด๋ผ ์ ์๊ณ , ์ค๋์ค ์ ์ก ๋๋ ์์ ์ฌ๋ถ๋ฅผ ๋ณด๋ผ ์๋ ์๊ฒ ์ฃ .
์ด์ฒ๋ผ ๋ฏธ๋์ด์ ๊ด๋ จ๋ ์ด๊ธฐ ์ธํ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ๋ SDP๋ ๋ฐํ ๊ตฌ๋ ๋ชจ๋ธ(Pub/Sub)๊ณผ ์ ์ฌํ ์ ์ ์๋ต ๋ชจ๋ธ(Offer/Answer) ์ ๊ฐ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋๊น ์ด๋ค ํผ์ด๊ฐ ์ด๋ฌํ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๊ตํํ ๊ฒ์ด๋ผ๊ณ ์ ์ ์ ํ๋ฉด, ์๋๋ฐฉ์ผ๋ก๋ถํฐ ์๋ต ์ด ์ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค๋ ์๋ฏธ์ ๋๋ค.
๊ทธ๋ ๊ฒ ์๋ต ์ ๋ฐ๊ฒ ๋๋ฉด, ๊ฐ์์ ํผ์ด๊ฐ ์์งํ ICE ํ๋ณด ์ค์์ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๊ณ ํ์ํ๋ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ํฉ๋๋ค. ์์งํ ICE ํ๋ณด๋ค๋ก ํจํท์ ๋ณด๋ด ๊ฐ์ฅ ์ง์ฐ ์๊ฐ์ด ์ ๊ณ ์์ ์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๊ฒ์ด์ฃ . ์ด๋ ๊ฒ ์ต์ ์ ICE ํ๋ณด๊ฐ ์ ํ๋๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ๋ชจ๋ ๋ฉํ ๋ฐ์ดํฐ์ IP ์ฃผ์ ๋ฐ ํฌํธ, ๋ฏธ๋์ด ์ ๋ณด๊ฐ ํผ์ด ๊ฐ ํฉ์๊ฐ ์๋ฃ๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ํตํด ํผ์ด ๊ฐ์ P2P ์ฐ๊ฒฐ์ด ์์ ํ ์ค์ ๋๊ณ ํ์ฑํ๋ฉ๋๋ค. ๊ทธ ํ ๊ฐ ํผ์ด์ ์ํด ๋ก์ปฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋ํฌ์ธํธ๊ฐ ์์ฑ๋๋ฉฐ, ์ด ๋ฐ์ดํฐ๋ ์๋ฐฉํฅ ํต์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ต์ข ์ ์ผ๋ก ์๋ฐฉํฅ์ผ๋ก ์ ์ก๋ฉ๋๋ค.
์ด ๊ณผ์ ์์ NAT์ ๋ณด์ ์ด์ ๋ฑ์ผ๋ก ์ต์ ์ ICE ํ๋ณด๋ฅผ ์ฐพ์ง ๋ชปํ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ด๋์๋ ํด๋ฐฑ์ผ๋ก ์ธํ ํ TURN ์๋ฒ๋ฅผ P2P ๋์ฉ์ผ๋ก ์ค์ ํฉ๋๋ค.
ํต์ ์ TURN ํด๋ฐฑ์ ์ฌ์ฉํ ๋ ๊ฐ ํผ์ด๋ ๊ตณ์ด ๊ท์ฐฎ๊ฒ P2P๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์ ํ์๊ฐ ์์ต๋๋ค. ๋์ , ํต์ ์ธ์ ์ค์ ์ค์๊ฐ ๋ฉํฐ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ค๊ฐํ๋ ๊ณต์ฉ TURN ์๋ฒ๋ฅผ ์๊ณ ์์ด์ผ ํฉ๋๋ค.
Trickle ICE
Trickle์ ๋ฌผ์ด ๊ฐ๋๊ฒ ๋๋ ๋จ์ด์ง๊ณ ์๋ค๋ ์๋ฏธ์ ๋๋ค
ํํธ, ICE ํ๋ ์์ํฌ๋ฅผ ์ค์ ํ๋ค๋ณด๋ฉด Trickle ICE ๋ผ๋ ์ต์ ์ ์ฌ์ฌ์น์๊ฒ ๋ง๋๋ณผ ์ ์์ต๋๋ค. ์์ ์ฌ์ง์ ์ฐธ๊ณ ํ์ ๋, ์ด ๋จ์ด๊ฐ ํน์ ๋ฌด์จ ์ต์ ์ธ์ง ์ง์์ด ๊ฐ์๋์?
์ผ๋ฐ์ ์ผ๋ก ๊ฐ ํผ์ด๋ ICE ํ๋ณด๋ค์ ์์งํด์ ๊ทธ ๋ชฉ๋ก์ ์์ฑํ ํ ํ๊บผ๋ฒ์ ๊ตํํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์ SDP์ ์ ์ ์๋ต ๋ชจ๋ธ๊ณผ ๋ง๋ฌผ๋ฆฌ๋ฉด์ ๋จ์ ์ผ๋ก ์์ฉํฉ๋๋ค.
ํ๋ณด๋ฅผ ๋ชจ์ผ๋ ๋ฐ์๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ฐ๋ผ ์ง์ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ํ ํ ์ชฝ ํผ์ด์ ICE ํ๋ณด ์์ง ์์ ์ด ์๋ฃ๋์ด์ผ๋ง ๋ค๋ฅธ ํผ์ด๊ฐ ICE ํ๋ณด๋ฅผ ๋ชจ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด์ฃ .
์ด๋ฌํ ๋นํจ์จ์ ์ธ ํ๋ณด ๊ตํ ์์ ์ ๋ณ๋ ฌ ํ๋ก์ธ์ค๋ก ์ํํ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด ๋ฐ๋ก Trickle ICE ์ ๋๋ค. ๋ ๊ฐ์ ํผ์ด๊ฐ ICE ํ๋ณด๋ฅผ ์์งํ๊ณ ๊ตํํ๋ ๊ณผ์ ์, ๋๊ธฐ์ ํ๋ก์ธ์ค ์์ ๋น๋๊ธฐ์ ํ๋ก์ธ์ค ๋ก ๋ง๋๋ ๊ธฐ์ ์ด๋ผ๊ณ ์ด์ผ๊ธฐํ ์ ์๊ฒ ๋ค์.
์ฆ, Trickle ์ต์ ์ด ํ์ฑํ๋ ICE ํ๋ ์์ํฌ๋ ๊ฐ ํผ์ด์์ ICE ํ๋ณด๋ฅผ ์ฐพ์๋ด๋ ๊ทธ ์ฆ์ ๊ตํ์ ์์ํฉ๋๋ค. ๊ทธ๋์ ์ํธ ๊ฐ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ICE๋ฅผ ๋ณด๋ค ๋นจ๋ฆฌ ์ฐพ์๋ผ ์ ์์ฃ . ์ด๋ฌํ ์ต์ ๋๋ถ์ ICE ํ๋ ์์ํฌ๋ ํผ์ด ๊ฐ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ฒดํฌํจ๊ณผ ๋์์ ์ฐ๊ฒฐ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์ ํํ ์ ์์ต๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก Trickle ์ต์ ์ ๊ฐ๋ฅํ๋ค๋ฉด ํ์ฑํํ๋ ๊ฒ ์ข๊ฒ ์ฃ ?
ํํธ WebRTC ํ๊ธ ๋ฌธ์์์๋ ์ด๋ฅผ ์ง์ญํด์ ๋ฌผ๋ฐฉ์ธ ICE๋ผ๊ณ ๋ถ๋ฅด๋ ๋ชจ์์ด๋ค์.
์๊ทธ๋๋ง
์์์ ์ด์ผ๊ธฐํ ๋ชจ๋ ๊ณผ์ ์ ์ผ์ปฌ์ด ์๊ทธ๋๋ง(Signaling)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ฆ RTCPeerConnection ํต์ ์ ์ฌ์ฉํ ํ๋กํ ์ฝ, ์ฑ๋, ๋ฏธ๋์ด ์ฝ๋ฑ ๋ฐ ํ์, ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ๋ฒ, ๋ผ์ฐํ ์ ๋ณด์ NAT ํต๊ณผ ๋ฐฉ๋ฒ์ ํฌํจํ ํต์ ๊ท๊ฒฉ์ ๊ตํํ๊ธฐ ์ํด ๋ ์ฅ์น์ ์ ์ด ์ ๋ณด๋ฅผ ๊ตํํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
์์ ๊ณผ์ ์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์๊ทธ๋๋ง์ WebRTC ์์ฒด์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ด ์๋๋๋ค. WebRTC ์ฐ๊ฒฐ ์ ๋ฏธ๋ฆฌ ์ค๋นํด์ผ ํ๋ ๊ณผ์ ์ ๋๋ค. WebRTC ์์ฒด์ ์คํ๋ ์๋๊ธฐ ๋๋ฌธ์, ํ ๊ฐ์ง๋ก ๋ฑ ์ ํด์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ ํด์ง ๋ฐฉ๋ฒ์ด ์๋ ์ด์ ๋ ์ ์ ์๋ ๋ ์ฅ์น๊ฐ ์ธ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์๋์ง์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์์ธกํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ๊ฐ๋ฐ์๋ ์์ ์๊ฒ ๋ง๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ ํ์ ์ผ๋ก ์ ์ฉํ ์ ์์ฃ .
์ด ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ๊ฑฐ๋, ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ์ ๊ณตํด์ฃผ๋ ์ธ๋ถ ์๋ฃจ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ง์ฝ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ๋ค๋ฉด ์น ์์ผ(Web Socket)์ด๋ ์๋ฒ ์ ์ก ์ด๋ฒคํธ(Server-sent Event) ๋ฐฉ๋ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค. ์๊ทธ๋๋ง ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ API๋ฅผ ๋ง๋ ํ ๋ธ๋ผ์ฐ์ ๋จ์์ ์ฃผ๊ธฐ์ ์ผ๋ก XHR์ ์์ฒญํ๋ ํด๋ง(polling) ๊ธฐ๋ฒ์ ์ธ ์๋ ์์ฃ . ์ด ์ธ ์๊ทธ๋๋ง ์๋ฒ์ ๊ตฌํ ๋ฐฉ๋ฒ๋ค๋ก๋ ์ด๊ณณ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
ํํธ WebRTC๋ฅผ ์ฒ์ ์ ํ๋ ๊ฐ๋ฐ์์๊ฒ๋ ์คํ๋ ค ํ์ค์ด ์๋ค๋ ๊ฒ์ด ํผ๋์ ์ผ์ผํค๊ณค ํ์ฃ . ์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ๋ ๊ฒ๋ ์ผ์ด ๋๊ตฌ์. ๋๋ฌธ์ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ์ ๊ณตํด์ฃผ๋ ์๋ฃจ์ ์ ์ฐ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค. ์๋ง์กด์ Kinesis Video Stream ์ด ๋ํ์ ์ธ ์์์ด๊ณ , ๊ตฌ๊ธ์ AppRTC์์๋ Google App Engine์ผ๋ก ๊ตฌํ๋ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
ํ๊ณ
์ ๊ฐ ์ ์ผ ์ข์ํ๋ TCP vs UDP ๋น๊ต ์งค
๊ทธ๋ ๋ค๊ณ ํด์ WebRTC์ ํ์ค์ด ๋ฐ์ ๊ฒ๋ง์ ์๋๋๋ค.
์ฒซ ๋ฒ์งธ๋ ์ญ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํธํ์ฑ ์ ๋๋ค. ์์ง adapter.js ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ํธํ์ฑ์ ์ฅ๋ดํ ์ ์์ต๋๋ค. ํนํ ์ฌํ๋ฆฌ์ IE, ์ฃ์ง๊ฐ ๊ทธ๋ฌํ์ฃ .
๋ค์์ผ๋ก๋ ์๊ทธ๋๋ง ์๋ฒ์ ๋ํ ๋ช ์์ ์ธ ํ์ค์ด ์์ต๋๋ค. ๊ฐ๋ฐ์์ ๋ฅ๋ ฅ๊ณผ ์์จ์ฑ์ ๋งก๊ฒจ๋ ๋ถ๋ถ์ด ์คํ๋ ค ์ฒ์ WebRTC๋ฅผ ์ ๋ฌธํ๋ ์ฌ๋๋ค์๊ฒ ํผ๋์ ์ผ์ผํค๊ธฐ๋ ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก๋ WebRTC๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์๊ฐ์ฑ์ด ๋งค์ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ UDP ์์์ ๋์ํฉ๋๋ค. ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์กํ ์๋ ์์ง๋ง, ์ด ๊ณผ์ ์์ ๋ฐ์ํ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํ ์๋ ์์ฃ . ๋น๋์ค๋ผ๋๊ฐ ์ค๋์ค์ ์์ด์ ๋ช ํ๋ ์ ์ ๋๊ฐ ๋๊ธฐ๋ ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ์ค์ํ ํ์ผ๋ค์ ์ ์กํ ๋์๋ ์ด ๋ฐ์ดํฐ ์์ค์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์์ต๋๋ค. ์์ ๋ช ๋ฐ์ดํธ์ ๋ฐ์ดํฐ ์์ค ๋๋ฌธ์ ์ ์ฒด ํ์ผ์ด ๋์ํ์ง ์๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์๋ ์์ฃ . (TCP ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์์ง๋ง UDP๋ฅผ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ๋ฏธ๋์ด ์คํธ๋ฆฌ๋ฐ์ ์ ํฉํ์ง ์์ ๋ฐฉ์์ผ๋ก ์ ํ๋๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋๊ณ , ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ TCP ๋ฐฉ์์ ์ง์ํ๋ ๊ฒ๋ ์๋๋๋ค.)
๊ฒฐ๋ก
๋ธ๋ผ์ฐ์ ์์ P2P ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ธ WebRTC๋ ์์ผ๋ก์ ๋ฐ์ ์ด ๋ ๊ธฐ๋๋๋ ๊ธฐ์ ์ด๋ฉฐ, ์ด๋ ์๊ทธ๋๋ง์ด๋ผ๊ณ ์ผ์ปซ์ด์ง๋ NAT ์ฐํ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํฅํ ํค์๋
WebSocket vs WebRTC, Live Video Streaming Protocols, RTMP vs WebRTC vs HLS, https://getstream.io/blog/