openai

openai 실시간 api 현황 (2025/1/2) webrtc와 websocket

jinmc 2025. 1. 2. 10:37
반응형

2024년 10월 1일에 openai에서 실시간 streaming api를 출시하였습니다. https://openai.com/index/introducing-the-realtime-api/ 정확한 내용은 websocket을 이용한 방식이며, 오디오 스트리밍을 제공한다고 합니다. 가격은 다음과 같습니다.

$2.50/1M cached text input tokens and $20/1M cached audio input tokens

사실 비싼건지 싼건지 그렇게 감이 오지는 않네요. 써봐야지 알 것 같긴 하지만 스케일링 하기엔 좋지 않아보이긴 합니다.

그리고.. 2024년 12월 17일 WebRTC 업데이트를 발표합니다.

정확한 사항은 아래 링크를 참고하면 될 거 같습니다. https://platform.openai.com/docs/guides/realtime-webrtc standard api key를 활용해서 임시 키를 발급받고 임시 키를 사용해서 세션을 유지하는 형식으로 보입니다. 기존의 서버에서 서버로의 통신 뿐만 아니라, frontend에서 client 와 서버간의 통신을 할 수 있다는 면에서 실질 customer experience에서는 엄청난 차이를 보일 것으로 생각됩니다.

그럼 WebRTC와 WebSocket의 차이는 무엇일까요? ChatGPT한테 물어봤습니다.

 

더보기

 

WebRTC와 WebSocket은 모두 실시간 통신을 위해 사용되는 기술이지만, 용도와 작동 방식이 다릅니다. 아래에 차이점을 정리해 봤습니다:


1. 주요 목적

  • WebRTC (Web Real-Time Communication)
    • 브라우저 간 P2P(peer-to-peer) 통신을 지원하기 위해 설계되었습니다.
    • 주로 오디오, 비디오 스트리밍이나 낮은 지연 시간을 요구하는 데이터 전송(예: 파일 공유, 게임 데이터) 등에 사용됩니다.
  • WebSocket
    • 클라이언트와 서버 간의 양방향 통신을 가능하게 합니다.
    • 주로 텍스트 기반 데이터중앙 서버와의 실시간 동기화가 필요한 채팅, 알림 시스템 등에 사용됩니다.

2. 연결 방식

  • WebRTC
    • 브라우저 간 직접 연결을 위해 P2P 네트워크를 형성합니다.
    • STUN/TURN 서버를 이용해 네트워크 방화벽을 넘거나 공용 IP를 찾아내는 작업이 필요합니다.
    • 연결이 성립되면, 데이터를 직접 주고받기 때문에 서버 부하가 적고 지연이 낮습니다.
  • WebSocket
    • 클라이언트와 서버 간 Persistent TCP 연결을 유지합니다.
    • 중앙 서버가 모든 데이터를 관리하고 중계합니다.
    • NAT/방화벽 문제를 걱정할 필요가 없으며, 비교적 설정이 간단합니다.

3. 데이터 전송

  • WebRTC
    • 미디어 스트리밍에 최적화되어 있어 고속의 바이너리 데이터 전송에 유리합니다.
    • 데이터 채널을 통해 일반 데이터(텍스트, 파일)도 전송 가능합니다.
    • UDP 기반으로 설계되어 낮은 지연 시간(Latency)을 제공합니다.
  • WebSocket
    • 텍스트 또는 바이너리 메시지 전송에 적합합니다.
    • TCP 기반으로 안정성이 높으며, 순서가 중요한 데이터에 적합합니다.

4. 주된 사용 사례

  • WebRTC
    • 화상 통화 (예: Google Meet, Zoom)
    • 실시간 P2P 파일 전송
    • 실시간 게임 및 센서 데이터 전송
  • WebSocket
    • 채팅 애플리케이션 (예: Slack, Discord)
    • 실시간 알림 시스템
    • 금융 데이터 스트리밍 (주식 시세 등)

5. 네트워크 아키텍처

  • WebRTC
    • 주로 P2P 아키텍처를 사용하지만, 네트워크 문제를 해결하기 위해 TURN 서버를 사용할 경우 서버가 데이터 중계에 관여할 수 있습니다.
  • WebSocket
    • 항상 클라이언트-서버 아키텍처를 사용하며, 모든 데이터는 서버를 통해 중계됩니다.

결론: 언제 어떤 기술을 사용할까?

  • WebRTC:
    • 지연 시간이 낮고 대역폭이 큰 미디어 스트리밍 또는 P2P 연결이 필요한 경우.
    • 서버 부하를 줄이고 싶을 때.
  • WebSocket:
    • 중앙 집중형 데이터 관리가 필요하고, 연결 상태 유지 및 텍스트/이벤트 기반 실시간 동기화가 필요한 경우.
    • 구현과 유지 관리가 상대적으로 단순한 경우.

예시로 비교

  • WebRTC:
    • "화상 통화를 하면서 파일을 바로 보내는 앱"
  • WebSocket:
    • "채팅방에서 메시지와 알림을 실시간으로 주고받는 앱"

이 두 기술은 필요에 따라 함께 사용할 수도 있습니다. 예를 들어, WebRTC로 미디어를 전송하면서 WebSocket으로 신호 제어(signaling) 데이터를 주고받는 경우가 많습니다.

한마디로, 채팅 어플에는 websocket을 쓰고, webRTC로는 비디오나 오디오통신을 쓰라고 합니다. webSocket은 tcp 형식이라서, low-latency 통신은 잘 못한다고 하는군요. openai에서 기존의 가격의 10분의 1로 싸게 내놨다고 하니깐, 사용하는것이 기존보다는? 싸질 것이라고 생각합니다. 그래도 scaling은 쉽지 않겠지만요.

 

Realtime model로 무엇을 할 수 있을지에 대해서는 다음 openai 글을 참고 바랍니다. https://platform.openai.com/docs/guides/realtime-model-capabilities

반응형