WebRTC : RTCDataChannel
RTCDataChannel์ ๊ฐ์
RTCDataChannel์ WebRTC (Web Real-Time Communication) API์ ๊ตฌ์ฑ ์์ ์ค ํ๋๋ก, ๋ธ๋ผ์ฐ์ ๊ฐ ๋๋ ํผ์ด ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํ๋ ์๋ฐฉํฅ ํต์ ์ฑ๋์ด๋ค. RTCDataChannel์ ๋น๋์ค, ์ค๋์ค ์คํธ๋ฆผ ์ธ์ ํ ์คํธ, ํ์ผ, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋๋ก ์ค๊ณ๋์๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ ์ ์ก์ ๋ฎ์ ์ง์ฐ์๊ฐ๊ณผ ๋์ ์ ๋ขฐ์ฑ์ ์๊ตฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
RTCDataChannel์ ์ด๊ธฐํ์ ์ค์
RTCDataChannel์ RTCPeerConnection ๊ฐ์ฒด๋ฅผ ํตํด ์์ฑ๋๋ค. RTCPeerConnection์ WebRTC์ ํต์ฌ ํด๋์ค ์ค ํ๋๋ก, ํผ์ด ๊ฐ์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๊ณ ๋ค์ํ ๋ฏธ๋์ด ๋ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ค์ ํ๋ ์ญํ ์ ํ๋ค. RTCDataChannel์ ์ด๊ธฐํํ ๋, ์ฌ์ฉ์๋ ํน์ ์ต์ ์ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฐ์ดํฐ ์ ์ก์ ํน์ฑ๊ณผ ์ฑ๋์ ๋์์ ์ํฅ์ ๋ฏธ์น๋ค.
ordered: ์ด ์ต์ ์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋ ์์๋๋ก ๋์ฐฉํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์
true์ด๋ฉฐ,false๋ก ์ค์ ํ๋ฉด ์์๊ฐ ๋ณด์ฅ๋์ง ์์ง๋ง ์ฑ๋ฅ์ด ํฅ์๋ ์ ์๋ค.maxPacketLifeTime: ์ด ์ต์ ์ ํจํท์ ์ต๋ ์๋ช ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ ์ํ๋ค. ํจํท์ด ์ด ์๊ฐ ๋ด์ ๋์ฐฉํ์ง ์์ผ๋ฉด ๋ฒ๋ ค์ง๋ค.
maxRetransmits: ์ด ์ต์ ์ ํจํท์ ์ฌ์ ์ก ํ์๋ฅผ ์ ํํ๋ค. ํน์ ํ์ ์ด์์ผ๋ก ํจํท์ ์ฌ์ ์กํ์ง ์๋๋ค.
protocol: ์ด ํ๋๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ฐ์ดํฐ ์ ์ก ํ๋กํ ์ฝ์ ๋ช ์ํ๋ค.
negotiated: ์ด ์ต์ ์ด
true๋ก ์ค์ ๋๋ฉด, RTCDataChannel์ ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์false๋ก ์๋ ํ์์ด ์ด๋ฃจ์ด์ง๋ค.id:
negotiated์ต์ ์ดtrue์ผ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์ฑ๋์ ๊ณ ์ ID๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์ ์๋ค.
RTCDataChannel์ ์ ์ก ๋ฐฉ์
RTCDataChannel์ ๋ฐ์ดํฐ ์ ์ก์ ์์ด UDP ๊ธฐ๋ฐ์ SRTP (Secure Real-time Transport Protocol) ๋๋ SCTP (Stream Control Transmission Protocol)์ ์ฌ์ฉํ๋ค. ํนํ SCTP๋ RTCDataChannel์์์ ์ ์ก์ ์ํด ์ฑํ๋ ํ๋กํ ์ฝ๋ก, ๋ค์ํ ์คํธ๋ฆผ์ ์ง์ํ๋ฉฐ ๋ฐ์ดํฐ ์ ์ก ์ค ์ผ๋ถ ํจํท์ด ์์ค๋๋๋ผ๋ ๋ค๋ฅธ ์คํธ๋ฆผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ์ค๊ณ๋์๋ค. SCTP๋ ๋ํ ์ ๋ขฐ์ฑ, ์์ ๋ณด์ฅ, ์ ์ก ์ค๋ฅ ์ฒ๋ฆฌ ๋ฑ TCP์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์ค์๊ฐ ์ ์ก ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ต์ ํ๋์ด ์๋ค.
RTCDataChannel์ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ ํ์ผ๋ก ๋๋ ์ ์๋ค:
ํ ์คํธ ๋ฐ์ดํฐ: ๋ฌธ์์ด ํ์์ ๋ฐ์ดํฐ๋ก, ๋ณดํต UTF-8๋ก ์ธ์ฝ๋ฉ๋ ํ ์คํธ ๋ฉ์์ง์ด๋ค.
๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ: ํ์ผ, ์ด๋ฏธ์ง, ์ค๋์ค ๋ฑ ๋ค์ํ ํํ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค. ์ด ๋ฐ์ดํฐ๋ ArrayBuffer๋ Blob ํํ๋ก ์ ์ก๋๋ค.
์ค๋ธ์ ํธ ๋ฐ์ดํฐ: JavaScript ๊ฐ์ฒด๋ฅผ JSON ํ์์ผ๋ก ์ง๋ ฌํํ์ฌ ์ ์กํ ์ ์๋ค.
RTCDataChannel์ ์ด๋ฒคํธ์ ํธ๋ค๋ฌ
RTCDataChannel์ ๋ค์ํ ์ด๋ฒคํธ๋ฅผ ํตํด ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ๋์ํ ์ ์๋๋ก ์ค๊ณ๋์๋ค. ๋ํ์ ์ธ ์ด๋ฒคํธ๋ก๋ open, message, bufferedamountlow, close, error ๋ฑ์ด ์๋ค.
open: ๋ฐ์ดํฐ ์ฑ๋์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฆฌ๋ฉด ๋ฐ์ํ๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก์ ์์ํ ์ ์๋ค.
message: ์๋ ํผ์ด๋ก๋ถํฐ ๋ฉ์์ง๊ฐ ๋์ฐฉํ์ ๋ ๋ฐ์ํ๋ค. ์์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ค.
bufferedamountlow: ์ ์ก๋ ๋ฐ์ดํฐ๊ฐ ํน์ ์๊ณ๊ฐ ์ดํ๋ก ๋ด๋ ค๊ฐ์ ๋ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ๋ณ๋ชฉ ํ์์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ดํ ์ ์๋ค.
close: ๋ฐ์ดํฐ ์ฑ๋์ด ์ ์์ ์ผ๋ก ๋ซํ ๋ ๋ฐ์ํ๋ค. ์ฑ๋ ์์์ ์ ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.
error: ๋ฐ์ดํฐ ์ ์ก ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ๋ฐ์ํ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ํ ํธ๋ค๋ฌ๋ฅผ ์ ์ํ ์ ์๋ค.
RTCDataChannel์ ๋ณด์
RTCDataChannel์์ ์ ์ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ DTLS (Datagram Transport Layer Security)๋ก ์ํธํ๋๋ค. DTLS๋ ๋ฐ์ดํฐ๊ทธ๋จ ์ ์ก์ ์ ํฉํ TLS์ ๋ณํ์ผ๋ก, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ, ์ธ์ฆ, ๊ธฐ๋ฐ์ฑ์ ๋ณด์ฅํ๋ค. ์ด๋ฌํ ์ํธํ ๊ณผ์ ์ ์ค๊ฐ์ ๊ณต๊ฒฉ(man-in-the-middle attack) ๋ฑ ๋ค์ํ ๋ณด์ ์ํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ค. ๋ํ, WebRTC ์์ฒด๊ฐ ๋ณด์์ ๋งค์ฐ ์ค์ํ๊ฒ ๋ค๋ฃจ๋ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์, RTCDataChannel์ ๋ณด์์ฑ๋ ๋งค์ฐ ๋์ ํธ์ด๋ค.
RTCDataChannel์ ์ํ ๋ชจ๋ํฐ๋ง๊ณผ ๊ด๋ฆฌ
RTCDataChannel์ ์ํ(state) ๊ด๋ฆฌ๋ฅผ ํตํด ์ฑ๋์ ํ์ฌ ์ํ๋ฅผ ์ถ์ ํ ์ ์๋ค. RTCDataChannel.readyState ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ฑ๋์ ํ์ฌ ์ํ๋ฅผ ์ ์ ์๋ค. ์ฃผ์ ์ํ๋ก๋ ๋ค์์ด ์๋ค:
connecting: ๋ฐ์ดํฐ ์ฑ๋์ด ์ค์ ์ค์ธ ์ํ๋ก, ์์ง ์ฌ์ฉํ ์ ์๋ค.
open: ๋ฐ์ดํฐ ์ฑ๋์ด ์ฑ๊ณต์ ์ผ๋ก ์ค์ ๋์ด ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ ์ํ์ด๋ค.
closing: ๋ฐ์ดํฐ ์ฑ๋์ด ๋ซํ๋ ์ค์ผ๋ก, ์ด ์ํ์์๋ ๋ ์ด์ ๋ฐ์ดํฐ ์ ์ก์ด ๋ถ๊ฐ๋ฅํ๋ค.
closed: ๋ฐ์ดํฐ ์ฑ๋์ด ์์ ํ ๋ซํ ์ํ๋ก, ๋ชจ๋ ํต์ ์ด ์ข ๋ฃ๋์๋ค.
์ด ์ธ์๋ bufferedAmount ํ๋กํผํฐ๋ฅผ ํตํด ํ์ฌ ๋๊ธฐ ์ค์ธ ๋ฐ์ดํฐ์ ์์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์ ์ก์ ํจ์จ์ฑ์ ๊ด๋ฆฌํ ์ ์๋ค.
๊ด๋ จ ์๋ฃ:
WebRTC 1.0: Real-Time Communication Between Browsers, W3C Editor's Draft, https://www.w3.org/TR/webrtc/
Data channels, MDN Web Docs, https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel
Last updated