๐ป webRTC Process
webRTC ์ํ๊ณผ์
p2p ์์ ๋ฐ ์์ฑ ํต์ ์ ํ๋ webRTC application ์ ๊ตฌ์ฑํ๋ค๋ฉด, ๋ค์ ์์ ์ ์ํํฉ๋๋ค.
- Fetching : ์๋ peer ์๊ฒ ๋ณด๋ผ ์ฌ์ฉ์์ ์์ฑ ๋ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค.
- Signaling : ์๋ peer ์ ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํด์, ์๋ peer ์ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค. ๋ค์ ๊ณผ์ ์ ์ํํฉ๋๋ค.
- Exchanging session descriptions(์ธ์ ์ค๋ช ๊ตํ) : offer, answer
- Exchanging ICE candidates(ICE ํ๋ณด์ ๊ตํ) : ICE candidates
1. Fetching
- webRTC API ์ธ MediaStream, getUserMedia ๋ฅผ ์ด์ฉํด ์ฌ์ฉ์์ ์์ ๋ฐ ์์ฑ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ถ์ถํ video ๋ audio ๋ฐ์ดํฐ ํธ๋๋ค์ Peer-to-Peer ์ฐ๊ฒฐ ์์๋ค๊ฐ ๋ด์์ผํ๋ค.
- ๊ทธ๋์ RTCPeerConnection ๊ฐ์ฒด์ addTrack ๋ฉ์๋๋ฅผ ์ด์ฉํด์ video ๋ audio ๋ฐ์ดํฐ ํธ๋๋ค์ stream์ ์ถ๊ฐํฉ๋๋ค.
์ด์ ๋ฉ์ ์๋ค์ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง์ ๋ํ ํ๋กํ ์ฝ์ด ํ์ํ๋ค. ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ค์ ํ๋๊ฐ ์๊ทธ๋๋ง ๋ฉ์ธ์ง ๊ตฌ์กฐ์ ๋๋ค.
2. Signaling
Signlaing ๋จ๊ณ๋ peer์ peer๊ฐ ์๋ก๋ฅผ ์ฐพ์ ์ ์๋๋ก ๋๋ ์ค๊ฐ ๋งค๊ฐ์ ์ญํ ์ ํ๋ ์๋ฒ์ธ Signaling Server ๋ฅผ ํ์๋ก ํฉ๋๋ค.
์๊ทธ๋๋ง ์๋ฒ๋ ๋ ์ฅ์น๋ค ์ฌ์ด์ webRTC ์ปค๋ฅ์ ์ ๋ง๋ค๊ธฐ ์ํด, ์ธํฐ๋ท ๋คํธ์ํฌ์์ ๊ทธ ๋์ ์ฐ๊ฒฐ์ํค๋ ์์ ์ ํด์ฃผ๋ ์๋ฒ๋ฅผ ๋งํ๋ค.
- ์๊ทธ๋๋ง ์๋ฒ์ ํ๋ก์ธ์ค๋ offer , answer, ICE candidate 3๊ฐ์ง๋ก ์ด๋ฃจ์ด์ง๋ค.
- peer์ ์๊ทธ๋๋ง ์๋ฒ์ ํ๋ก์ธ์ค ํตํด์ RTC๊ฐ ์งํ๋ฉ๋๋ค.
2.1 offer
- Peer A(ํด๋ผ์ด์ธํธ)์์ offer๋ฅผ ๋ง๋ญ๋๋ค.
- ์ด offer๋ ์ธ์ ์ ๋ณด๋ฅผ SDP ํฌ๋งท์ผ๋ก ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ปค๋ฅ์ ์ด ์ด์ด์ง๊ธฐ๋ฅผ ์ํ๋ ์ ์ ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ์๊ทธ๋๋ง ์๋ฒ๋ก ๋ณด๋ ๋๋ค. SDP๋ ํด์๋๋ ํ์ ์ฝ๋ฑ๋ฑ์ ์ ๋ณด๋ค์ ํฌ๋ฉง ํ์์ด๋ค.
- ์๊ทธ๋๋ง ์๋ฒ๋ Peer A๋ก๋ถํฐ ๋ฐ์ offer ์ธ์ ์ ๋ณด๋ฅผ Peer B๋ก socket ํต์ ์ผ๋ก ์ ๋ฌํฉ๋๋ค.
2.2 answer
- Peer B์์๋ Peer A์ offer์ SDP description์ ํฌํจํ๋ answer ๋ฉ์ธ์ง๋ฅผ ์๋ฒ๋ก ๋ณด๋ด์ผํ๋ค.
- ์๋ฒ์์๋ Peer A์๊ฒ answer๋ฅผ ๋ณด๋ ๋๋ค.
2.3 offer์ answer๋ฅผ ๊ตํํ ์ด์
offer์ answer ์ด๋ฒคํธ ํต์ ์ผ๋ก ๋ Peer๋ค์ ์ด call์ ๋ํ ์ด๋ค ์ฝ๋ฑ๊ณผ ์ด๋ค video parameter๋ค์ด ์ฌ์ฉ๋ ์ง ์๊ฒ ๋๋ค.
์ฆ, ๋ Peer๊ฐ์ ๋ฉ์ธ์ง ํ๋กํ ์ฝ๋ฅผ ์ค์ ์ ์๋ฃํ๋ค.
ํ์ง๋ง, ๊ทธ๋ค์ ์ฌ์ ํ ๋ฏธ๋์ด ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค.
์ฌ๊ธฐ์ Interactive Connectivity Establishment (ICE)๊ฐ ์ฌ์ฉ๋๋ค.
3. ICE
- ICE๋ Interactive Connectivity Establishment(์ธํฐ๋ท ์ฐ๊ฒฐ ์์ฑ)์ด๊ณ , ๋ธ๋ผ์ฐ์ ๊ฐ peer๋ฅผ ํตํ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋๋ก ํ๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค.
- ICE candidate๋ webRTC์ ํ์ํ ํ๋กํ ์ฝ๋ค์ ์๋ฏธํ๋๋ฐ ๋ฉ๋ฆฌ ๋จ์ด์ง ์ฅ์น์ ์ํตํ ์ ์๊ฒ ํ๊ธฐ ์ํจ์ด๋ค.
- ๊ทธ๋ฌ๋๊น ICE candidate๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ก ์ํตํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ด๋ค ์ํต ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ์ธ์ง๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ๋๋ค.
3.1 ICE candidates ๊ตํ
- offer๊ณผ answer๋ฅผ ํตํด SDP๋ฅผ ์๋ก ๊ตํํ ํ์ ๋ Peer๋ค์ ICE candidate(ICE ํ๋ณด)๋ค์ ๊ตํํ๊ธฐ ์์ํ๋ค.
- ๊ฐ ICE candidate๋ ๋ฐ์ Peer ์ ์ฅ์์ ํต์ ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค.
- ๊ฐ Peer๋ ๊ฒ์๋๋ ์์๋๋ก candidate๋ฅผ ๋ณด๋ด๊ณ ๋ฏธ๋์ด๊ฐ ์ด๋ฏธ ์คํธ๋ฆฌ๋ฐ์ ์์ ํ๋๋ผ๋ ๋ชจ๋ ๊ฐ๋ฅํ candidate๊ฐ ์ ์ก ์๋ฃ๋ ๋๊น์ง ๊ณ์ ๋ณด๋ธ๋ค.
- ๋ Peer๊ฐ ์๋ก ํธํ๋๋ candidate๋ฅผ ์ ์ํ๋ค๋ฉด, ๋ฏธ๋์ด๋ ํต์ ์ ์์ํ๋ค.
3.2 ICE ๋ฉ์ธ์ง
- ๊ฐ ICE ๋ฉ์ธ์ง๋ค์ ๋ ๊ฐ์ ์ปดํจํฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ ๋ณด๋ค์ ๋ง๋ถ์ฌ ํ๋กํ ์ฝ(TCP or UDP), IP ์ฃผ์, ํฌํธ ๋๋ฒ, ์ปค๋ฅ์ ํ์ ๋ฑ์ ์ ์ํ๋ค.
- ์ฌ๊ธฐ์๋ NAT ํน์ ๋ค๋ฅธ ๋ณต์กํ ๋คํธ์ํน์ ํฌํจํ๋ค.
3.3 RTCIceCandidate ์ธํฐํ์ด์ค
- ํ๋์ ICE candidate๋ WebRTC๊ฐ ์๊ฒฉ ์ฅ์น์ ํต์ ์ ํ๊ธฐ ์ํด ์๊ตฌ๋๋ ํ๋กํ ์ฝ๊ณผ ๋ผ์ฐํ ์ ๋ํด ์๋ ค์ค๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ๊ฐ์ candidate๋ค์ด ์ฐ๊ฒฐ์ ๊ฐ end์ ์ํด ๋ง๋ค์ด์ง๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์ ๋ก์ปฌ ์ ์ ์ ์๊ฒฉ ์ ์ ๊ฐ ์ฐ๊ฒฐ์ ์ํด ์ต๊ณ ์ ๋ฐฉ๋ฒ์ ์๋ก์ ๋์ํ์ ์ ํํ๊ธฐ ์ ๊น์ง ๊ณ์๋ฉ๋๋ค.
- ์ดํ์ webRTC๊ฐ ์ ํํ candidate๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ฒฐ์ ์๋ํ๊ฒ ๋ฉ๋๋ค.
3.4 ICE์์ STUN๊ณผ TURN ์๋ฒ๊ฐ ํ์ํ ์ด์
Peer A์์ Peer B๊น์ง ๋จ์ํ๊ฒ ์ฐ๊ฒฐํ๋ ๊ฒ์ผ๋ก๋ ์๋ํ์ง ์๋ ๊ฒ์ ๋ํ ์ด์ ๋ ๋ง์ด ์์ต๋๋ค.
- ์ฐ๊ฒฐ์ ์๋ํ๋ ๋ฐฉํ๋ฒฝ์ ํต๊ณผํด์ผํ๊ธฐ๋ ํ๊ณ ,
- ๋จ๋ง์ ํผ๋ธ๋ฆญ IP๊ฐ ์๋ค๋ฉด ์ ์ผํ ์ฃผ์๊ฐ์ ํ ๋นํด์ผํ ํ์๋ ์์ผ๋ฉฐ
- ๋ผ์ฐํฐ๊ฐ peer๊ฐ์ ์ง์ ์ฐ๊ฒฐ์ ํ์ฉํ์ง ์์ ๋์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆด๋ ์ดํด์ผํ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
ICE๋ ์ด๋ฌํ ์์ ์ ์ํํ๊ธฐ ์ํด STUN๊ณผ TURN ์๋ฒ ๋๋ค ํน์ ํ๋์ ์๋ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
STUN๊ณผ TURN์ ์์ธํ ๋ด์ฉ์ ๋ฐ๋ก ์ ๋ฆฌํ์ต๋๋ค. STUN, TURN ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ผ๋ฐ์ ์ผ๋ก Peer Connection์ ๊ฒฝ์ฐ๋ ํฌ๊ฒ 3๊ฐ์ง๋ค.
1. ๋์ผํ ๋ผ์ฐํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ.
- ๊ฐ์ ๋คํธ์ํฌ์ ์ ์๋์ด ์์ผ๋ฉด ๊ฐ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก๋ฅผ ์ฐพ์ ์ ์์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค
- STUN๊ณผ TURN์์ด๋ ๊ทธ๋ฅ Peer๊ฐ์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
2. ์๋ก ๋ค๋ฅธ ๋ผ์ฐํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ.
- STUN ์๋ฒ๋ ์ปดํจํฐ๊ฐ ๊ณต์ฉ IP์ฃผ์๋ฅผ ์ฐพ๊ฒ ํด์ค๋ค.
- ์์ ์ public IP์ฃผ์๋ฅผ ์์๋ด๊ธฐ ์ํด STUN ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
- ์์ ์ public IP์ฃผ์๋ฅผ ํ ๋๋ก ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ์ฅ์น๋ค์ด ์๋ก๋ฅผ ์ฐพ์ ์ ์๊ฒ ๋์ด PeerConnection์ด ๊ฐ๋ฅํด์ง๋ค.
3. STUN ์๋ฒ์์ ์ป์ public IP๋ก๋ ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
- ์ฐ๊ฒฐ์ ์ค์ฌํด์ค ์๋ฒ๊ฐ ํ์ํ๋ฉฐ, ์ด ์๋ฒ๋ TURN ์๋ฒ๋ผ ๋ถ๋ฅธ๋ค.
- ์ค์ฌ ์๋ฒ์ธ TURN ์๋ฒ๋ฅผ ํตํด PeerConnection์ด ์ด๋ฃจ์ด์ง๋ค.
Reference
WebRTC ํ๋กํ ์ฝ ์๊ฐ
The signaling server
ICE candidates ๊ตํ
RTCIceCandidate ์ธํฐํ์ด์ค
ICE ๊ณผ์ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์์ธํ ์๊ณ ์ถ๋ค๋ฉด
http://jaynewho.com/post/36
https://inspirit941.tistory.com/346
'SERVER > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ปNode.js์ ๋ ผ ๋ธ๋กํน IO, ์ฑ๊ธ์ค๋ ๋, ์ด๋ฒคํธ ๋ฃจํ (0) | 2022.06.29 |
---|---|
Block IO vs Non-Block IO & Sync vs Async (0) | 2022.06.28 |
๐๋์์ฑ๊ณผ ๋ณ๋ ฌ์ฑ (0) | 2022.06.11 |
๐Observer Pattern์ด๋? (0) | 2022.05.11 |
SOA, MSA ์ํคํ ์ฒ๋? (0) | 2022.05.10 |