Skip to content

๐Ÿชต 2. WebRTC์—์„œ Websocket์œผ๋กœ

ssum1ra edited this page Dec 5, 2024 · 1 revision

๋ฌธ์ œ ์ƒํ™ฉ

1. ๋ฐฉํ™”๋ฒฝ ๋“ฑ์œผ๋กœ ์ธํ•œ TURN ์„œ๋ฒ„ ๊ฒฝ์œ 

WebRTC๋Š” P2P(peer-to-peer) ์—ฐ๊ฒฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐฉํ™”๋ฒฝ์ด๋‚˜ NAT(Network Address Translation) ์žฅ๋น„๋กœ ์ธํ•ด ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ์ฐจ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ WebRTC๋Š” TURN ์„œ๋ฒ„(Traversal Using Relays around NAT)๋ฅผ ๊ฒฝ์œ ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ณ„ํ•œ๋‹ค. TURN ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์‹  ์ „์†กํ•ด์ฃผ๋Š” ์ค‘๊ณ„ ์„œ๋ฒ„ ์—ญํ• ์„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ TURN ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ์„ฑ๋Šฅ ์ €ํ•˜: ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๊ฐ„ ์„œ๋ฒ„๋ฅผ ๊ฑฐ์น˜๋ฏ€๋กœ ์ง€์—ฐ(latency)์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๋Œ€์—ญํญ ์ œํ•œ: ์ค‘๊ณ„ ์„œ๋ฒ„ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋Œ€์—ญํญ(bandwidth)์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ€ํ•˜ ์ฆ๊ฐ€: ๋‹ค์ž๊ฐ„ ํ†ต์‹ ์—์„œ๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ TURN ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ, WebRTC๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ์ค‘์š”ํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ํšจ๊ณผ์ ์ด์ง€๋งŒ, ๋ฐฉํ™”๋ฒฝ ๋“ฑ์œผ๋กœ ์ธํ•ด TURN ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

2. ๋‹ค์ž๊ฐ„ ํ†ต์‹ ์—์„œ์˜ ์„ฑ๋Šฅ ์ €ํ•˜

WebRTC์˜ P2P ์—ฐ๊ฒฐ์€ ์†Œ์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹ ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, ์ธ์›์ด ๋งŽ์•„์ง€๋ฉด ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

  • ์—ฐ๊ฒฐ ์ˆ˜ ์ฆ๊ฐ€: ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ์„ ํ˜•์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ์™€ ๊ธฐ๊ธฐ์˜ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•œ๋‹ค.
  • TURN ์„œ๋ฒ„ ๋ถ€ํ•˜: ์ค‘๊ฐ„ ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•˜๋Š” ์—ฐ๊ฒฐ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ™”๋˜๊ณ  ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ, WebRTC๋Š” ๋Œ€๊ทœ๋ชจ ๋‹ค์ž๊ฐ„ ํ†ต์‹ ์—์„œ๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

3. ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์—์„œ์˜ ๋น„ํšจ์œจ์„ฑ

WebRTC๋Š” ์Œ์„ฑ ๋ฐ ๋น„๋””์˜ค์™€ ๊ฐ™์€ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ, ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”

  • ๋ณต์žกํ•œ ์—ฐ๊ฒฐ ์„ค์ •(STUN/TURN/ICE)์„ ํ•„์š”๋กœ ํ•˜๊ณ ,
  • ๋ฏธ๋””์–ด ์ „์†ก์— ๋งž์ถฐ ์„ค๊ณ„๋œ ๊ตฌ์กฐ๋กœ ์ธํ•ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค.

์™œ WebSocket์ด ๋” ๋‚˜์•˜์„๊นŒ?

1. ๊ตฌ์กฐ ๊ฐ„์†Œํ™” ๋ฐ ์„œ๋ฒ„ ๊ด€๋ฆฌ ์šฉ์ด

WebRTC๋Š” P2P ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ๋ณต์žกํ•œ ์„ค์ •๊ณผ TURN ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฐ˜๋ฉด, WebSocket์€ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์„œ๋ฒ„์—์„œ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์„ค์ •์ด ๊ฐ„๋‹จํ•ด ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ์ ˆ๊ฐ๋œ๋‹ค.

2. ์†๋„์™€ ์„ฑ๋Šฅ

WebSocket์€ ํ…์ŠคํŠธ, ๊ทธ๋ฆผ ๋“ฑ ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ ํ•ฉํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ๋‚ฎ์€ ์ง€์—ฐ: ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.
  • ํšจ์œจ์„ฑ: ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์ตœ์ ํ™”๋˜์–ด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฐ˜๋ฉด, WebRTC๋Š” ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์–ด ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

3. ํ™•์žฅ์„ฑ

WebSocket์€ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ ‘์†ํ•˜๋”๋ผ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ ๋‹ค.

  • ํ™•์žฅ ์šฉ์ด์„ฑ: ์„œ๋ฒ„ ํ™•์žฅ์„ ํ†ตํ•ด ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž ์ฒ˜๋ฆฌ: ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ๋กœ ๋„คํŠธ์›Œํฌ ๋ฐ ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ ์—†์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด, WebRTC๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ฒฐ๋ก 

WebRTC๋Š” ์Œ์„ฑ, ๋น„๋””์˜ค ๋“ฑ์˜ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์— ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฉํ™”๋ฒฝ ๋ฌธ์ œ, ๋‹ค์ž๊ฐ„ ํ†ต์‹ ์—์„œ์˜ ์„ฑ๋Šฅ ์ €ํ•˜, ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ๋น„ํšจ์œจ์„ฑ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ์ ํ•ฉํ•˜์ง€๋Š” ์•Š๋‹ค.

๋ฐ˜๋ฉด, WebSocket์€ ํ…์ŠคํŠธ, ๊ทธ๋ฆผ, ๊ฒŒ์ž„ ์ƒํƒœ์™€ ๊ฐ™์€ ๋น„๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ „์†ก์—์„œ ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ๋ฐฉํ™”๋ฒฝ ํ™˜๊ฒฝ์—์„œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ ์œผ๋ฉฐ,
  • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ฐธ์—ฌํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์ ์ธ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด WebRTC๋ฅผ, ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด WebSocket์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

๐Ÿ˜Ž ์›จ๋ฒ ๋ฒ ๋ฒ ๋ฒฑ

๐Ÿ‘ฎ๐Ÿป ํŒ€ ๊ทœ์น™

๐Ÿ’ป ํ”„๋กœ์ ํŠธ

๐Ÿชต ์›จ๋ฒ ๋ฒฑ ๊ธฐ์ˆ ๋กœ๊ทธ

๐Ÿช„ ๋ฐ๋ชจ ๊ณต์œ 

๐Ÿ”„ ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๋ก

๐Ÿ“— ํšŒ์˜๋ก

Clone this wiki locally