OpenAI가 대규모 저지연 Voice AI를 제공하는 방법
How OpenAI delivers low-latency voice AI at scale
TL;DR Highlight
OpenAI가 9억 명 이상의 사용자에게 실시간 음성 AI를 제공하기 위해 WebRTC 스택을 어떻게 재설계했는지 설명하는 글로, relay + transceiver 분리 아키텍처의 설계 결정과 trade-off를 상세히 다룬다.
Who Should Read
실시간 음성/오디오 기능을 앱에 붙이려는 백엔드/인프라 개발자, 또는 WebRTC를 Kubernetes 환경에서 운영하면서 포트 관리나 라우팅 문제로 고생하고 있는 개발자.
Core Mechanics
- WebRTC는 브라우저·모바일·서버에 이미 구현된 표준 프로토콜이기 때문에 OpenAI가 선택했다. ICE(NAT 통과), DTLS/SRTP(암호화 전송), 코덱 협상, RTCP(품질 제어), 에코 캔슬링·지터 버퍼링 같은 저수준 처리를 직접 구현하지 않아도 된다는 게 핵심 이유다.
- 음성 AI에서 가장 중요한 특성은 오디오가 연속 스트림으로 도착한다는 점이다. 덕분에 사용자가 말하는 도중에도 모델이 동시에 전사·추론·도구 호출·음성 생성을 시작할 수 있고, 이게 '대화 느낌'과 '푸시투토크 느낌'의 차이를 만든다.
- 기존 WebRTC 서버 방식인 SFU(Selective Forwarding Unit)는 세션마다 별도 포트를 열어야 하는데, 이 '1포트 1세션' 모델이 OpenAI 인프라 규모에서 Kubernetes와 충돌하는 핵심 문제였다. 스테이트풀한 ICE/DTLS 세션이 특정 노드에 고정되어야 해서 수평 확장이 어렵다.
- 이를 해결하기 위해 relay + transceiver 분리 아키텍처를 설계했다. relay는 글로벌 엣지에 배치해 클라이언트와의 첫 번째 홉 지연을 최소화하고, transceiver는 내부 인프라에서 실제 미디어 처리와 모델 연결을 담당하는 방식으로 역할을 나눴다.
- 클라이언트 입장에서는 표준 WebRTC 동작을 그대로 경험하면서, 내부적으로는 패킷 라우팅 방식이 완전히 바뀐 구조다. ICE credential(연결 수립 시 교환하는 인증 토큰)을 기반으로 라우팅 결정을 내려 stateful 세션을 올바른 transceiver로 연결한다.
- 글로벌 relay와 지오스티어링(사용자 위치 기반 자동 라우팅) 시그널링을 조합해서, 전 세계 어디에서든 첫 번째 네트워크 홉이 가까운 relay로 연결되도록 설계했다. 이게 900만이 아닌 9억 명 규모에서 지연을 낮게 유지하는 핵심이다.
- 이 아키텍처를 구현하는 데 오픈소스 Go WebRTC 라이브러리인 Pion(https://github.com/pion/webrtc)을 활용했고, Pion 창시자인 Sean DuBois가 현재 OpenAI에 합류해 있다고 언급했다.
- 현재 Realtime API의 음성 모델은 GPT-4o 계열에 머물러 있어, 아키텍처 개선과 달리 모델 자체의 능력은 최신 frontier 모델 수준이 아닌 상황이다.
Evidence
- Pion 라이브러리 개발자가 직접 댓글을 달아 OpenAI가 사용 사실을 공개한 것에 감사를 표하며, WebRTC 입문 자료로 'WebRTC for the Curious(webrtcforthecurious.com)'를 추천했다.
- WebRTC + Kubernetes 게임 스트리밍 제품을 만든 경험자가 강한 반론을 제기했다. 'OpenAI가 설명한 문제들은 대부분 WebRTC 자체가 아니라 libwebrtc 구현의 문제'이며, 'libwebrtc의 feature flag를 올바르게 설정하면 Twilio 같은 유료 네트워크 우회 없이도 지연을 무료로 줄일 수 있다'는 주장이다. 또한 '99%의 일반 사용자 환경에서는 relay나 transceiver 없이도 Kubernetes에서 완전히 동작한다'고 했다.
- 저지연 자체가 UX 문제를 만든다는 사용자 경험이 공유됐다. 사람은 대화 중 자연스럽게 쉬는데, 시스템이 이 멈춤을 '발화 종료'로 인식해 끼어드는 문제가 있고, 단어를 찾느라 잠깐 멈추는 사람에게는 오히려 더 불편하다는 의견이다.
- OpenAI가 Realtime API용 오픈소스 Voice AI 파이프라인 프레임워크인 pipecat(https://github.com/pipecat-ai/pipecat)을 언급하지 않았지만, 댓글에서 '이 영역에 입문하려면 pipecat이 좋은 출발점'이라는 추천이 있었다.
- OpenAI가 이전에 사용하던 LiveKit 대신 직접 WebRTC 스택을 구축한 것이냐는 질문이 나왔고, 이에 대한 공식 답변은 없었지만 아키텍처 설명 자체가 자체 구축임을 시사한다는 맥락이 있었다.
How to Apply
- Kubernetes 환경에서 WebRTC 서버를 운영 중인데 1포트 1세션 문제로 스케일 아웃이 막힌다면, relay(엣지, stateless)와 transceiver(내부, stateful) 역할을 분리하고 ICE credential 기반으로 라우팅하는 패턴을 참고해 아키텍처를 재설계할 수 있다.
- 실시간 음성 AI 서비스를 빠르게 프로토타이핑하려면 직접 WebRTC 스택을 구현하기 전에 pipecat(https://github.com/pipecat-ai/pipecat)이나 Pion(https://github.com/pion/webrtc)을 먼저 검토하면 OpenAI 수준의 저수준 구현 없이 빠르게 시작할 수 있다.
- Voice AI의 '발화 종료 감지(end-of-turn detection)' 로직을 구현할 때, 단순 무음 타이머만 쓰면 사용자가 단어를 찾느라 잠깐 멈추는 경우에도 끊어버리는 문제가 생긴다. 이 글과 댓글을 참고해 silence threshold를 사용자 조정 가능하게 만들거나, 발화 중간 멈춤과 발화 종료를 구분하는 로직을 별도로 설계하는 것이 좋다.
- libwebrtc 기반으로 WebRTC를 운영 중이라면, 댓글에서 언급된 것처럼 feature flag 설정만으로 해결 가능한 지연 문제가 있을 수 있다. 유료 네트워크 우회 솔루션이나 복잡한 인프라 변경 전에 libwebrtc의 ICE candidate 관련 플래그 설정을 먼저 점검해볼 것.
Terminology
관련 논문
Swift로 LLM 학습시키기 Part 1: 행렬 곱셈을 Gflop/s에서 Tflop/s로 끌어올리기
Apple Silicon에서 Swift로 직접 행렬 곱셈 커널을 구현하며 CPU, SIMD, AMX, GPU(Metal)를 단계별로 최적화해 Gflop/s에서 Tflop/s 수준까지 성능을 높이는 과정을 상세히 설명한 글이다. 프레임워크 없이 LLM 학습의 핵심 연산을 밑바닥부터 구현하고 싶은 개발자에게 Apple Silicon의 성능 한계를 체감할 수 있는 드문 자료다.
fsync 없이 로컬 스토리지 엔진을 crash-consistent하게 만든 방법
FractalBits가 fsync 없이 SSD 전용 KV 스토리지 엔진을 구현해 동일 조건 대비 약 65% 높은 쓰기 성능을 달성한 설계 방법을 공유했다. fsync의 메타데이터 오버헤드를 피하기 위해 사전 할당, O_DIRECT, SSD 원자 쓰기 단위 정렬 저널을 조합한 구조가 핵심이다.
Google Chrome, 사용자 동의 없이 4GB AI 모델(Gemini Nano)을 몰래 설치
Google Chrome이 사용자 동의 없이 Gemini Nano 4GB 모델 파일을 자동 다운로드하고, 삭제해도 재다운로드되는 문제가 발견됐다. GDPR 위반 가능성과 수십억 대 기기에 적용될 때의 환경 비용 문제가 제기되고 있다.
Truncated Decoding Tree의 결정론적 탐색을 통한 효율적인 Test-Time Inference
Self-consistency의 중복 샘플링 낭비를 없애는 결정론적 트리 탐색 디코딩 기법 DLE로 수학/코드 추론 성능과 속도를 동시에 개선
GoModel – Go로 작성된 오픈소스 AI Gateway
OpenAI, Anthropic, Gemini 등 여러 AI 프로바이더를 하나의 OpenAI 호환 API로 묶어주는 Go 기반 오픈소스 AI 게이트웨이로, LiteLLM의 컴파일 언어 대안이다.
Claude Token Counter 업그레이드: 모델 간 토크나이저 비교 기능 추가
Claude Opus 4.7이 새 토크나이저를 도입하면서 같은 입력에 대해 최대 1.46배 더 많은 토큰을 소비한다는 사실이 확인됐고, 이는 사실상 40% 이상의 비용 인상 효과다.