OpenAI, Realtime API WebRTC 트랙 정식 GA—음성 에이전트 레이턴시 대폭 단축
OpenAI가 Realtime API의 WebRTC 전송 트랙을 정식 일반 공개(GA)하며, 브라우저·모바일 앱에서 서버 릴레이 없이 직접 음성 스트림을 처리할 수 있게 됐다. 기존 WebSocket 방식 대비 왕복 지연(RTT)이 평균 30% 이상 감소해, 실시간 음성 에이전트·인터뷰 봇·콜센터 자동화 서비스 개발이 한층 쉬워졌다.
무엇이 바뀌었나
OpenAI Realtime API는 기존에 WebSocket 기반 서버-릴레이 아키텍처만 지원했다. 이번 GA로 WebRTC 트랙이 정식 프로덕션 등급으로 승격되면서, 클라이언트(브라우저·iOS·Android)가 OpenAI 미디어 서버와 직접 P2P에 가까운 방식으로 오디오 스트림을 교환할 수 있다. 개발자는 별도 WebSocket 릴레이 서버를 운영하지 않아도 되므로 인프라 비용과 유지 부담이 줄어든다.
공식 문서에 따르면 WebRTC 트랙 사용 시 평균 왕복 지연이 WebSocket 대비 약 30~40% 단축되며, 네트워크 혼잡 상황에서 적응형 비트레이트(ABR) 조절이 자동 적용된다.
한국 개발자에게 미치는 영향
1. 음성 에이전트·챗봇: 콜센터 자동화, 음성 기반 CS 봇을 구축하는 팀은 기존 릴레이 서버 레이어를 제거할 수 있어 아키텍처가 단순해진다.
2. 브라우저 기반 인터뷰·교육 서비스: RTCPeerConnection 표준 API를 그대로 활용하므로, 별도 SDK 없이 바닐라 JavaScript로도 통합 가능하다.
3. 모바일 앱: iOS WebKit, Android Chrome 모두 WebRTC를 네이티브 지원하므로, React Native·Flutter 환경에서도 WebView 없이 직접 연동할 수 있다.
가격은 기존 Realtime API 오디오 입출력 토큰 단가와 동일하게 적용되며, 정확한 수치는 공식 페이지 참조.
빠른 시작 예시 (JavaScript)
// 1. Ephemeral 토큰 발급 (서버 사이드)
const { token } = await fetch('/api/realtime-token').then(r => r.json());
// 2. WebRTC PeerConnection 생성
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
stream.getTracks().forEach(t => pc.addTrack(t, stream));
// 3. OpenAI Realtime WebRTC 엔드포인트로 SDP Offer 전송
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const sdpResp = await fetch(
'https://api.openai.com/v1/realtime/webrtc',
{
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/sdp',
},
body: offer.sdp,
}
);
await pc.setRemoteDescription({ type: 'answer', sdp: await sdpResp.text() });
위 흐름만으로 음성 입출력 스트림이 개통되며, 기존 Realtime API의 세션 이벤트(response.audio.delta 등)는 DataChannel을 통해 동일하게 수신된다.
주의사항 및 제한
- Ephemeral 토큰 유효시간: 현재 60초로 고정되어 있어, 세션 갱신 로직을 클라이언트에 반드시 구현해야 한다.
- 동시 세션 한도: 기존 WebSocket 세션과 동일한 계정별 동시 접속 한도가 적용된다.
- TURN 서버: 방화벽 환경(기업망, 일부 한국 ISP)에서는 ICE Candidate 협상이 실패할 수 있으므로, 자체 TURN 서버 또는 클라우드 TURN 서비스를 준비하는 것을 권장한다.