πŸ“Ή

WebRTCλŠ” μ–΄λ–»κ²Œ λ™μž‘ν•˜λ‚˜?

λΈŒλΌμš°μ € κ°„ 직접 μ˜μƒ/μŒμ„±/데이터 전솑

WebRTC(Web Real-Time Communication)λŠ” λΈŒλΌμš°μ € κ°„ P2P 톡신 ν‘œμ€€μž…λ‹ˆλ‹€. μ—°κ²° 수립 과정은 λ³΅μž‘ν•˜μ§€λ§Œ, 일단 μ—°κ²°λ˜λ©΄ μ„œλ²„λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  직접 λ―Έλ””μ–΄/데이터λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€. μ‹œκ·Έλ„λ§ μ„œλ²„(WebSocket λ“±)둜 SDP(μ„Έμ…˜ 기술)와 ICE candidateλ₯Ό κ΅ν™˜ν•˜κ³ , STUN μ„œλ²„λ‘œ 곡인 IPλ₯Ό μ•Œμ•„λ‚΄λ©°, 직접 연결이 λΆˆκ°€λŠ₯ν•˜λ©΄ TURN μ„œλ²„κ°€ μ€‘κ³„ν•©λ‹ˆλ‹€.

ꡬ쑰 λ‹€μ΄μ–΄κ·Έλž¨

μ‹œκ·Έλ„λ§ 단계 (μ—°κ²° μ€€λΉ„)
πŸ’»
Peer A
SDP Offer 생성
β‘  Offer
πŸ“‘
μ‹œκ·Έλ„λ§ μ„œλ²„
(WebSocket)
β‘‘ 전달
πŸ’»
Peer B
SDP Answer 생성
NAT 탐색 + P2P μ—°κ²°
πŸ’»
Peer A
λ‚΄ 곡인 IPλŠ”?
β‘’ STUN μš”μ²­
STUN
곡인 IP λ°˜ν™˜
β‘£ P2P 직접 μ—°κ²°!
ICE candidate κ΅ν™˜ → 졜적 경둜 선택
πŸ’»
Peer B
직접 μ—°κ²° λΆˆκ°€ μ‹œ? TURN μ„œλ²„ κ°€ λ―Έλ””μ–΄λ₯Ό 쀑계 (relay)
μ—°κ²° μ™„λ£Œ ν›„
πŸ’»
Peer A
μ˜μƒ μŒμ„± 데이터
↔ μ„œλ²„ 경유 없이 직접 전솑
πŸ’»
Peer B

λ™μž‘ 흐름

1

Peer Aκ°€ μ‹œκ·Έλ„λ§ μ„œλ²„μ— μ—°κ²° (WebSocket)

2

Peer Aκ°€ RTCPeerConnection 생성, SDP Offer 생성 ν›„ μ‹œκ·Έλ„λ§μœΌλ‘œ 전솑

3

Peer Bκ°€ SDP Offer μˆ˜μ‹ , SDP Answer 생성 ν›„ μ‹œκ·Έλ„λ§μœΌλ‘œ 응닡

4

μ–‘μͺ½μ΄ ICE candidateλ₯Ό μˆ˜μ§‘ (STUN μ„œλ²„λ‘œ 곡인 IP 확인)

5

ICE candidate κ΅ν™˜ β†’ 졜적 경둜 선택 β†’ P2P 직접 μ—°κ²° 수립

6

직접 μ—°κ²° λΆˆκ°€ μ‹œ TURN μ„œλ²„κ°€ λ―Έλ””μ–΄ 쀑계 (relay)

μž₯점

  • μ„œλ²„ λΉ„μš© μ΅œμ†Œν™” (P2P 직접 전솑)
  • μ €μ§€μ—° 톡신
  • λΈŒλΌμš°μ € λ‚΄μž₯ API
  • 별도 ν”ŒλŸ¬κ·ΈμΈ λΆˆν•„μš”

단점

  • μ‹œκ·Έλ„λ§ μ„œλ²„λŠ” 별도 ν•„μš”
  • NAT/λ°©ν™”λ²½ 문제 (STUN/TURN ν•„μš”)
  • TURN μ„œλ²„ λΉ„μš© (쀑계 μ‹œ)
  • λΈŒλΌμš°μ € ν˜Έν™˜μ„± 이슈

μ‚¬μš© 사둀

Google Meet / Zoom (μ›Ή 버전) λΈŒλΌμš°μ € 화상 톡화 ν™”λ©΄ 곡유 P2P 파일 전솑 μ‹€μ‹œκ°„ κ²Œμž„ (DataChannel)