โจ WebRTC๋ ๋ญ๊น?
์ค์๊ฐ ํต์ ์ ์์ด ์์ฃผ ์ฌ๋ฐ๋ ๊ธฐ์ ์ด ์์ต๋๋ค.
๋ฐ๋ก webRTC(Web Real-Time Communication)์ธ๋ฐ์.
2011๋
, Google์ ๊ฐ๋ฐ์๋ค์ ์ํด์ ํ์ํ ๊ธฐ์ ์
๋๋ค.
WebRTC๋ฅผ ์ฌ์ฉํ๋ ์ ๋ช
ํ ์๋น์ค๋ค ์ค Google Meet, Discord, Zoom ๋ฑ ์กด์ฌํฉ๋๋ค.
์ฝ๊ฒ ๋งํด์ "๋ค์ํ ํ๋ซํผ์์ ๊ฐ๋ฅํ ์ค์๊ฐ ์ปค๋ฎค๋์ผ์ด์ ๊ธฐ์ "์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
ํ์ ์ฑํ , ์์ฑ ํตํ, ํ์ผ ๊ณต์ ๋ฑ๋ฑ ์ด ๋ชจ๋ ๊ฑธ ๋ณ๋์ ํ๋ก๊ทธ๋จ ์์ด ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฌผ๋ก ์ด๊ณ , ๋ชจ๋ฐ์ผ ์ฑ, ๋ฐ์คํฌํ ์ฑ์์๋ ์ฌ์ฉํ ์ ์๋ ์คํ์์ค ํ๋ก์ ํธ์ด๋ฉฐ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค.
๋์ฑ ์ ๊ธฐํ ์ ์ ์๋ฒ ์์ด P2P(Peer To Peer)๋ก ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค๋ ์ ์ ๋๋ค.
(P2P๋ก ์ฐ๊ฒฐ๋๊ธฐ ์ํ ๊ณผ์ ์์ ์ค๊ณ ์๋ฒ๋ ํ์ํฉ๋๋ค. ์ด ๋ด์ฉ์ ์๋ Signaling์ ๊ดํ ์ค๋ช ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.)
WebRTC๋ฅผ ๋ท๋ฐ์นจํ๋ ๊ธฐ์ ์ ๊ฐ๋ฐฉํ ์น ํ์ค(๊ธฐ์ ํ์ค์ด ๋ฌธ์๊ฐ ๊ณต๊ฐ๋์ด ์์ผ๋ฉฐ ์ฌ์ฉ์ด ์์ ๋ก์ด ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฉ์ด)์ผ๋ก ๊ตฌํ๋๋ฉฐ ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ API๋ก ์ ๊ณต๋ฉ๋๋ค.
Android ๋ฐ iOS ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ๋ค์ดํฐ๋ธ ํด๋ผ์ด์ธํธ์ ๊ฒฝ์ฐ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ด์.
๐ก ์ฃผ์ ๊ฐ๋ ๋ฐ ์ฉ์ด
webRTC์๋ ์ฃผ์ ์ฉ์ด ๋ฐ ๊ฐ๋ ๋ค์ด ์กด์ฌํ๋๋ฐ์.
๋ฐ๋ก
- ์๊ทธ๋๋ง(Signaling)
- SDP(Session Description Protocol)
- ICE(Interactive Connectivity Establishment)
- STUN/TURN
๋ฑ์ ์ฉ์ด๊ฐ ์์ต๋๋ค.
๊ทธ๋ผ ์กฐ๊ธ ๋ ์ฝ๊ณ ์์ธํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
์๊ทธ๋๋ง(Signaling)
์ด์ ์ ์ ๊ฐ P2P๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ ์๋ฒ๊ฐ ํ์ํ๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
์ด ์ค๊ณ์๋ฒ๋ฅผ ํตํด์ ์๋ก๋ฅผ ์ฐพ๊ณ ์ฐ๊ฒฐ์ ์์ํ๋ ๊ณผ์ ์ ๋ฐ๋ก ์๊ทธ๋๋ง(Signaling)์ด๋ผ๊ณ ํฉ๋๋ค.
๋น์ ํ์๋ฉด ์๊ทธ๋๋ง์ ๊ฐ๋ ์ ๋ง์น ์๊ฐํ ์ฃผ์ ์์ฒ๋ผ ์์ชฝ์์ ์๋ก์ ์ ๋ณด๋ฅผ ์ ๋ฌํด ์ฃผ๋ ์ญํ ์ ๋๋ค.
์ด ์๊ทธ๋๋ง์ ์๋ฒ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๊ฒ ๋๊ณ , ์ด๋ป๊ฒ ๊ตฌํํ ์ง๋ ์์ ์ ๋๋ค.
WebSocket, HTTP ๋ฑ ์ ์ ํ ํ๋กํ ์ฝ์ ๊ฐ๋ฐ์๊ฐ ์ ํํ๋ฉด ๋ฉ๋๋ค.
SDP(Session Description Protocol)
SDP๋ "๋ฌด์์ผ๋ก ์ํตํ ์ง, ์ด๋ป๊ฒ ์ํตํ ์ง"์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ์์์ ๋๋ค.
์ฆ, "๋๋ ์ด๋ฐ ์ค๋์ค, ๋น๋์ค๋ฅผ ์ง์ํด"๋ผ๊ณ ์๋ ค์ฃผ๋ ์๊ธฐ์๊ฐ์์ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
๋ ์์ธํ๊ฒ๋ ์ธ์ ์ ๋ณด, ๋คํธ์ํฌ ์ ๋ณด, ๋ฏธ๋์ด์ ์ข ๋ฅ, ์ฝ๋ฑ, ์คํธ๋ฆผ์ ์์ฑ ๋ฑ ๋ง์ ๋ด์ฉ์ด ๋ด๊ฒจ์์ต๋๋ค.
๊ทธ๋์ ์ฐ๊ฒฐํ๋ ์์ํ๋ ์ชฝ์์๋ Offer SDP๋ฅผ ์์ฑํ๊ณ , ๋ฐ๋ ์ชฝ์์๋ Answer SDP๋ก ์๋ตํฉ๋๋ค.
์ด ์ ๋ณด๋ค์ ํตํด์ ์์ชฝ ํผ์ด๊ฐ ์ง์ํ๋ ์ฝ๋ฑ, ํด์๋ ๋ฑ์ ํ์ํ์ฌ ์ต์ ์ ์ค์ ์ ๊ฒฐ์ ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
SDP์ ๊ตฌ์กฐ๋ฅผ ํ๋ฒ ๋ณผ๊น์?
v=0
o=- 1234567890 1234567890 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:someufrag
a=ice-pwd:someicepwd
a=fingerprint:sha-256 somefingerprint
...
์ด SDP๋ฅผ ๊ฐ์ง๊ณ ํผ์ด๋ผ๋ฆฌ ์์์ ํ์์ ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ์์ธํ ํ๋ํ๋ ๋ชจ๋ ์ธ์ธ ํ์๋ ์์ด์.
๊ฐ ์ค์ ์๋ฏธ๋ ์๋์ ๊ฐ์์.
์จ์ ํ ์ธ์ ์ค๋ช ์ ์ํ ํ์์ด๋ผ๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.
ICE(Interactive Connectivity Establishment)
์์์ ์๊ธฐ์๊ฐ(SDP)๋ฅผ ํ์ผ๋ ์ด์ ์ด๋ป๊ฒ ์ฐ๋ฝ์ ํ ์ง ์ ํด์ผ๊ฒ ์ฃ ?
ICE๋ "๋ํํ ์ฐ๋ฝํ๋ ค๋ฉด ์ด ์ฃผ์๋ก ์ฐ๋ฝํด!"๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ณผ์ ์ ๋๋ค.
์ฆ, ๋ ํผ์ด ๊ฐ์ ์ต์ ์ ํต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ ๋๋ค.
NAT(Network Address Traslation)์ ๋ฐฉํ๋ฒฝ ๋ฑ์ ๋คํธ์ํฌ ์ฅ๋ฒฝ์ ๊ทน๋ณตํ๊ณ ์ง์ ์ ์ธ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ์ฐ๊ฒฐ ํ๋ณด ์์ง: ๊ฐ๋ฅํ ๋ชจ๋ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ(ํ๋ณด)์ ์ฐพ์๋ ๋๋ค.
- ์ฐ๊ฒฐ์ฑ ๊ฒ์ฌ: ๊ฐ ํ๋ณด์ ๋ํด ์ค์ ์ฐ๊ฒฐ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ ์คํธํฉ๋๋ค.
- ์ฐ์ ์์ ๊ฒฐ์ : ๊ฐ์ฅ ํจ์จ์ ์ธ ์ฐ๊ฒฐ ๊ฒฝ๋ก(์ง์ฐ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ์ฐ๊ฒฐ์ ์ ํธ)๋ฅผ ์ ํํฉ๋๋ค.
- NAT ๋ฐ ๋ฐฉํ๋ฒฝ ํต๊ณผ: ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ์์์ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ICE ํ๋ ์์ํฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ ํผ์ด๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ง์ฐ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก(์ต์ ์ ํต์ ๊ฒฝ๋ก)๋ฅผ ์ฐพ๊ณ , ์๋ ์ต์ ์ ์์๋๋ก ์๋ํฉ๋๋ค.
- ์ง์ UDP ์ฐ๊ฒฐ, ์ฌ์ค IP (์ด ๊ฒฝ์ฐ์๋ง STUN ์๋ฒ๋ ํผ์ด์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ฃผ์๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค)
- HTTP ํฌํธ๋ฅผ ํตํ ์ง์ TCP ์ฐ๊ฒฐ
- HTTPS ํฌํธ๋ฅผ ํตํ ์ง์ TCP ์ฐ๊ฒฐ
- relay/TURN ์๋ฒ๋ฅผ ํตํ ๊ฐ์ ์ฐ๊ฒฐ (์ง์ ์ฐ๊ฒฐ์ด ์คํจํ ๊ฒฝ์ฐ. ์๋ฅผ ๋ค์ด, ํ ํผ์ด๊ฐ NAT ํต๊ณผ๋ฅผ ์ฐจ๋จํ๋ ๋ฐฉํ๋ฒฝ ๋ค์ ์๋ ๊ฒฝ์ฐ)
STUN / TURN
์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ๋ณด๋ค ์์ ํ ๋ค๋ฅธ ํ๊ฒฝ์์ ๋ค๋ฅธ ํผ์ด์ ์ฐ๊ฒฐ์ ํ๋ ์ํฉ์ด ๋ง์ต๋๋ค.
๊ฐ์ ๋คํธ์ํฌ ๋ง์ ์์ผ๋ฉด ์ฌ์ค IP๋ก P2P ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋, ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ํ๊ฒฝ์์ ๊ฐ์์ ์ฌ์ค IP๋ก๋ ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ์ฃ .
์ด๋ฐ ์ํฉ์์ STUN ์๋ฒ์ TURN ์๋ฒ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ๋คํธ์ํฌ ์ฃผ์ ๋ณํ(NAT) ๋ค์ ์๋ ์ฅ์น๋ค์ด ์ธํฐ๋ท์ ํตํด ์๋ก ํต์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ญํ ์ ๋๋ค.
STUN
STUN(Session Traversal Utilities for NAT)์ ์ฐ๋ฆฌ์ ์ปดํจํฐ๊ฐ "๋ ์ง๊ธ ์ด๋ ์๋ ๊ฑฐ์ผ?"๋ผ๊ณ ๋ฌผ์ด๋ณผ ๋ ๋๋ตํด ์ฃผ๋ ์น์ ํ ์๋ฒ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
NATํ๊ฒฝ์์ Private IP๋ฅผ ๋ณ๋๋ก ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ P2P ํต์ ์ด ๋ถ๊ฐ๋ฅํด์.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ์์ ์ Public IP๋ฅผ ํ์ธํ๊ธฐ ์ํด STUN ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ฒ๋ก๋ถํฐ ์์ ์ Public IP๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
STUN ์๋ฒ์ ํน์ง์ผ๋ก๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ์ฃผ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
TURN
TURN(Traversal Using Relays around NAT)์ ๋ง์น "๋ํฌ ๋์ด ๋ง๋๊ธฐ ์ด๋ ค์ฐ๋ฉด, ๋ด๊ฐ ์ค๊ฐ์์ ๋ฉ์์ง๋ฅผ ์ ํด์ค๊ฒ!"๋ผ๊ณ ํ๋ ์น์ ํ ์ค๊ณ์์ ๋๋ค.
TURN ์๋ฒ๋ STUN ์๋ฒ๋ก ํด๊ฒฐํ ์ ์๋ ์ํฉ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ผ๋ถ ๊ณ ์ง์ด ์ผ(?) NAT ๊ตฌ์ฑ์์๋ ์ธ๋ถ ์๋ฒ์์ ์ง์ ์ ์ธ P2P ์ฐ๊ฒฐ์ ํ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋์ TURN ์๋ฒ์ ํน์ง์ผ๋ก๋ ์๋ฒฝํ ์ค๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ์ง๋ง, ์๋์ ์ผ๋ก ๋๋ฆฌ๊ณ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋์ WebRTC๋ ๋ณดํต ์ด๋ ๊ฒ ํ๋ํด์.
- "๋จผ์ STUN์ผ๋ก ํด๋ณผ๊น? ์ค ์๋๋ค ์ด๊ฑธ๋ก ๊ฐ์!"
- "STUN์ด ์ ๋๋ค..? ๊ทธ๋ผ TURNํํ ๋ถํํ์"
์ฆ, STUN ์๋ฒ๋ก ๋จผ์ ์๋ํ๊ณ ์๋๋ฉด TURN ์๋ฒ๋ก ์๋ํ๊ฒ ๋ฉ๋๋ค.
webRTC์์๋ ์๋ ์์์ฒ๋ผ ์ค์ ํ ์ ์์ด์.
const peerConnection = new RTCPeerConnection({
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' }, // STUN ์๋ฒ
{
urls: 'turn:your-turn-server.com', // TURN ์๋ฒ
username: '์ ์ ๋ค์',
credential: '๋น๋ฐ๋ฒํธ'
}
]
});
๐ ๋์ ์๋ฆฌ
์ ์ฒด์ ์ธ ํฐ ๊ทธ๋ฆผ์ ํ๋ฒ ์ดํด๋ณผ๊น์?
์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ํ๊ฒฝ์ด๋ผ ๊ฐ์ ํ ์ํฉ์์ STUN ์๋ฒ๋ฅผ ํตํด ์ฐ๊ฒฐ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ํ๋ํ๊ณ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด์ SDP๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๋ฌผ๋ก ์ด SDP์ ICE ํ๋ณด์ ์ฐ๊ฒฐ ๊ฐ๋ฅํ IP์ฃผ์๋ ํฌํจ๋์ด ์์ต๋๋ค.
SDP๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ ์๋ก์ SDP๋ฅผ webRTC์์ ์ฐ๊ฒฐ์ด ์ค์ ๋ ํ ๋๋ฉด ๋น๋ก์ P2P ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
๋ง๋ถ์ด์๋ฉด, ์ด ์๊ทธ๋๋ง ์๋ฒ๋ ์ฐ๊ฒฐ ๊ณผ์ ์์๋ง ํ์ํ๊ณ ๋ ์ด์ P2P ์ฐ๊ฒฐ์ ์ํ ์๊ทธ๋๋ง ์๋ฒ๋ ํ์ํ์ง ์์ต๋๋ค.
์ดํ ํต์ ์ webRTC๋ฅผ ํตํด P2P๋ก ํต์ ์ ํ๊ฒ ๋์ฃ .
์ค์ ์ฝ๋๋ฅผ ํตํ webRTC P2P ์ฐ๊ฒฐ์ ๋ค์ ํฌ์คํ ์์ ์งํํ ์์ ์ ๋๋ค.
โ๏ธ P2P ์ฐ๊ฒฐ์ ํ๊ณ
webRTC๋ฅผ ํตํ ๊ฐ๋ฐ์ ์ํด์๋ ๊ผญ ์์๋์ด์ผ ํ๋ ๋ถ๋ถ์ด ์์ต๋๋ค.
P2P ์ฐ๊ฒฐ์ webRTC์ ๊ธฐ๋ณธ์ด์ง๋ง, ์ฐธ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ๊ณผ๋ถํ๊ฐ ์ค๊ธฐ ์์ํฉ๋๋ค.
๋ง์น ํ ์ฌ๋์ด ์ฌ๋ฌ ๋ช ์๊ฒ ๋์์ ๋งํ๋ ค๋ค๊ฐ ๋ชฉ์ด ์ํ์ง๋ ๊ฒ์ฒ๋ผ์.
๋ง์ฝ N๋ช ์ด ์ฐธ์ฌํ๋ฉด N(N-1) / 2 ๊ฐ์ ์ฐ๊ฒฐ์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
์ฐธ๊ฐ์๊ฐ 10๋ช ์ด๋ฉด 45๊ฐ์ ์ฐ๊ฒฐ์ด ์์ฑ๋๊ฒ ๋ฉ๋๋ค.
์ฆ, ์ด๋ ๊ฒ ๋๋ฉด CPU์ ๊ณผ๋ถํ๊ฐ ์ฌ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค.
๋์ ๋ณดํต P2P ๊ตฌํ์ ์๋ฒ์ ๋ณ๋์ ๋ถํ๊ฐ ์๊ณ , Peer ๊ฐ์ ์ง์ ์ ์ธ ์ฐ๊ฒฐ๋ก ์ค์๊ฐ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
๊ทธ๋์ ๋งค์ฐ ์ ์ ์ฌ์ฉ์๋ค๋ง ํ์๋ก ํ ๋ ์ฌ์ฉํ๊ฒ ๋๋ ๊ตฌํ ๋ฐฉ์์ ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์๊น์?
์ด๋ ํ ๋ฐฉ์๋ค์ด ์์์ง ๊ฐ๋จํ๊ฒ ์ง๊ณ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค.
SFU(Selective Forwarding Unit)
SFU๋ ์๋ฆฌํ ๋ฏธ๋์ด ๋ผ์ฐํฐ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
๋ฏธ๋์ด ๊ฐ์ ํธ๋ํฝ์ ์ค๊ณํ๋ ์ค์ ์๋ฒ์ด๋ฉฐ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ Peer์ ์ฐ๊ฒฐํฉ๋๋ค.
- ๊ฐ ์ฐธ๊ฐ์๋ก๋ถํฐ ํ๋์ ์คํธ๋ฆผ๋ง ๋ฐ์์ ํ์ํ ๊ณณ์ ์ ๋ฌํฉ๋๋ค.
- ์ฐธ๊ฐ์๋ค์ ๋์ญํญ๊ณผ ์ฑ๋ฅ์ ๋ฐ๋ผ ์์ ํ์ง์ ์กฐ์ ํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ณ , ์ง์ฐ ์๊ฐ๋ ๋น๊ต์ ์งง์ต๋๋ค.
์๋ ๋ฐฉ์์ ์์๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- A๊ฐ ์์์ SFU๋ก ํ ๋ฒ๋ง ์ ์กํด์.
- SFU๊ฐ ์ด ์์์ B, C, D์๊ฒ ๊ฐ๊ฐ ์ ๋ฌํด์.
- A๋ ์ ๋ก๋๋ฅผ ํ ๋ฒ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋์ 1:N ํ์ ๋๋ ์๊ท๋ชจ N:M ํ์์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ด ํ์ํ ์ํฉ์์ ์ฃผ๋ก ์ฑํ๋๊ณ ์์ด์.
MCU(Multipoint Control Unit)
MCU๋ ์์์ ๋ฐ์์ ์์ ๋ค์์ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋ค์ด ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
MCU ๋ฐฉ์์ ํด๋ผ์ด์ธํธ์ ๋ถ๋ด์ด ๊ฐ์ฅ ์ ๊ณ , ์ผ๊ด๋ ๊ฒฝํ์ ์ ๊ณตํ์ง๋ง ์๋ฒ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ต๋ ๋จ์ ์ผ๋ก๋ webRTC์ ์ต๋ ์ฅ์ ์ธ ์ค์๊ฐ์ฑ์ด ๋ณด์ฅ๋์ง ์์ ์ ์์ด์.
์๋ ๋ฐฉ์์ ์๋์ ๊ฐ์์
- A, B, C๊ฐ ๊ฐ์์ ์์์ MCU๋ก ๋ณด๋ ๋๋ค.
- MUC๊ฐ ์ด ์์๋ค์ ํ๋์ ์คํธ๋ฆผ์ผ๋ก ๋ง๋ค์ด์
- ๊ทธ๋ฆฌ๊ณ ์ด ํตํฉ๋ ์คํธ๋ฆผ์ ๋ชจ๋ ์ฐธ๊ฐ์์๊ฒ ๋ณด๋ด์ฃผ๊ฒ ๋ฉ๋๋ค.
๊ฐ๋จํ๊ฒ ์์ฝํ์๋ฉด
- SFU: ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ์ข์์. ๋๊ท๋ชจ ํ์์ ์ ํฉํฉ๋๋ค.
- MCU: ์ผ๊ด๋ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ํด๋ผ์ด์ธํธ ๋ถ๋ด์ด ์ ์ต๋๋ค. ์์ ํ์๋ ๋ฎ์ ์ฑ๋ฅ์ ๊ธฐ๊ธฐ์ ์ข์์.
์ ํฌ๊ฐ ์๊ณ ์๋ ์๋น์ค ์ค์์ Zoom์ SFU์ MCU์ ํ์ด๋ธ๋ฆฌ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ , GoogleMeet๋ SFU ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ๋ค์.
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๊ธ์์๋ webRTC๊ฐ ๋ฌด์์ด๊ณ , ์ด๋ฅผ ํตํด์ ์ด๋ป๊ฒ ์ค์๊ฐ ํต์ ์ด ์ด๋ฃจ์ด์ง๋์ง, ์ด๋ค ํ๊ณ์ ์ด ์๊ณ ์ด๋ค ๋ฐฉ์์ด ์๋์ง ์์๋ณด์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์ค๋ช ํ๋ P2P ๋ฐฉ์, SFU, MCU์ ๊ฐ์ ๋ฐฉ์์ ๊ฐ๊ฐ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋๊ณ ์ ๋ต์ ์์ต๋๋ค.
์ ์ฒด์ ์ธ ๊ฐ๋ ์ ๋ํด์ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๊ณ ๋ค์ ํฌ์คํ ์ ์ค์ ์ฝ๋ ์์ ๋ฅผ ํตํ webRTC์ ๊ฐ๋จํ P2P ๋ฐฉ์ ํ์์ฑํ ์๋น์ค๋ฅผ ํตํด์ ๋์ ๋ฐฉ์์ ๋ ์์ธํ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
์ฐธ๊ณ ๋ฌธํ:
- https://developer.mozilla.org/ko/docs/Glossary/ICE
- https://webrtc.org/?hl=ko
- https://youtu.be/bWcNEk0H4Y0?si=Xi_1DzGuIXyMb0Qm
- https://youtu.be/8I2axE6j204?si=-lZ7fD4qApao1TdE
- https://bloggeek.me/webrtc-p2p-mesh/
- https://webrtc.ventures/2021/08/liveswitch-telehealth-video-application/
- https://millo-l.github.io/WebRTC-%EA%B5%AC%ED%98%84-%EB%B0%A9%EC%8B%9D-Mesh-SFU-MCU/