ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring boot] WebRTC
    프로젝트/아카이뷰 2024. 1. 8. 22:49

    WebRTC 왜 궁금했을까❓

    - 팀 프로젝트로 WebRTC를 이용해서 취준생들을 위한 모의 면접 컨설팅 플랫폼을 기획했다.
    - 아직 기획만 나온 단계이지만 WebRTC를 사용해야만 하는 상황이어서 미리 학습해보려고 한다.

     

     

    WebRTC(Web Real-Time Communication)

     

    WebRTC

    An open framework for the web that enables Real-Time Communications (RTC) capabilities in the browser.

    webrtc.org

    공식 문서에서 보면 WebRTC는 Android, IOS Application, Web에서 Plugin, Third Party 설치 없이 동영상, 음성, 일반 데이터를 앱끼리 통신할 수 있도록 도와주는 기술이라고 설명한다.

     

    WebRTC Flow

    WebRTC의 전체적인 흐름을 나타낸 사진이지만 완전히 이해하기 위해서는 각 서버들의 역할에 대해 이해하고 있어야 할 것 같아서 각 서버들의 역할을 먼저 살펴보겠다.

     

    STUN / TURN 서버

    • WebRTC를 사용하려면 각 Peer들끼리 연결이 이루어져야 하는데 방화벽, NAT, DHCP로 인해 P2P 연결에 제약이 생긴다.
    • 이러한 문제점을 해결하는 과정을 NAT Traversal 이라고 지칭하며 STUN / TURN 서버를 통해 해결할 수 있다.

    STUN(Session Traversal Utilities for NAT) 서버

    • STUN 서버는 클라이언트의 공인 IP(Public IP)와 포트(Port)를 알려주는 서버
    • Client에서 STUN 서버로 요청을 보내어 공인 IP(Public IP)와 포트(Port)를 확인하고 이후 Signaling에서 사용
    • STUN 서버는 직접 구현해도 되지만 단순 정보만 제공으로 인해 트래픽이 낮아 Google에서 운영하는 무료 STUN Server를 사용해도 된다.
    • 하지만, 라우터마다의 정책이나 방화벽 등 요청 과정에서 제한이되어 Client 자신만의 주소를 찾기 못할 수도 있다. 이러한 경우를 해결하기 위해 TURN 서버가 존재한다.

    TURN(Traversal Using Relays around NAT) 서버

    • STUN 서버를 통해 연결 정보를 가져오지 못하는 경우에 우회하여 Peer간의 연결을 도와주는 서버
    • Peer간의 통신 채널을 중계하는 역할을 하며 이 경우에는 WebRTC의 특징인 P2P 방식에서 벗어나게 된다.
    • Peer간의 모든 트래픽을 중계하기 때문에 부하와 비용이 크게 발생한다.
    • 오픈 소스로 Coturn을 제공하고 있어 직접 구축해서 사용할 수 있다.

    Signaling Server

    ICE(Interactive Connectivity Establishment)

    • STUN / TURN 서버를 통해 획득한 IP 주소, 프로토콜, 포트로 구성된 연결가능한 네트워크 주소를 후보(Candidate)라고 한다.
    • 이러한 과정을 후보(Candidate) 과정이라고 하며, 후보들을 통해 3가지 정보를 얻을 수 있다.
    1. Client 본인의 Pivate IP 주소와 Port 번호
    2. Client 본인의 Pulbic IP 주소와 Port 번호(STUN, TURN 서버를 통해 획득)
    3. TURN 서버 IP 주소와 Port 번호(TURN 서버를 통해 획득)
    • 위의 정보를 통해 각 Client끼리 P2P 연결을 할 때 최적의 경로를 찾아주게 되는데 이때 사용되는 것이 ICE 프레임워크이다.

    SDP(Session Description Protocol)

    • 스트리밍 미디어의 해상도나 형식, 코덱 등의 멀티미디어 컨텐츠의 초기 인수를 기술하기 위한 프로토콜로 PUB / SUB 구조와 유사하다.
    • A Client가 미디어 스트림 교환을 요청하면 B Client로부터 응답을 기다리게 된다.
    • 만약, 응답을 수신하게 되면 각 Client들이 수집한 ICE Candidate 중에서 최적의 경로를 결정하고 협상하는 과정이 이루어진다.
    • 이후, 모든 메타 데이터, IP 주소 / 포트, 미디어 정보가 단말간의 합의가 완료되어 P2P 연결이 완전히 설정되고 활성화된다.
    • 추가적으로 각 Client에 의해 로컬 데이터 스트림의 End-Point가 생성되며 양방향 통신 기술을 사용하여 양방향으로 전송된다.
    • 이때, 보안 이슈로 인해 최적의 ICE를 찾지 못할 수도 있는데 이 경우에 Fall back으로 설정한 TURN 서버를 P2P 연결이 이루어진다.

    Signaling

    • 위 과정을 모두 묶어 Signaling이라고 하며 RTCPeerConnection 통신에 사용할 프로토콜, 채널, SDP, 데이터 전송 방법, 라우팅 정보와 NAT 통과 방법을 포함한 통신 규격을 교환하기 위해 두 장치의 제어 정보를 교환하는 과정을 뜻한다.
    • 이러한 정보들을 각 Client들에게 Relay 하는 역할을 하는 것이 Signaling Server이며 직접 구축하거나, 외부에서 제공하는 서버를 사용할 수 도 있다.
    • Socket을 활용하여 통신을 활용하여 직접 구축할 수 있으며 외부 제공으로는 Openvidu를 활용할 수 있다.

    추후, 프로젝트를 진행하며 실습 과정에 대해서 포스팅해볼 예정이다.

Designed by Tistory.