OpenAI가 ChatGPT 기반 브라우저 Atlas에 담긴 새로운 아키텍처, OWL을 구축한 방식
더 빠르고 스마트한 방식으로 웹을 사용하도록 지원하는새로운 프로세스 아키텍처를 확인해 보세요.
작성: Ken Rockot, Technical Staff 구성원, Ben Goodger, ChatGPT Atlas 엔지니어링 책임자
지난주 OpenAI는 ChatGPT와 함께 웹을 탐색하는 새로운 방식인 ChatGPT Atlas를 출시했습니다. Atlas는 모든 기능을 갖춘 웹 브라우저인 동시에 미래를 슬쩍 보여줍니다. 바로 인터넷을 탐색하는 모든 순간을 ChatGPT와 함께하며, 질문하고 제안하고 사용자 대신 작업을 완료하는 세계입니다. 이 게시물에서는 제품의 가장 복잡한 엔지니어링 측면 중 하나를 공개합니다. 바로 ChatGPT를 사용자 맞춤형으로 더 유용하게 만드는 브라우저로 발전시킨 방식입니다.
ChatGPT를 진정한 웹용 협력자로 만들기 위해서는 Chromium 런타임과 Atlas를 분리하여 브라우저의 전체 아키텍처를 재구상해야 했습니다. 이를 위해 제품 목표인 즉각적인 시작, 비교적 많은 탭을 연 경우에도 반응성 유지, 에이전틱 사용 사례에 대한 강력한 기반 구축을 실현할 수 있는 Chromium 통합의 새로운 방식을 개발해야 했습니다.

Chromium은 기본 구성 요소입니다. 탄탄한 보안 모델, 입증된 성능 자격 증명, 탁월한 웹 호환성을 갖춘 최첨단 웹 엔진을 제공합니다. 뿐만 아니라 글로벌 커뮤니티에서 지속적으로 Chromium을 개선해 나가고 있습니다. 이는 최신 데스크톱 웹 브라우저에서 일반적으로 사용되는 방식입니다.
OpenAI의 재능 있는 팀은 에이전트 모드 등의 기능을 위한 시각적 효과와 풍부한 애니메이션을 포함한 사용자 경험을 구현하겠다는 열정적인 목표를 갖고 있었습니다. 이를 위해 엔지니어링팀은 단순히 오픈 소스 Chromium UX를 가져와 적용하는 대신 OpenAI의 UI(SwiftUI, AppKit, Metal)를 위한 가장 최신 기반 프레임워크를 활용해야 했습니다. 결과적으로 Atlas의 UI는 전체 애플리케이션 UX의 포괄적인 재구성이라 할 수 있습니다.
또한 빠른 시작 시간, 성능 저하 없이 수백 개의 탭 지원 등 다른 제품 목표도 설정했습니다. 이러한 목표는 부팅 시퀀스, 스레딩 모델, 탭 모델 등의 많은 세부 사항에 대해 제한적인 Chromium이 제공하는 방식으로는 달성하기 어려웠습니다. 이 부분에서 상당한 변화를 고려했지만, 새로운 버전과 빠르게 통합할 수 있도록 패치를 Chromium에 대한 패치로 유지하기를 원했습니다. 개발 속도를 최대한 가속하기 위해서 Chromium 런타임을 통합하고 유도할 다른 방법을 구상해야 했습니다.
기술 투자에 대한 시금석은 실험, 반복, 새로운 기능 제공을 가속할 수 있을 뿐 아니라 OpenAI 엔지니어링 문화인 첫째 날 배포의 핵심 요소를 유지하도록 해주는 것이었습니다. 새로운 엔지니어는 누구나 첫날 오후에 작은 변경 사항을 만들고 통합합니다. Chromium을 확인하고 구축하는 데 몇 시간이 걸리더라도 이를 가능하게 만들고 싶었습니다.
이러한 과제에 있어 OpenAI가 찾은 답은 새로운 아키텍처 레이어를 구축하는 것으로 OWL, OpenAI의 웹 레이어라 이름 붙였습니다. OWL은 Chromium과 OpenAI 기술을 통합한 것으로, Atlas 앱 프로세스 외부에서 Chromium의 브라우저 프로세스를 실행합니다.
이렇게 생각하면 됩니다. Chromium는 별도의 프로세스로 탭을 이동함으로써 브라우저의 혁신을 일으켰습니다. OpenAI는 Chromium 자체를 주요 애플리케이션 프로세스에서 분리하고 격리된 서비스 레이어로 옮겨 이 아이디어를 발전시켰습니다. 이러한 변화는 많은 이점을 만들어냅니다.
- 더 단순하고 현대적인 앱: Atlas는 대부분 SwiftUI AppKit로 구축되었습니다. 하나의 언어, 하나의 기술 스택, 하나의 명확한 코드베이스가 기본 개념입니다.
- 더 빠른 시작: Chromium은 백그라운드에서 비동기로 부팅됩니다. Atlas는 기다리지 않습니다. 거의 즉각적으로 화면에 픽셀이 나타납니다.
- 회피 및 충돌로부터 격리: Chromium은 강력하며 복잡한 웹 엔진입니다. Chromium의 메인 스레드가 멈춰도 Atlas는 멈추지 않습니다. Chromium이 충돌해도 Atlas는 계속 작동합니다.
- 더 적은 통합 문제: Chromium 오픈 소스 UI를 많이 사용하지 않기 때문에 업스트림 Chromium에 대해 diff가 적으면서도 유지 관리가 쉽습니다.
- 더 빠른 반복: 대부분의 엔지니어는 Chromium을 로컬에서 빌드할 필요가 없습니다. OWL은 프리빌트 바이너리로 내부적으로 배포되므로 Atlas가 빌딩하는 데에는 몇 시간이 아닌 몇 분이면 충분합니다.
OpenAI 팀에 속한 대부분의 엔지니어가 소스로부터 Chromium을 정기적으로 구축하는 것이 아니기 때문에 개발이 훨씬 빨라집니다. 새로운 팀원도 단순한 변경 사항을 첫날 오후에 통합할 수 있습니다.
높은 수준에서 볼 때 Atlas 브라우저는 OWL 클라이언트이며, Chromium 브라우저 프로세스는 OWL 호스트입니다. Chromium의 자체 메시지 전달 시스템인 IPC, 특히 Mojo(새 창에서 열기)를 통해 커뮤니케이션합니다. Mojo를 위한 맞춤형 Swift(TypeScript도 포함) 바인딩을 작성했으므로 OpenAI의 Swift 앱이 호스트 측 인터페이스를 직접 호출할 수 있습니다.
OWL 클라이언트 라이브러리는 호스트 서비스 레이어에 의해 노출된 몇 가지 주요 개념을 추출하는 간단한 공개 Swift API를 노출합니다.
- 세션: 호스트를 전체적으로 구성하고 제어합니다
- 프로필: 특정 사용자 프로필에 맞춰 브라우저 상태를 관리합니다
- WebView: 개별 웹 콘텐츠(예: 렌더링, 입력, 탐색, 줌 등)를 컨트롤하고 임베딩합니다
- WebContentRenderer: 입력 이벤트를 Chromium 렌더링 파이프라인으로 전달하고 렌더러로부터 피드백을 수신합니다
- 레이어호스트/클라이언트: UI와 Chromium 간에 구성 정보를 교환합니다
북마크, 다운로드, 확장 프로그램, 자동 채우기 등의 고급 기능을 관리하기 위한 다양한 범위의 서비스 엔드포인트도 있습니다.
클라이언트 앱에서 독점 프레젠테이션 공간을 상호 공유하는 WebViews는 공유 구성 컨테이너에 삽입되거나 제거됩니다. 예를 들어 브라우저 창에는 단일 공유 컨테이너가 표시되고 탭 스트립에서 탭을 선택하면 해당 탭의 WebView가 컨테이너로 전환되는 경우가 있습니다. Chromium의 경우 이러한 컨테이너는 gfx::AcceleratedWidget와 일치하는데 이는 궁극적으로 CALayer가 지원합니다. 해당 레이어의 컨텍스트 ID를 NSView가 비공개 CALayerHost API를 사용해 임베딩하는 클라이언트에 노출합니다.
Chromium이 별도의 팝업 위젯에서 렌더링하는 드롭다운 또는 색상 선택기 등의 특수한 경우도 동일한 접근 방식을 사용합니다. 여기에는 content::WebContents가 없지만 대신 자체 gfx::AcceleratedWidget를 갖춘 content::RenderWidgetHostView가 있기 때문에 동일한 위임 렌더링 모델이 적용됩니다.OWL은 내부적으로 지오메트리 보기를 Chromium 측과 동기화하므로 GPU 컴포지터를 이에 맞춰 업데이트하고 알맞은 사이즈와 장치 규모에 맞는 레이어 콘텐츠를 계속 생산할 수 있습니다.또한 이 기술을 재사용하여 Chromium 자체 기반 Views UI 요소를 Atlas에 선택적으로 투사합니다(이는 SwiftUI에서 처음부터 대체 항목을 빌드하지 않고도 권한 프롬프트와 같은 기능을 빠르게 부트스트래핑하는 데에도 유용합니다). 이 기법은 macOS에 설치 가능한 웹 앱을 위한 Chromium의 기존 인프라를 상당 부분 차용합니다.입력 이벤트: 나누기와 포워딩Cromium UI는 플랫폼 이벤트(macOS NSEvents 등)을 렌더러로 포워딩하기 전에 Blink의 WebInputEvent 모델로 변환합니다. 하지만 OWL은 Chromium을 숨겨진 프로세스에서 구동하기 때문에 이러한 변환 과정을 Swift 클라이언트 라이브러리 내에서 자체적으로 수행하여 이미 변환된 이벤트를 Chromium로 포워딩합니다.여기에서 이벤트는 실제 입력 이벤트가 일반적으로 웹 콘텐츠에 대해 따르는 것과 동일한 생명 주기를 따릅니다. 여기에는 페이지가 이벤트를 처리하지 못했다는 것을 나타낼 때마다 이벤트를 클라이언트로 반환하는 것이 포함됩니다. 이러한 상황이 발생하면 NSEvent를 다시 종합하여 나머지 앱이 입력을 처리하도록 합니다.에이전트 모드: 특별 사례Atlas의 에이전트식 탐색 기능은 렌더링, 입력 이벤트 포워딩, 데이터 저장소 등에 대한 접근 방식에 특별한 과제를 제시합니다.OpenAI의 컴퓨터는 스크린의 단일 이미지를 입력으로 예상하는 모델을 사용합니다. 하지만 드롭다운과 같은 일부 UI 요소는 탭의 범위를 벗어나 별도의 창으로 렌더링됩니다. 에이전트 모드에서 이러한 팝업을 올바른 좌표에 있는 메인 페이지 이미지로 다시 종합하여 모델이 한 프레임에서 전체 컨텍스트를 보도록 합니다.
입력의 경우 동일한 원칙을 적용합니다. 에이전트가 생성한 이벤트는 렌더러로 직접 라우팅되며 권한이 있는 브라우저 레이어를 거치지 않습니다. 이를 통해 자동화된 제어에서도 샌드박스 경계가 유지됩니다. 예를 들면 이벤트 클래스를 브라우저가 표시하는 웹 콘텐츠와 관련되지 않은 작업을 하게 만드는 키보드 단축키로 통합하려 하지 않습니다.
에이전트 탐색은 오래 유지되지 않는 “로그아웃” 컨텍스트에서 실행할 수 있습니다. 상태를 노출할 수 있는 사용자의 기존 시크릿 모드 프로필을 공유하는 대신, Chromium의 StoragePartition 인프라를 사용하여 격리된 메모리 내 저장소를 구축합니다. 각 에이전트 세션은 새롭게 시작되며, 종료될 때 모든 쿠키 및 사이트 데이터는 삭제됩니다. 여러 개의 “로그아웃” 에이전트 세션을 실행할 수 있으며, 세션은 브라우저 탭으로 구별되며, 다른 세션과 완벽하게 분리됩니다.
글로벌 Chromium 커뮤니티와 현대 웹을 위한 기반을 구축한 커뮤니티의 엄청난 노력이 없었다면 이번 공개는 불가능했을 것입니다. OWL은 이를 기반으로 새로운 방식을 통해 구축되었습니다. 엔진을 앱과 분리하고, 세계적인 수준의 웹 플랫폼을 최신 기반 프레임워크과 결합하고, 더 빠르고 유연한 아키텍처를 구축했습니다.
브라우저가 Chromium을 담는 방식을 재구상함으로써 OpenAI는 더 매끄럽게 시작하고, 더 풍부한 UI를 갖추고, 다른 OS와 더 긴밀하게 통합하고, 아이디어의 속도로 움직이는 개발 루프가 가능한 새로운 경험을 위한 공간을 만들었습니다. 이러한 도전이 잘 맞는다고 생각되는 분은 Atlas 소프트웨어 엔지니어, iOS 소프트웨어 엔지니어 등으로 Atlas 개발에 참여할 수 있는 채용 공고를 확인해 보세요.
Atlas를 사용해 보려면 chatgpt.com/atlas(새 창에서 열기)를 방문하세요.
감사 인사
이 게시물과 Atlas를 구축한 전체 OpenAI 팀에 도움을 주신 Darin Fisher, Marie Shin에게 감사의 인사를 전합니다.


