-
Notifications
You must be signed in to change notification settings - Fork 0
๐ฌ WebRTC๋ฅผ ์์๋ณด์
P2P
TCP
UDP
SRTP
SCTP
Signaling
SDP
STUN/TURN
NAT Traversal
ICE
Trickle ICE
Mesh
SFU
WebRTC(Web Real-Time Communications)์ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋ณ๋์ ์ํํธ์จ์ด๋ ํ๋ฌ๊ทธ์ธ ์์ด ์์ฑ, ์์ ๋ฏธ๋์ด, ํ ์คํธ, ํ์ผ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก P2P( Peer-to-Peer) ํ์ํ์ ๋ฐ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ์ง์ํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
WebSocket๊ณผ WebRTC ๋ชจ๋ ์ค์๊ฐ ํต์ ์ ์ง์ํ์ง๋ง, ๊ทธ ์ฉ๋์ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋กํ ์ฝ์ด๋ค. WebSocket์ ํ ์คํธ์ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
WebSocket ์ฐ๊ฒฐ์ ์ฒ์์ HTTP๋ก ์์ํ๋ค. ์ด๋ ํน๋ณํ ํค๋๋ค์ ํฌํจ์์ผ ์ด ์ฐ๊ฒฐ์ WebSocket์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ์ถ๋ค๋ ์์ฌ๋ฅผ ์ ๋ฌํ๋ค. HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก handshake๋ฅผ ํตํด TCP ์ฐ๊ฒฐ์ด ์๋ฆฝ๋๋ค.
TCP ์ฐ๊ฒฐ ์๋ฆฝ๊ณผ ์ข ๋ฃ
์ฐ๊ฒฐ ์๋ฆฝ: 3-way handshake (์ฐ๋ฆฌ ์จ์ด ํธ๋์ ฐ์ดํฌ)
์ธ ๊ฐ์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง ์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์ ์ ์๋ฏธํ๋ค.
ํธ์คํธ A, B์ ์ฐ๋ฆฌ ์จ์ด ํธ๋์ ฐ์ดํฌ ๋จ๊ณ
์ก์์ ๋ฐฉํฅ | ์ธ๊ทธ๋จผํธ | ์ธ๊ทธ๋จผํธ์ ํฌํจ๋ ์ฃผ์ ์ ๋ณด |
---|---|---|
A โ B | SYN ์ธ๊ทธ๋จผํธ | - ํธ์คํธ A์ ์ด๊ธฐ ์์ ๋ฒํธ - 1๋ก ์ค์ ๋ SYN ๋นํธ |
B โ A | SYN + ACK ์ธ๊ทธ๋จผํธ | - ํธ์คํธ B์ ์ด๊ธฐ ์์ ๋ฒํธ - ํธ์คํธ A๊ฐ ์ ์กํ ์ธ๊ทธ๋จผํธ์ ๋ํ ํ์ธ ์๋ต ๋ฒํธ - 1๋ก ์ค์ ๋ SYN ๋นํธ - 1๋ก ์ค์ ๋ ACK ๋นํธ |
A โ B | ACK ์ธ๊ทธ๋จผํธ | - ํธ์คํธ A์ ๋ค์ ์์ ๋ฒํธ - ํธ์คํธ B๊ฐ ์ ์กํ ์ธ๊ทธ๋จผํธ์ ๋ํ ํ์ธ ์๋ต ๋ฒํธ - 1๋ก ์ค์ ๋ ACK ๋นํธ |
handshake๊ฐ ์๋ฃ๋๋ฉด, HTTP ํ๋กํ ์ฝ์ด ์๋ WebSocket ํ๋กํ ์ฝ์ ์ฌ์ฉํด ํต์ ํ๊ฒ ๋๋ค. TCP ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค. ํ๋ฒ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋๋ฉด ์์ชฝ์์ ์์ ๋กญ๊ฒ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
์๋ฒ๋ฅผ ๊ฒฝ์ ํ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํต์ (P2P)์ ์ง์ํ๋ ๊ธฐ์ ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ P2P๋ก ์ง์ ์ ์กํ ์ ์์ด ์ง์ฐ ์๊ฐ ๋ฐ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค. ํ ์คํธ/๋ฐ์ด๋๋ฆฌ ํํ์ ๋ฐ์ดํฐ๋ง ์ ์กํ ์ ์๋ WebSocket๊ณผ ๋ฌ๋ฆฌ ๋น๋์ค, ์ค๋์ค ๋ฑ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ง์ํ์ฌ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ ์ค์๊ฐ ํต์ ์ด ๊ฐ๋ฅํ๋ค. getUserMedia(), RTCPeerConnection, RTCDataChannel ๋ฑ์ API๋ฅผ ํตํด ์นด๋ฉ๋ผ/๋ง์ดํฌ ์ ๊ทผ๋ถํฐ ๋ฐ์ดํฐ ์ ์ก๊น์ง ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
WebRTC์์ ๋ค์๊ฐ ์ฐ๊ฒฐ์ ๊ตฌํํ ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์์ฃผ ์ฌ์ฉ๋๋ค.
๋ชจ๋ ํผ์ด๊ฐ ๊ฐ ํผ์ด์ ์ง์ P2P ์ฐ๊ฒฐ์ ๋งบ๋ ๋ฐฉ์์ด๋ค. ์ฐธ๊ฐ์๊ฐ ์ ์ ๋(4-5๋ช ๊น์ง)๋ ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ์ง์ฐ์๊ฐ์ด ์งง๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ฐธ๊ฐ์๊ฐ ๋์ด๋ ์๋ก ํ์ํ ์ฐ๊ฒฐ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ฌ ๋คํธ์ํฌ์ ๋๋ฐ์ด์ค์ ํฐ ๋ถ๋ด์ ์ค๋ค.
SFU(Selective Forwarding Unit) ๋ฐฉ์์ ์ค์์ ๋ฏธ๋์ด ์๋ฒ๋ฅผ ๋๊ณ ์ด๋ฅผ ํตํด ์คํธ๋ฆผ์ ์ค๊ณํ๋ ๋ฐฉ์์ด๋ค. ๊ฐ ์ฐธ๊ฐ์๋ ์์ ์ ์คํธ๋ฆผ์ SFU ์๋ฒ์ ํ ๋ฒ๋ง ์ ์กํ๊ณ , SFU๋ ์ด๋ฅผ ๋ค๋ฅธ ๋ชจ๋ ์ฐธ๊ฐ์์๊ฒ ์ ๋ฌํ๋ค. ์ด ๋ฐฉ์์ ํด๋ผ์ด์ธํธ์ ๋ถ๋ด์ ์ค์ผ ์ ์๊ณ , ๋๊ท๋ชจ ์ฐ๊ฒฐ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์๋ฒ ์ธํ๋ผ๊ฐ ํ์ํ๊ณ ์๋ฒ๋ฅผ ๊ฑฐ์น๋ฉด์ ์ถ๊ฐ์ ์ธ ์ง์ฐ์ด ๋ฐ์ํ ์ ์๋ค.
1. ์๊ทธ๋๋ง ์๋ฒ ์ฐ๊ฒฐ ์ค์
- WebSocket ๋ฑ์ ํตํ ์๊ทธ๋๋ง ์๋ฒ ์ฐ๊ฒฐ
- ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ธ์
์ค์
2. ๋ก์ปฌ ๋ฏธ๋์ด ํ๋
- getUserMedia() API๋ฅผ ํตํ ์นด๋ฉ๋ผ/๋ง์ดํฌ ์ ๊ทผ
- ๋ฏธ๋์ด ์ ์ฝ์กฐ๊ฑด ์ค์ (ํด์๋, ํ๋ ์๋ ์ดํธ ๋ฑ)
3. RTCPeerConnection ๊ฐ์ฒด ์์ฑ
- STUN/TURN ์๋ฒ ์ค์
- ๋ฏธ๋์ด ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ ์ด๊ธฐํ
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก
4. SDP ๊ตํ (Offer/Answer)
- Offer ์์ฑ ๋ฐ ์ ์ก (๋ฐ์ ์ธก)
- Answer ์์ฑ ๋ฐ ์ ์ก (์์ ์ธก)
- ๋ก์ปฌ/์๊ฒฉ SDP ์ค์
5. ICE Candidate ์์ง ๋ฐ ๊ตํ
- ๋ก์ปฌ candidate ์์ง
- STUN ์๋ฒ๋ฅผ ํตํ ๊ณต์ธ ์ฃผ์ ํ์ธ
- Candidate ์ ๋ณด ๊ตํ
6. P2P ์ฐ๊ฒฐ ์๋ฆฝ
- ICE ์ฐ๊ฒฐ ํ์ธ
- DTLS/SRTP ๋ณด์ ํ์
- ๋ฏธ๋์ด/๋ฐ์ดํฐ ์ฑ๋ ์ค์
7. ์คํธ๋ฆผ ์ ์ก
- ๋ฏธ๋์ด ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ
- ๋คํธ์ํฌ ์ํ์ ๋ฐ๋ฅธ ์ ์ํ ๋นํธ๋ ์ดํธ ์กฐ์
WebRTC ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์์ ํผ์ด ๊ฐ ์ด๊ธฐ ์ ๋ณด๋ฅผ ๊ตํํ๋ ์ ์ฐจ์ด๋ค. WebRTC๋ ์๊ทธ๋๋ง์ ์ํ ๋ณ๋ ํ๋กํ ์ฝ์ ์ ์ํ์ง ์์ ์ฃผ๋ก WebSocket์ผ๋ก ๊ตฌํ๋ ์๊ทธ๋๋ง ์๋ฒ๊ฐ ์ด ์ญํ ์ ์ํํ๊ฒ ๋๋ค.
์๊ทธ๋๋ง์ด ํ์ํ ์ด์ ๋ ํผ์ด ๊ฐ ์๋ก์ ์ ๋ณด(์: IP์ฃผ์, ํฌํธ)๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. P2P ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ํด ์ด๋ฌํ ์ด๊ธฐ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด ์๊ทธ๋๋ง ์๋ฒ์ ์ญํ ์ด๋ค. ์๊ทธ๋๋ง ์๋ฒ๋ ์ฌ์ฉ์ ์ธ์ ๊ด๋ฆฌ, SDP ๊ตํ, ICE candiate ์ ๋ฌ ๋ฑ์ ๋ด๋นํ๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ A๊ฐ ํ์ ํตํ๋ฅผ ์์ํ๋ ค๊ณ ํ๋ค๋ฉด, ์๊ทธ๋๋ง ์๋ฒ๋ ์ฌ์ฉ์ B์๊ฒ A์ ์ฐ๊ฒฐ ์์ฒญ์ ์ ๋ฌํ๊ณ ์์ชฝ์ SDP ์ ๋ณด์ ICE candidate๋ฅผ ์ค๊ฐํ๋ค. ์๊ทธ๋๋ง ํ๋กํ ์ฝ์ WebRTC ํ์ค์ ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ ๋กญ๊ฒ ์ค๊ณํ ์ ์๋ค.
1. ์ฌ์ฉ์ ์ฐ๊ฒฐ
- WebSocket ์ฐ๊ฒฐ ์๋ฆฝ
- ์ฌ์ฉ์ ์ธ์ฆ/์๋ณ
2. ๋ฐฉ ์์ฑ/์ฐธ์ฌ
- ๋ฐฉ ID ์์ฑ/๊ณต์
- ์ฐธ์ฌ์ ๊ด๋ฆฌ
3. SDP ๊ตํ
- Offer ์์ฑ/์ ๋ฌ
- Answer ์์ฑ/์ ๋ฌ
4. Candidate ๊ตํ
- ICE candidate ์์ง
- ์ค์๊ฐ ์ ๋ฌ
5. ์ฐ๊ฒฐ ์ํ ๊ด๋ฆฌ
- ์ฐ๊ฒฐ/ํด์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ์ค๋ฅ ์ฒ๋ฆฌ
NAT(Network Address Translation)์ ์ฌ์ค IP ์ฃผ์๋ฅผ ๊ณต์ธ IP ์ฃผ์๋ก ๋ณํํ๋ ๊ธฐ์ ์ด๋ค. ํ๋์ ๊ณต์ธ IP๋ฅผ ์ฌ๋ฌ ์ฌ์ค IP๊ฐ ๊ณต์ ํ ์ ์๊ฒ ํด์ค๋ค.
NAT Traversal์ ์ด๋ฌํ NAT ํ๊ฒฝ์์ P2P ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ธฐ์ ๋ค์ ์ด์นญํ๋ค. NAT ๋ค์ ์๋ ๊ธฐ๊ธฐ์์ ํต์ ์ ์ค์ ํ ์ ์๋๋ก ํ๋๋ฐ, WebRTC๋ STUN๊ณผ TURN ์๋ฒ, ICE ๋ฑ ๋ค์ํ NAT Traversal ๊ธฐ์ ๋ค์ ์ฌ์ฉํด NAT์ ๋ฐฉํ๋ฒฝ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๋ฐฉํ๋ฒฝ์ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ ํํ์ฌ ์ธ๋ถ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋คํธ์ํฌ๋ฅผ ๋ณดํธํ๋ค. WebRTC ์ฐ๊ฒฐ ์ ํน์ ํฌํธ๊ฐ ์ฐจ๋จ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ์ด ์ด๋ ค์ธ ์ ์๋ค.
์ฆ, ๋ผ์ฐํฐ๋ฅผ ํต๊ณผํด ๊ณต์ธ IP ์ฃผ์, ์ฌ์ค IP ์ฃผ์๋ฅผ ์์๋ด์ด ํด๋ผ์ด์ธํธ ๊ฐ P2P ์ฐ๊ฒฐ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ณผ์ ์ NAT Traversal์ด๋ผ๊ณ ํ๋ค.
๊ณต์ธ IP ์ฃผ์์ ์ฌ์ค IP ์ฃผ์
์ ์ธ๊ณ์์ ๊ณ ์ ํ IP ์ฃผ์์ด๋ค. ๋คํธ์ํฌ ๊ฐ์ ํต์ , ์ด๋ฅผํ ๋ฉด ์ธํฐ๋ท์ ์ด์ฉํ ๋ ์ฌ์ฉํ๋ IP ์ฃผ์๊ฐ ๋ฐ๋ก ๊ณต์ธ IP ์ฃผ์์ด๋ค. ๊ณต์ธ IP ์ฃผ์๋ ISP๋ ๊ณต์ธ IP ์ฃผ์ ํ ๋น ๊ธฐ๊ด์ ํตํด ํ ๋น๋ฐ์ ์ ์๋ค.
์ฌ์ค ๋คํธ์ํฌ์์ ์ฌ์ฉํ๊ธฐ ์ํ IP ์ฃผ์์ด๋ค. ์ฌ์ค ๋คํธ์ํฌ๋ ์ธํฐ๋ท, ์ธ๋ถ ๋คํธ์ํฌ์ ๊ณต๊ฐ๋์ง ์์ ๋คํธ์ํฌ๋ฅผ ์๋ฏธํ๋ค. IP ์ฃผ์ ๊ณต๊ฐ ์ค ์ฌ์ค IP ์ฃผ์๋ก ์ฌ์ฉํ๋๋ก ํน๋ณํ ์์ฝ๋ IP ์ฃผ์ ๊ณต๊ฐ์ด ์๋ค. ๋ค์ ๋ฒ์์ ์ํ๋ IP ์ฃผ์๋ ์ฌ์ค IP ์ฃผ์๋ก ๊ฐ์ฃผํ๊ธฐ๋ก ์ฝ์๋์ด ์๋ค.
- 10.0.0.0/8 (10.0.0.0 - 10.255.255.255)
- 172.16.0.0/12 (172.16.0.0 - 172.31.255.255)
- 192.168.0.0/16 (192.168.0.0 - 192.168.255.255)
์ฌ์ค IP ์ฃผ์์ ํ ๋น ์ฃผ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ฐํฐ
์ด๋ค. ํ ๋น๋ฐ์ ์ฌ์ค IP ์ฃผ์๋ ํด๋น ํธ์คํธ๊ฐ ์ํ ์ฌ์ค ๋คํธ์ํฌ์์์๋ง ์ ํจํ ์ฃผ์์ด๋ฏ๋ก, ์ผ๋ง๋ ์ง ๋ค๋ฅธ ๋คํธ์ํฌ์์ ์ฌ์ค IP ์ฃผ์์ ์ค๋ณต๋ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ์ค IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ํธ์คํธ๊ฐ ์ธ๋ถ ๋คํธ์ํฌ์ ํต์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์ด๋ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ด NAT(Network Address Translation)
์ด๋ค. NAT๋ IP ์ฃผ์๋ฅผ ๋ณํํ๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก ๋คํธ์ํฌ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ์ฌ์ค IP ์ฃผ์์ ๋คํธ์ํฌ ์ธ๋ถ์์ ์ฌ์ฉ๋๋ ๊ณต์ธ IP ์ฃผ์๋ฅผ ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. NAT๋ฅผ ํตํด ์ฌ์ค IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฌ ํธ์คํธ๋ ์ ์ ์์ ๊ณต์ธ IP ์ฃผ์๋ฅผ ๊ณต์ ํ ์ ์๋ค. ๋๋ถ๋ถ์ ๋ผ์ฐํฐ์ (๊ฐ์ ์ฉ) ๊ณต์ ๊ธฐ๋ NAT ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์๋ค. ๊ทธ๋ ๊ธฐ์ ์ฌ์ค ๋คํธ์ํฌ์์์ ๋ง๋ค์ด์ง ํจํท ์ ์ฌ์ค IP ์ฃผ์๋ ๊ณต์ ๊ธฐ๋ฅผ ๊ฑฐ์ณ ๊ณต์ธ IP ์ฃผ์๋ก ๋ณ๊ฒฝ๋๊ณ , ์ธ๋ถ ๋คํธ์ํฌ๋ก ์ ์ก๋๋ค. ๋ฐ๋๋ก ์ธ๋ถ ๋คํธ์ํฌ๋ก๋ถํฐ ๋ฐ์ ํจํท ์ ๊ณต์ธ IP ์ฃผ์๋ ๊ณต์ ๊ธฐ๋ฅผ ๊ฑฐ์ณ ์ฌ์ค IP ์ฃผ์๋ก ๋ณ๊ฒฝ๋์ด ์ฌ์ค ๋คํธ์ํฌ ์ ํธ์คํธ์ ์ด๋ฅด๊ฒ ๋๋ค.
NAT ๋ค์ ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ๊ณต์ธ IP ์ฃผ์์ ํฌํธ๋ฅผ ์์๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ STUN ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, STUN ์๋ฒ๋ ํด๋น ํด๋ผ์ด์ธํธ๊ฐ ๋ณด์ด๋ ๊ณต์ธ ์ฃผ์ ์ ๋ณด๋ฅผ ์๋ต์ผ๋ก ์ ์กํ๋ค. STUN ์๋ฒ๋ ๋จ์ํ ์ฃผ์ ์ ๋ณด๋ง์ ์ ๊ณตํ์ฌ ์๋ฒ ๋ฆฌ์์ค ์ฌ์ฉ์ด ์ ๊ณ ๊ตฌํ์ด ๋น๊ต์ ๊ฐ๋จํ๋ค. STUN ์๋ฒ๋ P2P ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ์ํฉ์์๋ ์ง์ ํต์ ์ ํ ์ ์๊ฒ ํด์ค๋ค.
P2P ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฏธ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ค๊ณํด ์ฃผ๋ ์๋ฒ์ด๋ค. Symmetric NAT์ ๊ฐ์ด ์ ํ์ ์ธ ํ๊ฒฝ์์๋ ์ง์ ์ ์ธ P2P ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ์ ์๋๋ฐ, ์ด๋ TURN ์๋ฒ๊ฐ ์ค๊ฐ์์ ํธ๋ํฝ์ ์ค๊ณํ๋ค. ๋ชจ๋ ๋ฏธ๋์ด ์คํธ๋ฆผ์ด TURN ์๋ฒ๋ฅผ ๊ฒฝ์ ํ์ฌ ์๋ฒ์ ๋์ญํญ๊ณผ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ค์ํ๋ค. TURN ์๋ฒ๋ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ํ์ฅ์ฑ์๋ ์ ์ฝ์ด ์์ด ์ง์ P2P ์ฐ๊ฒฐ์ด ์คํจํ์ ๋ ๋ง์ง๋ง ์๋จ์ผ๋ก ์ฌ์ฉ๋๋ค.
Symmetric NAT(๋์นญํ NAT)
๋ด๋ถ ๋คํธ์ํฌ์ ์ฅ์น๊ฐ ์ธ๋ถ ๋คํธ์ํฌ์ ํต์ ํ ๋, ๊ฐ์ ๋ด๋ถ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ๋์์ด ๋๋ ์ธ๋ถ ์ฃผ์์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๋งคํ๋ ๊ณต์ฉ IP ์ฃผ์์ ํฌํธ ๋ฒํธ๋ฅผ ํ ๋นํ๋ NAT ์ ํ ํต์ ํ๋ ค๋ ๋์์ ๋ฐ๋ผ ๊ณต์ฉ IP ์ฃผ์์ ํฌํธ๊ฐ ๋ค๋ฅด๊ฒ ์ค์ ๋๋ค.P2P ํต์ ์์๋ ๊ฐ ํผ์ด์ ๊ณต์ฉ IP ์ฃผ์์ ํฌํธ๋ฅผ ํตํด ์ง์ ํต์ ํ๋ ค ํ๋ค. ๊ทธ๋ฌ๋ Symmetric NAT์์๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋์๊ณผ ํต์ ํ ๋๋ง๋ค ์๋ก์ด ๋งคํ์ด ์์ฑ๋๋ฏ๋ก, P2P ํต์ ์ด ๋ณต์กํด์ง๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, TURN ์๋ฒ๋ฅผ ์ฌ์ฉํด P2P ์ฐ๊ฒฐ์ ์ฐํํ๊ฑฐ๋, ์ค๊ณ ์๋ฒ๋ฅผ ํตํ ๊ฐ์ ์ฐ๊ฒฐ์ด ํ์ํ๋ค. Symmetric NAT๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณด์์ฑ์ด ๋์ง๋ง, NAT ํธ๋๋ฒ์ค์ ์ด๋ ค์์ ์ฃผ์ด WebRTC๋ P2P ํต์ ํ๊ฒฝ์์๋ ๋ฌธ์ ์ ์ผ๋ก ์์ฉํ ์ ์๋ค.
SDP(Session Description Protocol)๋ ํผ์ด ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ ๋ฏธ๋์ด์ ์ข ๋ฅ, ์ฝ๋ฑ, ํด์๋, ๋์ญํญ ๋ฑ์ ์ ๋ณด๋ฅผ ํ ์คํธ๋ก ๊ธฐ์ ํ ํ๋กํ ์ฝ์ด๋ค. ํผ์ด ๊ฐ์ ๋ฏธ๋์ด ํน์ฑ์ ํ์ํ๊ณ , ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ฏธ๋์ด ์คํธ๋ฆผ์ด ์ค์ ๋๋ค. ์ฆ, SDP ๊ตํ์ โ์ด๋ค ์ข ๋ฅ์ ๋ฏธ๋์ด๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฃผ๊ณ ๋ฐ์์งโ ํ์ํ๋ ๊ณผ์ ์ด๊ณ , ์ดํ ICE candidate ๊ตํ์ โ์ด๋ค ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐํ ์งโ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด๋ค.
ICE(Interactive Connectivity Estabishment)๋ ๋ ํผ์ด ๊ฐ์ ์ต์ ์ฐ๊ฒฐ ๊ฒฝ๋ก
๋ฅผ ์ฐพ์๋ด๋ ํ๋ ์์ํฌ์ด๋ค. NAT์ ๋ฐฉํ๋ฒฝ์ด ์กด์ฌํ๋ ๋ณต์กํ ๋คํธ์ํฌ ํ๊ฒฝ์์, ๊ฐ๋ฅํ ๋ชจ๋ ์ฐ๊ฒฐ ๊ฒฝ๋ก๋ฅผ ์๋ํ๊ณ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ๊ณผ์ ์ ๋ด๋นํ๋ค. ICE๋ ์ฌ๋ฌ ๊ฐ์ candidate(ํ๋ณด)๋ฅผ ์์งํ๊ณ ์ฐ์ ์์์ ๋ฐ๋ผ ์ฐ๊ฒฐ์ ์๋ํ๋ค.
1. Host Candidate
- ๋ก์ปฌ ๋คํธ์ํฌ ์ธํฐํ์ด์ค ์ฃผ์
- ์ต์ฐ์ ์ฌ์ฉ ์๋
- ์: "192.168.1.100:9999"
2. Server Reflexive Candidate
- STUN ์๋ฒ๋ก ํ์ธํ ๊ณต์ธ ์ฃผ์
- NAT ๋ฐ์ธ๋ฉ ์ฃผ์
- ์: "203.0.113.100:12345"
3. Relay Candidate
- TURN ์๋ฒ ํ ๋น ์ฃผ์
- ์ตํ์ ์๋จ์ผ๋ก ์ฌ์ฉ
- ์: "turn.example.com:3478"
ICE ํ๋ก์ธ์ค๋ ๋จ๊ณ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์๋ํ๋ค.
- Host Candidate (๋ก์ปฌ ์ฃผ์) ์์ง
- ๋จผ์ ์์ ์ ๋ก์ปฌ ๋คํธ์ํฌ ์ธํฐํ์ด์ค ์ฃผ์๋ฅผ ์์ง
- ๊ฐ์ ๋คํธ์ํฌ์ ์๋ ๊ฒฝ์ฐ ์ด ์ฃผ์๋ก ์ง์ ์ฐ๊ฒฐ ์๋
- Server Reflexive Candidate (STUN์ ํตํ ๊ณต์ธ ์ฃผ์) ์์ง
- STUN ์๋ฒ๋ฅผ ํตํด NAT ๋ค์ ๊ณต์ธ IP:Port ํ์ธ
- ๋ค๋ฅธ ๋คํธ์ํฌ์ ์์ง๋ง NAT ํ๊ฒฝ์ด ํ์ฉ์ ์ธ ๊ฒฝ์ฐ ์ด ์ฃผ์๋ก ์ฐ๊ฒฐ ์๋
- Relay Candidate (TURN ์๋ฒ ์ฃผ์) ์์ง
- ์์ ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ๊ฒฐ์ด ์ ๋๋ ๊ฒฝ์ฐ
- ํนํ Symmetric NAT ๊ฐ์ ์ ํ์ ์ธ ํ๊ฒฝ์์
- TURN ์๋ฒ๋ฅผ ํตํ ์ค๊ณ ์ฐ๊ฒฐ ์๋
์ด๋ ๋ง์น ๊ณ๋จ์ ํด๋ฐฑ(fallback) ๋ฉ์ปค๋์ฆ์ฒ๋ผ ์๋ํ๋ค.
1. Host Candidate ์๋
โ (์คํจ์)
2. Server Reflexive Candidate(STUN) ์๋
โ (์คํจ์)
3. Relay Candidate(TURN) ์๋
ICE๋ ์ด๋ฌํ candidate๋ค์ ์์ฐจ์ ์ผ๋ก ์๋ํ๋ฉด์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ธ๋ค. ์ด ๊ณผ์ ์์ ์์ชฝ ํผ์ด์ candidate๋ค์ ์กฐํฉํด ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ ์คํธํ๊ณ , ๋คํธ์ํฌ ์ํ์ ์ง์ฐ์๊ฐ ๋ฑ์ ๊ณ ๋ คํด ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ค.
ICE ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ๋ ๊ธฐ์ ์ด๋ค. ์ ํต์ ์ธ ICE ํ๋ก์ธ์ค์์๋ ๋ชจ๋ candidate๋ฅผ ์์ง ํ ํ๊บผ๋ฒ์ ์ ์กํ๋๋ฐ, Trickle ICE๋ candidate๋ฅผ ๋ฐ๊ฒฌํ๋ ์ฆ์ ์ ์กํ๋ค. ์ด ๋ฐฉ์์ ์ฅ์ ์ ์ฐ๊ฒฐ ์ค์ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์๋ค๋ ๊ฒ์ด๋ค. candidate๋ค์ ์์งํ๋ ์์ ์ ๋ณ๋ ฌ๋ก ์งํํ ์ ์๋ค. ๋นจ๋ฆฌ ๋ฐ๊ฒฌ๋๋ candidate๋ถํฐ ์ฐ๊ฒฐ์ ์๋ํด ๋ณผ ์ ์์ด ์ ์ฒด์ ์ธ ์ฐ๊ฒฐ ์ค์ ์๊ฐ์ด ๋จ์ถ๋๋ค.
WebRTC๋ ๋ฏธ๋์ด ์คํธ๋ฆผ๊ณผ ๋ฐ์ดํฐ ์ฑ๋ ์ํด ์๋ก ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค. ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๊ฒฝ์ฐ RTP(Real-time Transport Protocol)
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. RTP๋ UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋, ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์ํด ์ค๊ณ๋ ํ๋กํ ์ฝ๋ก, ํจํท์ ์ํ์ค ๋ฒํธ์ ํ์์คํฌํ๋ฅผ ํฌํจํด ์์ ์ธก์์ ํจํท์ ์์๋ฅผ ์ฌ๊ตฌ์ฑํ๊ณ ์ ์ ํ ์์ ์ ์ฌ์ํ ์ ์๊ฒ ํ๋ค.
๋ณด์์ ์ํด RTP๋ SRTP(Secure Real-time Transport Protocol)๋ก ์ํธํ๋๋ค. SRTP๋ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๊ธฐ๋ฐ์ฑ, ๋ฉ์์ง ์ธ์ฆ, ์ฌ์ ์ก ๋ฐฉ์ง ๋ฑ์ ์ ๊ณตํ๋ค.
๋ฐ์ดํฐ ์ฑ๋์ ๊ฒฝ์ฐ SCTP(Stream Control Transmission Protocol)๋ฅผ ์ฌ์ฉํ๋ค. SCTP๋ TCP์ ์ ์ฌํ๊ฒ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ ์ ๊ณตํ๋ฉด์๋, UDP์ ์ฅ์ ์ ์ด๋ ค ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ์คํธ๋ฆผ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ํ ๋ฉ์์ง ๊ธฐ๋ฐ์ ์ ์ก์ ์ง์ํ์ฌ ์ฑํ ์ด๋ ํ์ผ ์ ์ก๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
๋ฏธ๋์ด์คํธ๋ฆผ๊ณผ ๋ฐ์ดํฐ ์ฑ๋
- ์ค์๊ฐ ์ค๋์ค/๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ์คํธ๋ฆผ
- getUserMedia() API๋ฅผ ํตํด ์นด๋ฉ๋ผ/๋ง์ดํฌ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ
- ๋ฏธ๋์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ํน๋ณํ ๊ธฐ๋ฅ ์ ๊ณต:
- ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ
- ์์ฝ ์ ๊ฑฐ
- ๋ ธ์ด์ฆ ๊ฐ์
- ๋นํธ๋ ์ดํธ ์กฐ์
- ํจํท ์์ค ๋ณด์ ๋ฐ์ดํฐ ์ฑ๋ (DataChannel)
- ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ์ฑ๋
- ํ ์คํธ, ํ์ผ, JSON ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
- TCP๋ UDP ๊ฐ์ ํน์ฑ ์ ํ ๊ฐ๋ฅ:
- ordered/unordered (์์ ๋ณด์ฅ ์ฌ๋ถ)
- reliable/unreliable (์ ๋ขฐ์ฑ ๋ณด์ฅ ์ฌ๋ถ) ์ฃผ์ ์ฐจ์ด์
- ์ฉ๋: ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๋น๋์ค/์ค๋์ค ์ ์ฉ, ๋ฐ์ดํฐ ์ฑ๋์ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ
- ์ฒ๋ฆฌ ๋ฐฉ์: ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ค์๊ฐ ๋ฏธ๋์ด ์ฒ๋ฆฌ ์ต์ ํ, ๋ฐ์ดํฐ ์ฑ๋์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ ์ก
- ์ ์ด: ๋ฐ์ดํฐ ์ฑ๋์ ์ ๋ขฐ์ฑ๊ณผ ์์ ๋ณด์ฅ ์ฌ๋ถ๋ฅผ ์ค์ ํ ์ ์์
https://wormwlrm.github.io/2021/01/24/Introducing-WebRTC.html
https://k0zdevel.tistory.com/129
https://www.youtube.com/watch?v=bWcNEk0H4Y0
๐ค Ground Rule
๐ Convention
๐ณ Git Branch ์ ๋ต
๐ ๏ธ AGT - Automatic Git & Github Tool
๐ WebRTC Mesh โ ํธ๋ํฝ ๊ณ์ฐ
๐ข WebRTC Mesh - ํ๋ํ ์ฌ์
๐ฌ WebRTC๋ฅผ ์์๋ณด์
๐ฎ SSE(Server Sent Events)
๐ SSE Pagination
โณ Socket ํต์ ์์ ๋น๋๊ธฐ ์์
์์ ๋ณด์ฅ ๋ฐฉ๋ฒ
๐ก Redis pub/sub๋ฅผ ํ์ฉํ SSE ์ ์ฉ๊ธฐ
๐๏ธ Naver Cloud Platform์ ํ์ฉํ ๋ฐฐํฌ ์ ๋ต
โ๏ธ๐ ๋ถํ ํ
์คํธ: ๋จ์ผ ์ธ์คํด์ค VS NKS
๐ดโโ๏ธ Redis๋ก ๊ฒ์๋ฐฉ ๊ด๋ฆฌ ์ต์ ํ: ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฑ๋ฅ ๊ฐ์
๐ ํ์๋ก ์บ๋ฆฐ๋
๐ค ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ ํ
ํ๋ฆฟ
๐ค ํ๊ณ ํ
ํ๋ฆฟ
0๏ธโฃ 0์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
1๏ธโฃ 1์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
2๏ธโฃ 2์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
3๏ธโฃ 3์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
4๏ธโฃ 4์ฃผ์ฐจ ๋ฉํ ๋ง ์ผ์ง
0๏ธโฃ 0์ฃผ์ฐจ ๋ฐํ
1๏ธโฃ 1์ฃผ์ฐจ ๋ฐํ
2๏ธโฃ 2์ฃผ์ฐจ ๋ฐํ
3๏ธโฃ 3์ฃผ์ฐจ ๋ฐํ
4๏ธโฃ 4์ฃผ์ฐจ ๋ฐํ
5๏ธโฃ ์ต์ข
๋ฐํ