클라우드플레어, AI 에이전트용 브라우저 Kitesurf 오픈소스 공개

Cloudflare가 AI 에이전트용 브라우저 Kitesurf를 오픈소스로 공개했다. 라이선스는 Apache 2.0이고 코드는 GitHub에 올라와 있으며, 프로젝트 홈페이지는 kitesurf.dev다. 이 브라우저는 Cloudflare Workers 위에서 동작하며, 브라우저 컨테이너 없이도 HTML 파싱, CSS 처리, JavaScript 실행이 가능하다.

Cloudflare가 내세운 목표는 단순하다.

“Our main goal is to give AI agents a lightweight, efficient browser — one that can load websites, execute JavaScript, and interact with pages while using less CPU and memory than a full browser like Chromium.”

에이전트에게 웹페이지를 열고 스크립트를 실행하며 페이지와 상호작용할 수 있는 가벼운 브라우저를 제공하되, CPU와 메모리 사용량은 Chromium 같은 완전한 브라우저보다 낮추겠다는 뜻이다.

이식 실험에서 오픈소스까지, 세 번의 분기점

Kitesurf의 출발점은 Rust로 만든 오픈소스 헤드리스 엔진 obscura다. 이 엔진은 “Chrome 없음, Node.js 없음, 의존성 없음”을 내세운다. Cloudflare 팀은 먼저 AI 에이전트에게 이를 Workers로 이식하게 했는데, 처음에는 결과가 좋지 않았다. 에이전트에게 상세한 계획과 성공 기준을 써 주고 나서야 프로토타입이 겨우 돌아갔다.

Cloudflare 블로그에 따르면 착수부터 정식 발표까지 12주가 걸렸다. 처음 공개될 때 Kitesurf는 Cloudflare의 헤드리스 브라우저 자동화 서비스인 Browser Run에 무료 베타로 들어갔고, 개발자는 API에 browser=kitesurf 파라미터를 하나 추가하면 전환할 수 있었다. 당시 Cloudflare는 “준비되면 오픈소스로 공개하겠다”고 약속했는데, 발표문에 일정이 없었다고 지적한 보도도 있다. 이번에 Phoronix가 전한 오픈소스 공개로 그 약속이 지켜진 셈이다.

개발 방식을 보면, 팀은 W3C의 표준 적합성 테스트 모음인 Web Platform Tests를 AI 에이전트의 검수 기준으로 삼고, 사람은 아키텍처 설계와 리뷰를 맡았다. 블로그 게시 시점에 Kitesurf는 약 21만 5천 개의 테스트를 통과했으며 매주 수백 개씩 늘고 있다. 표준 테스트와 실제 웹사이트 사이의 간극을 메우기 위해, Puppeteer로 실제 사이트에서 Chromium과 Kitesurf를 동시에 돌리면서 어설션과 렌더링 스크린샷을 하나씩 비교하기도 했다.

Illustration: a heavy truck and light sail carts symbolize the lightweight Cloudflare AI browser

내부 구조는 세 부분

Kitesurf는 세 개의 구성 요소로 나뉜다.

  • Engine: 외부로 노출되는 유일한 구성 요소다. Chrome DevTools Protocol(CDP)을 처리하고 세션 상태를 저장하므로, Puppeteer나 Playwright 같은 클라이언트를 그대로 연결해 쓸 수 있다.
  • PageScript: 페이지마다 별도의 Workers 격리 환경을 띄운다. HTML과 CSS 파싱에는 Rust로 만든 렌더링 엔진 Blitz의 모듈과 Firefox의 Stylo를 썼다. Workers가 기본 지원하지 않는 eval을 만나면 Rust로 만든 JS 엔진 Boa에 넘겨 실행한다.
  • PageRenderer: 페이지 객체를 픽셀로 그려 JPEG, PNG, PDF로 출력한다. 페이지 상태는 저장하지 않으며, 멈추면 바로 종료하고 다시 띄운다.

모든 외부 네트워크 요청은 SandboxOutbound라는 단일 구성 요소만 거치고, 페이지마다 쿠키는 각각 별도의 통에 담긴다. Cloudflare의 설계 전제는 매 로드를 신뢰할 수 없는 입력으로 취급하고 모든 세션을 빈 상태에서 시작하는 것이며, 프롬프트 인젝션과 도구 호출 안전성처럼 에이전트에 특화된 위험을 겨냥한 것이다.

메모리로 대략 따져 본 한 대당 동시 세션 수

Cloudflare는 14개 URL에서 각각 5회씩 실행해 중앙값을 냈다. HTML 추출 작업에서 Kitesurf는 메모리 39.4 MiB, 웜 풀 Chromium은 273.7 MiB로 7배 차이가 났고, 스크린샷 작업에서는 4.7배 차이였다.

스크린샷 작업 수치로 어림하면 1 GiB 메모리에 Kitesurf 세션은 약 17개가 동시에 들어가지만 Chromium은 3~4개에 그친다. 실제 배포에서는 스케줄링 오버헤드와 피크 부하도 계산해야 하므로, 이 비율은 상한선 정도로만 봐야 한다. Cloudflare는 요금을 좌우하는 것은 메모리와 CPU이며, 월클록 시간으로는 Chromium이 1.7~1.8배 빠르다고 직접 밝혔다. 격차는 주로 래스터화와 이미지 인코딩에서 생기고, 앞으로도 계속 최적화하겠다는 입장이다.

약점도 분명히 적혀 있다. Kitesurf는 현재 동영상 재생과 WebGL 렌더링을 지원하지 않고, 봇 차단 검증을 통과하기 위한 실제 TLS 핑거프린트도 사용하지 않는다. 공식적으로 올바르게 렌더링된다고 밝힌 페이지로는 Wikipedia, Hacker News, 여러 프레임워크 버전의 TodoMVC 등이 있다. 중국 개발자 입장에서는 오픈소스 공개 이후 Browser Run 할당량을 거치지 않고 자신의 Workers 계정에 직접 배포할 수 있지만, 복잡한 사이트와의 호환성은 직접 테스트해야 한다.

참고 출처: Cloudflare 공식 블로그, Phoronix, CocoLoop, H2S Media. 14개 URL 테스트 세트의 CPU·메모리·소요 시간 중앙값과 WPT 통과 수는 Cloudflare 블로그에서 확인했다.