Study: ComputerScience(CS)/CS: Network

[Network] WebRTC: ์›น ์ƒ ์˜ค๋””์˜ค, ๋น„๋””์˜ค ์‹ค์‹œ๊ฐ„ ์†ก์ˆ˜์‹  ํ”„๋กœํ† ์ฝœ

DrawingProcess 2023. 4. 17. 17:13
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” '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 ๋ฐฉ์‹์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๋ฐŸ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ P2P ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์— ๋™์˜
  2. ์„œ๋กœ์˜ ์ฃผ์†Œ๋ฅผ ๊ณต์œ 
  3. ๋ณด์•ˆ ์‚ฌํ•ญ ๋ฐ ๋ฐฉํ™”๋ฒฝ ์šฐํšŒ
  4. ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตํ™˜

์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” 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/

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•