-
webRTC 만들때 스턴(STUN)서버 와 턴(TURN)서버가 필요하다는데?! 근데 그게 뭐지???Study/WebRTC 2025. 5. 25. 01:30반응형
저번에 이어 webRTC 관련된 주제로 블로그 글을 쓰고 있는데,
요즘 같이 AI 로 검색하는 시대라 사람들이 기술 블로그를 굳이굳이 기록을 남기는 위함은 내 머리속에 조금이라도 남길 바라며
공부용 으로 기록함....
일단 저번에 이어 webRTC에 대해서 계속 블로그 글을 쓰고 있음.
혹시 webRTC 구현 방법이 궁금하면 아래 링크 참고하시길...
https://cbn1218.tistory.com/70
초보자도 간단하게 만들어 보는 영상통화 기능(webRTC로 영상통화 만들기)
저번 시간에 이어 webRTC에 대해서 배웠다면 간단하게 영상통화 기능을 만들어 보는 방법을 공유할려함.혹시 webRTC를 모른다 하면 아래 링크 ㄱㄱ https://cbn1218.tistory.com/68 초보자도 이해 가능한 WebR
cbn1218.tistory.com
webRTC로 실시간 통신을 할때 피어 투 피어(P2P) 연결 전에 서로의 ICE 정보 교환 하는 과정이 있는데
이때 TURN 서버와 STUN 서버 의 정보를 교환을 한뒤에 피어 투 피어(P2P) 직접 연결이 되어 영상 과 오디오 스트림을 브라우져 대 브라우져 끼리 직접 연결을 주고 받음
그렇다면 왜??? TURN 서버와 STUN 서버 정보를 교환 하는 과정을 거칠까?
그 이유는 NAT(Network Address Translation) 환경 과 방화벽 때문임.
so what??
대부분의 사용자는 공유기나 회사 네트워크 같은 NAT(Network Address Translation) 환경 에 있음.
여기서 간단히 NAT(Network Address Translation) 환경 을 설명하자면 로컬 IP (192.168.x.x, 10.x.x.x 등) 를 공인 IP/포트로
변환해 인터넷과 통신할 수 있게 하는 네트워크 기술중 하나인데,
외부에서 통신할때 자신의 로컬 IP (192.168.x.x, 10.x.x.x 등) 만 아는 클라이언트는 공유기 나 라우터를 통해 공인IP/포트를 할당 받아 외부와 통신을 하기 때문에 로컬장치는 결과적으로 공인 IP/포트 를 모르는 문제가 있다는점!!!
그래서 STUN 서버에게 요청하여 자신의 공인 IP/포트를 알아낼수 있음.
알아낸 공인 IP/포트는 WebRTC 연결 후보로 쓰이며, 상대방에게 전달되어 직접 연결(P2P)을 시도하는 데 사용됨.
그렇다면 STUN서버만 있으면 됐지, 왜??? TURN 서버가 필요해?
여러가지 이유가 존재하는데 결과적으로 STUN서버로만 연결이 불가능한 경우도 있다는 사실!!!
불가능한 경우1 - 대칭 NAT (Symmetric NAT) 일경우
대칭 NAT의 경우 통신 상대마다 외부 포트를 다르게 지정하여 STUN 서버를 통해 알게된 포트와 매칭이 안되어
서로 연결이 불가함
불가능한 경우2 - 방화벽이 모든 외부 연결을 차단
불가능한 경우3 - 양쪽 모두 NAT 뒤에 있는 경우
대부분의 NAT는 외부에서 먼저 오는 연결을 거부하고 내가 먼저 보낸 요청에 대한 응답만 허용함.
그래서 하나의 클라이언트만 NAT환경에 있다면 내가 먼저 요청을 보내어 연결을 시도하면 되지만
둘다 NAT환경에 있을 경우 서로 외부에서 오는 연결을 거부하여 서로 핑퐁 치다가 연결이 안됨.
그래서 TURN서버 가 필요함.
그렇다면 TURN 서버는 어떻게 동작해??
TURN서버는 중계역할 역할을 해주는 중계사 임.
[Client A] ←→ TURN 서버 ←→ [Client B]
TURN 서버는 양쪽 클라이언트와 각각 연결을 맺고 모든 오디오/비디오/데이터를 중계 함.
즉, P2P가 아니라 Relay 방식으로 통신 함.
대부분의 NAT/방화벽은 외부에서 먼저 들어오는 연결은 막고 내부에서 먼저 나간 연결은 허용하기 때문에
클라이언트가 먼저 요청을 하여 TURN 서버와 연결을 시도하면 내부 → 외부 연결이므로 NAT나 방화벽은 이를 허용하기 때문에
각각의 클라이언트가 TURN 서버와 연결후 중간에서 TURN 서버가 각각 데이터를 주고 받을 수 있게 해줌.
실제 프로젝트를 나가게 되면 종종 스턴서버와 턴서버에 대해서 듣게 되는거 같음.
이 부분에 대해서 간단하게라도 알고 있다면 프로젝트 나갈때 도움이 되지 않을까 싶음!
반응형'Study > WebRTC' 카테고리의 다른 글
http 접속시 getUserMedia 오류 카메라 오디오 기능을 못 가져와요 (0) 2025.05.22 초보자도 간단하게 만들어 보는 영상통화 기능(webRTC로 영상통화 만들기) (4) 2025.05.20 시그날링 서버 (Signaling Server)란 무엇인가?? (0) 2025.04.13 초보자도 이해 가능한 WebRTC 에 대해서 알아보자 (0) 2025.04.12