Monday, August 28, 2023

WebRTC의 TURN 서버와 STUN 서버: 명확한 이해부터 실제 구축까지

제1장: WebRTC 소개

WebRTC, 또는 웹 실시간 통신,는 웹 브라우저와 모바일 애플리케이션에 실시간 통신을 간단한 API를 통해 제공하는 자유롭고 오픈 소스 프로젝트입니다. 이를 통해 오디오 및 비디오 통신이 웹 페이지 내에서 작동되며 플러그인 설치나 네이티브 앱 다운로드가 필요하지 않습니다.

WebRTC의 중요성

WebRTC의 주요 기능은 추가 소프트웨어나 플러그인을 필요로하지 않으면서 비디오 채팅을 지원한다는 것입니다. 이로써 음성 통화, 비디오 채팅 및 P2P 파일 공유 애플리케이션을 포함한 실시간 통신(RTC) 애플리케이션 개발에 탁월한 선택이 됩니다.

작동 원리

WebRTC는 여러 JavaScript API를 사용합니다:

  • MediaStream (getUserMedia): 오디오 및 비디오 데이터를 캡처합니다,
  • RTCPeerConnection: 오디오/비디오 통화를 설정합니다,
  • RTCDataChannel: 브라우저가 P2P를 통해 데이터를 공유할 수 있게 합니다.

이러한 API에 대해 더 자세히 알고 WebRTC 애플리케이션에서 어떻게 함께 작동하는지에 대한 정보는 공식 WebRTC 웹사이트의 상세 가이드에서 확인할 수 있습니다: 여기.

TURN/STUN 서버로의 엿보기

다음 장에서는 성공적인 RTC 애플리케이션의 두 가지 핵심 구성 요소인 TURN 및 STUN 서버에 대해 더 깊이 알아보겠습니다. 이러한 서버는 방화벽이나 NAT와 같은 네트워크 제약으로 인해 피어 간 직접 경로를 설정할 수 없을 때 정보를 중계하는 데 도움을 줍니다.

NAT? 방화벽? 걱정 마세요!

아직 이 용어에 익숙하지 않다면 걱정하지 마세요! 우리는 모든 단계를 하나씩 설명하여 초심자도 이러한 기술이 어떻게 함께 작동하는지 쉽게 이해할 수 있도록 하겠습니다.

다음에 어떤 내용이 나올지 간략히 살펴보기...

제2장에서는 TURN/STUN 서버를 더 자세히 살펴보겠습니다 - 이들이 정확히 무엇인지, RTC 애플리케이션에 왜 중요한지, 그리고 WebRTC 기술의 맥락 내에서 어떻게 작동하는지에 대해 조금 더 자세히 알아보겠습니다.

제2장: TURN 및 STUN 서버 이해

STUN 및 TURN 서버란?

WebRTC 세계에서 STUN (NAT를 위한 세션 탐색 유틸리티)TURN (NAT 주위의 릴레이 사용) 서버는 피어 간 원활한 통신을 보장하는 데 중요한 역할을 합니다. 이들은 방화벽 및 네트워크 주소 변환기(NAT)와 같은 네트워크 설정의 복잡성을 해결하는 데 도움을 줍니다.

STUN 서버의 역할

STUN 서버는 외부 네트워크 주소를 얻는 데 사용됩니다. 이는 NAT 뒤에 있는 장치의 공용 IP 주소를 찾아내는 데 도움을 줍니다. 대부분의 현실 세계 응용 프로그램은 이 서버 유형을 사용하여 클라이언트의 공용 IP 주소를 얻습니다.

예시

더 잘 이해하기 위해 예시를 들어보겠습니다: 두 명의 사람이 각각 다른 NAT 뒤에 있는 컴퓨터를 통해 통신하려고 시도한다고 상상해보세요. 여기서 STUN 서버는 각 컴퓨터가 공용 IP 주소를 찾아내어 서로 공유할 수 있도록 돕습니다.

TURN 서버의 역할

피어 간 직접 연결을 형성할 수 없는 경우 (대칭 NAT와 관련된 일반적인 문제), TURN 서버가 중개자 역할을 하여 모든 트래픽을 중계합니다.

예시

이전 예시를 이어서 설명하면: 두 컴퓨터 모두 STUN 서버에서 얻은 공용 IP를 사용하여 직접 통신을 수립하지 못할 경우 방화벽 제한이나 특정 유형의 NAT로 인해 - TURN 서버가 필요한 순간이 옵니다. 각 피어의 데이터는 목적지 피어에 도달하기 전에 이 중개자 (TURN 서버)를 통과하게 됩니다.

STUN과 TURN 서버의 차이점

본질적으로 두 서버 모두 다른 네트워크 조건에서 피어 간 통신을 수립하는 데 도움이 되지만, 역할이 크게 다릅니다:

  • STUN 서버: 주로 공용 IP 주소를 발견하는 데 사용됩니다,
  • TURN 서버: 직접 P2P 연결이 실패할 경우 중개자 역할을 합니다.

더 나아가기...

이제 이들 서버가 정확히 무엇이며 WebRTC 기술 맥락에서 왜 중요한지에 대해 어느 정도 이해하셨을 것으로 기대합니다. 다음 장에서는 이 서버가 어떻게 작동하는지 더 명확한 이해를 위한 몇 가지 예제를 제공하겠습니다!

제3장: 명확한 이해를 위한 예제

이 장에서는 STUN 및 TURN 서버가 WebRTC 맥락에서 어떻게 작동하는지 더 잘 이해하기 위해 몇 가지 예제를 살펴보겠습니다.

STUN 서버의 작동

두 피어, Alice와 Bob이 각각 자신의 NAT 뒤에 있다고 가정해보겠습니다. 그들은 WebRTC를 사용하여 서로 통신하려고 합니다. STUN 서버가 프로세스에 어떻게 도움을 주는지 살펴보겠습니다:

1. Alice는 STUN 서버에게 공용 IP 주소를 요청하는 요청을 보냅니다.
2. STUN 서버는 Alice의 공용 IP 주소로 응답합니다.
3. Alice는 이 정보를 Bob과 시그널링 서버를 통해 공유합니다.
4. 마찬가지로 Bob도 동일한 방법을 사용하여 공용 IP 주소를 얻고 Alice와 공유합니다.
5. 이제 두 피어는 서로의 공용 IP 주소를 알고 직접 통신을 시작할 수 있습니다!

참고:

이 프로세스는 특정 유형의 NAT (대칭 NAT와 같은) 또는 방화벽 제한 때문에 항상 성공적이지 않을 수 있습니다.

TURN 서버의 작동

위에서 언급한 이유로 직접 통신이 실패한 경우 TURN 서버가 사용됩니다:

1. Alice는 Bob에게 데이터를 직접 보내려고 시도하지만 방화벽 제한 또는 특정 유형의 NAT로 인해 실패합니다.
2. 이 경우, 그녀는 데이터를 대신 TURN 서버에 보냅니다.
3. TURN 서버는 그런 다음 이 데이터를 Alice에서 Bob으로 중계합니다.
4. 마찬가지로 Bob의 응답도 TURN 서버를 통해 Alice에게 도달하기 전에 동일한 경로를 통과합니다.
5. 이런 식으로 직접 P2P 통신이 네트워크 제약 때문에 불가능한 경우 중개자 (TURN 서버) 덕분에 피어 간 통신은 여전히 가능합니다!

참고:

릴레이 (TURN) 서버의 사용은 모든 트래픽이 그것을 통과해야 하므로 추가 지연을 도입할 수 있지만, 때로는 연결을 수립하는 데 필요합니다.

더 나아가기...

이 예제들이 당신이 이 서버들이 WebRTC 맥락에서 어떻게 작동하는지를 이해하는 데 도움이 되었기를 바랍니다! 다음 장에서는 실제로 STUN/TURN 서버를 어떻게 구축할 수 있는지에 대해 논의하겠습니다!

제4장: 실제 서버를 어떻게 구축할까요?

이 장에서는 오픈 소스 프로젝트인 coturn을 사용하여 자체 STUN 및 TURN 서버를 설정하는 방법을 안내합니다.

Coturn 설정하기

Coturn은 자체 TURN 및 STUN 서버를 설정하는 데 사용할 수 있는 무료 오픈 소스 프로젝트입니다. 그 신뢰성과 높은 설정 가능성으로 널리 사용됩니다.

1. 먼저, 서버 머신에 coturn을 설치하세요. 우분투를 사용하는 경우 다음 명령을 실행하면 됩니다:
   sudo apt-get install coturn

2. 설치가 완료되면 turnserver.conf 파일을 편집하여 서버를 구성해야 합니다.
   다음은 구성 파일의 예시입니다:

   listening-port=3478
   fingerprint
   lt-cred-mech
   use-auth-secret
   static-auth-secret=YOUR_SECRET_KEY_HERE (키로 대체)
   realm=yourdomain.com (도메인으로 대체)
   total-quota=100

참고:

이것은 데모 목적으로 매우 기본적인 설정입니다. 제품 환경에서는 고급 설정을 위해 공식 coturn 문서를 참조하세요.

서버 테스트하기

Trickle ICE나 Google에서 제공하는 WebRTC 샘플과 같은 도구를 사용하여 서버가 올바르게 작동하는지 테스트할 수 있습니다.

더 나아가기...

이 가이드가 자체 STUN/TURN 서버를 어떻게 설정하는지에 대한 이해를 돕기를 바랍니다! 좋은 연결 유지는 RTC 애플리케이션에 매우 중요하므로 이러한 서버가 올바르게 구성되었는지 확인하세요!

제5장: 결론

이 블로그 포스트에서는 WebRTC, STUN 및 TURN 서버의 개념 및 다양한 네트워크 조건에서 피어 간 통신을 수립하는 데 이들의 중요성을 다루었습니다. 또한 몇 가지 예제를 살펴보고 마지막으로 coturn을 사용하여 자체 STUN/TURN 서버를 설정하는 방법을 논의했습니다.

주요 포인트

  • WebRTC: 플러그인이나 소프트웨어 추가 설치 없이 웹 브라우저 간 실시간 통신을 가능케 하는 기술입니다.
  • STUN 서버: NAT 뒤에 있는 장치의 공용 IP 주소를 발견하는 데 사용됩니다.
  • TURN 서버: 네트워크 제약으로 인해 직접 P2P 연결이 실패할 경우 중개자 역할을 합니다.

더 나아가기...

이 가이드가 WebRTC 기술의 이러한 핵심 구성 요소에 대한 명확한 이해를 제공하는 데 도움이 되기를 바랍니다. 간단한 비디오 채팅 애플리케이션에서부터 복잡한 실시간 멀티플레이어 게임까지 - 이러한 개념을 철저히 이해하는 것이 중요합니다!


0 개의 댓글:

Post a Comment