OpenAI 인프라
10억 사용자를 버틴 저장소는 기능보다 예측 가능성을 택했습니다
OpenAI Habitat은 주간 10억 명 이상이 사용하는 제품을 지원하며 초당 7천만 요청과 500페타바이트 이상의 데이터를 처리합니다. 공식 엔지니어링 글을 기준으로 Python에서 Rust까지 확장한 설계 선택을 정리합니다.
이 글에서 다룰 내용
Habitat의 탄생 배경, Python 서비스 확장법, 연결 최적화, Rust 전환, 대규모 분산 스토리지 설계 원칙
챗GPT 뒤에서 움직이는 거대한 데이터 시스템
ChatGPT에서 새 대화를 시작하거나 로그인하고, Codex 설정을 확인하는 행동은 단순해 보입니다. 하지만 화면에 결과가 나타나기 전까지 뒤에서는 여러 차례의 데이터 조회가 일어납니다.
이 요청이 느리면 서비스 전체가 느리게 느껴지고, 실패하면 기능도 멈춥니다. OpenAI Habitat은 이러한 온라인 데이터를 빠르고 안정적으로 읽고 쓰기 위해 만들어진 플랫폼입니다.
이 글에서 다룰 내용
Habitat의 탄생 배경, Python 서비스의 확장 방법, 분산 스토리지 구조, 초당 7천만 요청을 처리한 설계 원칙
현재 Habitat은 ChatGPT 10억 사용자 시대를 지탱하는 핵심 AI 인프라로 성장했습니다. 주간 10억 명 이상이 이용하는 제품을 지원하며, 거의 40개 지역에 걸쳐 500페타바이트가 넘는 데이터를 다룹니다.
작은 Python 라이브러리에서 시작된 Habitat
Habitat은 2023년 DevDay에서 GPTs를 지원하기 위해, ChatGPT의 메인 서버와 Azure Cosmos DB를 연결하는 작은 Python 라이브러리로 출발했습니다. 제품 개발자가 복잡한 데이터베이스 운영을 직접 고민하지 않도록 만드는 것이 목표였습니다.
개발자는 데이터를 저장하거나 가져오는 간단한 명령만 사용하면 됐습니다. 스키마 확인, 라우팅, 권한 검사, 암호화, 직렬화, 요청 제어, 연결 풀링은 Habitat이 대신 처리했습니다.
문제는 이용하는 서비스가 늘면서 나타났습니다. 공용 라이브러리를 변경할 때마다 수십 개 서비스가 새로운 버전을 배포해야 했고, 오래된 클라이언트 하나가 전체 장애의 불씨가 될 수도 있었습니다.
OpenAI는 결국 저장소 로직을 독립 서비스로 분리했습니다. 덕분에 배포와 모니터링, 접근 제어, 감사 로그, 보안 정책을 한곳에서 관리할 수 있게 됐습니다.
라이브러리에서 중앙 서비스로의 전환은 Habitat 확장의 중요한 분기점이었습니다. 여러 팀이 각자 업데이트하던 구조를 하나의 통제 지점으로 바꾸면서 변화의 속도와 안정성을 함께 확보한 것입니다.
Python 서비스로 대규모 트래픽을 버틴 방법
Python은 개발 속도가 빠르지만 고성능 서버를 운영할 때는 CPU와 메모리 비용이 커질 수 있습니다. 특히 asyncio는 입출력 작업을 동시에 처리하는 데 유용하지만, GIL의 제약 때문에 CPU 병렬 처리까지 해결해 주지는 않습니다.
Habitat은 라우팅뿐 아니라 압축, 암호화, 체크섬, 상태 확인과 같은 CPU 작업도 수행했습니다. 이벤트 루프가 바빠지면 저장소의 응답은 이미 도착했는데 코루틴이 다시 실행되지 못해 지연되는 현상도 발생했습니다.
OpenAI는 프로세스 하나가 담당하는 동시 요청 수를 낮추고, 대신 Python 서비스 프로세스를 대규모로 늘리는 방식을 선택했습니다. CPU 사용률만 보는 것이 아니라 이벤트 루프의 예약 지연까지 실시간으로 측정했습니다.
백그라운드 작업이 동시에 실행되지 않도록 주기를 분산하고, 불필요하게 큰 설정 파일도 줄였습니다. 작은 작업이 한꺼번에 몰려 꼬리 지연을 키우는 상황을 차단한 것입니다.
다만 정확히 구분할 부분도 있습니다. Python 버전이 정점에서 처리한 규모는 초당 2천만 건 이상이었고, 현재의 초당 7천만 요청은 이후 Rust 전환까지 포함한 Habitat 전체 플랫폼의 성과입니다.
연결 하나까지 최적화한 분산 스토리지
대규모 시스템에서는 연결을 재사용하는 방식도 장애를 만들 수 있습니다. Habitat은 Python aiohttp의 LIFO 방식이 느려진 서버에 새 요청을 반복해서 보내는 악순환을 발견했습니다.
이를 FIFO 방식으로 바꾸자 부하가 서버 사이에 더 고르게 분산됐습니다. 현재는 Istio와 Envoy를 활용해 서버 상태를 고려한 로드밸런싱과 연결 풀링을 수행합니다.
Envoy는 Python의 HTTP/1 연결을 HTTP/2로 전환해 하나의 연결로 여러 요청을 처리하도록 돕습니다. 속도 제한과 서킷 브레이커도 중앙에서 적용해 하위 저장소가 갑작스러운 연결 폭증에 무너지지 않도록 보호합니다.
Habitat의 분산 스토리지 구조는 Azure Cosmos DB, 캐시, 블롭 스토리지와 변경 데이터 캡처 시스템을 하나의 플랫폼 계층으로 묶습니다. 사용자는 실제 데이터가 어느 저장소와 지역에 있는지 몰라도 같은 방식으로 접근할 수 있습니다.
강력한 기능보다 예측 가능성을 선택하다
Habitat은 임의의 SQL이나 복잡한 조인을 허용하지 않습니다. 객체와 객체 사이의 직접적인 관계를 다루는 제한된 NoSQL API를 제공해 요청 한 건에 필요한 작업량을 예측할 수 있게 만들었습니다.
복잡한 쿼리는 편리하지만 잘못 사용하면 대규모 테이블 검색과 과도한 부하를 유발합니다. Habitat은 온라인 요청을 단순하게 유지하고, 분석이나 검색이 필요한 작업은 변경 데이터를 별도의 시스템으로 보내 처리합니다.
이처럼 단순한 기본 경로와 복잡한 작업의 분리는 대규모 시스템 설계에서 중요한 원칙입니다. 모든 기능을 하나의 저장소에 몰아넣기보다 트래픽 특성에 따라 역할을 나누는 편이 확장성과 장애 격리에 유리합니다.
500페타바이트 시대가 보여준 설계의 본질
OpenAI Habitat의 사례는 처음부터 완벽한 기술을 선택해야만 성공하는 것은 아니라는 점을 보여줍니다. OpenAI는 Python의 한계를 알고도 제품 개발과 플랫폼 안정화를 먼저 해결한 뒤, 2026년 2분기에 엔지니어 2명과 Codex·GPT-5.5를 활용해 핵심 서비스를 Rust로 다시 작성했습니다.
OpenAI 발표 기준 Rust 서비스는 현재 프로덕션 요청의 95%를 처리합니다. Python 버전보다 CPU 효율은 6배, 메모리 효율은 15배 높아졌지만, 이 수치는 Habitat의 특정 내부 서비스 전환 결과로 제한해 해석해야 합니다.
결과적으로 Habitat은 약 3년 만에 단일 데이터베이스를 연결하던 라이브러리에서 500페타바이트 이상의 데이터를 제공하는 글로벌 AI 인프라로 발전했습니다. 기술 부채를 무조건 피하기보다 목적과 기한을 분명히 정하고, 관측과 통제 구조를 먼저 갖춘 선택이 초고속 성장의 기반이 됐습니다.
한 줄 요약: 초당 7천만 요청의 비결은 특별한 기술 하나가 아니라 단순한 API, 중앙화된 제어, 정교한 부하 분산을 차례로 쌓은 설계에 있습니다.
