OpenAI는 ChatGPT 출시 이후 폭발적인 사용자 증가에 대응하기 위해 PostgreSQL 데이터베이스 인프라를 대대적으로 확장하고 최적화해왔습니다. 이 기술 보고서는 단일 프라이머리 아키텍처만으로 8억 명의 사용자를 지원하며 초당 수백만 건의 쿼리를 처리할 수 있게 된 과정을 상세히 설명합니다.
1. 독특한 스케일링 구조: 읽기 중심 워크로드 최적화
OpenAI는 단 하나의 프라이머리 Azure PostgreSQL Flexible Server 인스턴스를 핵심으로 유지하고, 여기에 여러 지역에 걸쳐 약 50개의 읽기 복제본(read replicas)을 추가하는 독특한 아키텍처를 구축했습니다. 이러한 구조 덕분에 시스템은 대부분의 트래픽이 발생하는 '읽기 중심 워크로드(read-heavy workloads)'에 매우 효과적으로 대응할 수 있습니다.
하지만 이처럼 거대한 규모에서 운영되는 데이터베이스는 여러 가지 복잡한 과제에 직면합니다. 예를 들어, 캐싱 계층 실패로 인한 대규모 캐시 미스(cache misses)나 비용이 많이 드는 다중 테이블 조인(multi-way joins) 급증 같은 업스트림 이슈가 발생하면 데이터베이스 부하가 갑자기 치솟아 서비스 전체의 지연 시간(latency)을 증가시키고 요청 타임아웃을 유발하는 악순환에 빠질 수 있습니다.
2. 쓰기 중심 워크로드와 MVCC의 한계 극복
PostgreSQL은 읽기 작업에는 강점을 보이지만, 데이터베이스가 지속적으로 업데이트되는 '쓰기 중심 워크로드(write-heavy workloads)'에서는 근본적인 어려움을 겪습니다. 이는 PostgreSQL의 핵심 메커니즘인 다중 버전 동시성 제어(Multi-Version Concurrency Control, MVCC) 때문입니다. MVCC는 데이터를 수정할 때 전체 행을 복사하여 새 버전을 만드는 방식이어서, 쓰기 부하가 클 경우 상당한 **쓰기 증폭(write amplification)**을 초래합니다. 또한, 읽기 쿼리조차 최신 버전을 찾기 위해 여러 버전의 데이터(dead tuples)를 스캔해야 하므로 성능 저하를 야기합니다.
이러한 한계를 극복하기 위해 OpenAI는 샤딩(sharding)이 가능한 쓰기 중심 워크로드를 Azure Cosmos DB와 같은 전용 분산 시스템으로 적극적으로 마이그레이션하고 있습니다. 또한, 애플리케이션 레벨에서도 중복 쓰기를 유발하는 버그를 수정하거나 적절한 경우 지연 쓰기(lazy writes)를 도입하여 프라이머리에 가해지는 쓰기 압력을 최소화했습니다.
3. 단일 프라이머리를 고수하는 이유와 향후 계획
OpenAI는 현재까지도 기존의 PostgreSQL 인스턴스를 샤딩하지 않고, 모든 쓰기 트랜잭션이 하나의 프라이머리 인스턴스로 집중되도록 유지하고 있습니다. 그 주된 이유는 이미 수백 개의 애플리케이션 엔드포인트를 수정해야 하는 샤딩 작업은 너무 복잡하고 시간이 오래 걸려 단기적인 우선순위가 아니기 때문입니다. 대신, 광범위한 최적화와 읽기 전용 아키텍처를 통해 현재의 시스템이 충분한 여유 공간(headroom)을 확보했다고 판단했습니다.
결론적으로, OpenAI는 PostgreSQL의 장점을 최대한 활용하는 동시에, 그 한계가 명확한 영역(쓰기 중심 워크로드)은 전문 분산 시스템으로 분리하여 하이브리드 아키텍처를 구축함으로써 8억 사용자 규모의 트래픽을 안정적으로 처리하고 있습니다. 이는 대규모 서비스에서 데이터베이스의 특성을 이해하고, 각 워크로드에 맞는 최적의 저장소를 선택하는 것이 얼마나 중요한지를 보여주는 사례입니다.