[WebRTC 핵심 개념] STUN과 TURN 서버는 왜 필요할까? (NAT 방화벽과 P2P 통신)

실시간 음성 및 영상 통화(WebRTC)를 구현하다 보면 반드시 마주치는 개념이 있습니다. 바로 STUNTURN 서버입니다. 두 브라우저가 직접 데이터를 주고받는 P2P 통신인데, 왜 중간에 ‘서버’가 필요할까요? 그 이유를 네트워크의 근본적인 구조와 함께 아주 쉽게 알아보겠습니다.

1. P2P 통신의 이상과 현실 (NAT의 등장)

WebRTC는 서버를 거치지 않고 사용자 A와 사용자 B가 직접 데이터를 주고받는 통신 방식입니다. 서버 유지비용이 획기적으로 줄어들고 속도가 매우 빠르다는 장점이 있죠. 하지만 현실의 네트워크 환경은 생각보다 훨씬 가혹합니다.

전 세계의 기기 수는 IPv4 주소(약 43억 개)보다 훨씬 많습니다. 그래서 우리는 공유기(라우터)를 사용해 하나의 공인 IP를 여러 기기가 사설 IP로 쪼개어 나눠 씁니다. 이를 NAT(Network Address Translation)라고 부릅니다.

문제는 사설 IP(예: 192.168.0.2)로는 외부 인터넷에서 내 기기를 찾아올 수 없다는 것입니다. 서로의 주소를 모르는 상태에서는 P2P 직접 연결이 아예 불가능합니다.

2. STUN 서버: “내 진짜 주소가 뭐야?”

이 문제를 해결하기 위해 등장한 것이 STUN (Session Traversal Utilities for NAT) 서버입니다.

STUN 서버는 아주 단순한 거울 같은 역할을 합니다. 내 컴퓨터가 STUN 서버에 요청을 보내면, STUN 서버는 “너 방금 공유기 거쳐서 나한테 왔지? 공유기 밖에서 보이는 너의 진짜 공인 IP와 포트는 이거야!” 라고 알려줍니다.

  • 서로 STUN 서버를 통해 자신의 진짜 공인 IP를 알아냅니다.
  • 알아낸 주소를 서로 교환합니다.
  • 이제 진짜 주소를 알았으니, P2P로 직접 연결합니다!

3. TURN 서버: “도저히 길이 없으니 네가 대신 전해줘!”

STUN 서버 덕분에 모든 문제가 해결된 것 같지만, 세상에는 Symmetric NAT엄격한 기업용 방화벽처럼 보안이 매우 철저한 네트워크가 존재합니다. LTE/5G 모바일 네트워크 환경에서도 자주 발생하죠. 이런 환경에서는 공인 IP를 알아내도 외부에서의 직접 접속을 방화벽이 튕겨내 버립니다.

이럴 때 최후의 보루로 사용하는 것이 TURN (Traversal Using Relays around NAT) 서버입니다.

직접 연결(P2P)이 도저히 불가능할 때, 두 사용자는 공용 우체국 역할을 하는 TURN 서버에 데이터를 보냅니다. TURN 서버가 중간에서 데이터를 받아 상대방에게 전달해 주는 릴레이(중계) 역할을 합니다. 서버를 거치기 때문에 엄밀히 말하면 P2P가 아니게 되며, 트래픽 비용과 지연 시간이 발생하지만 어떤 환경에서도 무조건 연결을 보장한다는 엄청난 장점이 있습니다.

4. ICE (Interactive Connectivity Establishment)

WebRTC는 이 모든 과정을 ICE 프레임워크를 통해 자동으로 처리합니다. ICE는 두 기기가 연결될 수 있는 모든 경우의 수(직접 연결, STUN을 통한 연결, TURN을 통한 중계)를 수집하고, 가장 빠르고 효율적인 경로를 스스로 선택하여 통화를 연결시킵니다.

VoiceLink 서비스에서도 모바일 네트워크 등에서의 연결 실패율을 0%로 만들기 위해 자체 TURN 서버를 구축하였으며, 덕분에 어떠한 열악한 환경에서도 안정적인 통화 품질을 보장할 수 있게 되었습니다!

댓글 남기기