GitHub - lightpanda-io/browser: Lightpanda: the headless browser designed for AI and automation
핵심 포인트
- 1Lightpanda는 AI 에이전트 및 자동화를 위해 Chromium 또는 WebKit을 사용하지 않고 Zig로 처음부터 개발된 새로운 headless browser입니다.
- 2이 브라우저는 기존 Chrome 대비 월등히 낮은 메모리 사용량과 빠른 실행 속도를 자랑하며, Puppeteer 및 Playwright와의 호환성을 통해 Javascript 실행 및 Web API 지원을 제공합니다.
- 3현재 Beta 버전으로 개발 중이며, HTTP loader, HTML parser, v8 기반 Javascript 지원, CDP/websockets server 등 핵심 기능이 구현되어 있습니다.
Lightpanda는 AI 에이전트와 자동화를 위해 스크래치부터 개발된 헤드리스 브라우저입니다. 이 프로젝트는 Chromium 기반이거나 WebKit을 패치한 것이 아니라, Zig 언어로 완전히 새롭게 작성되었습니다.
개발 동기 및 목표:
현대의 웹은 Ajax, 단일 페이지 애플리케이션(SPA), 무한 스크롤, 동적 콘텐츠 로딩 등으로 인해 JavaScript 실행이 필수적입니다. 과거의 cURL과 같은 단순 HTTP 요청 방식으로는 충분하지 않습니다. 하지만 기존의 Chrome과 같은 브라우저를 헤드리스 모드로 대규모 자동화에 사용하는 것은 여러 비효율성을 야기합니다. Chrome은 메모리와 CPU를 많이 소모하여 운영 비용이 높고, 패키징, 배포, 유지보수가 어렵습니다. 또한, 헤드리스 사용에 불필요한 기능이 많아 오버헤드가 큽니다. Lightpanda는 이러한 문제를 해결하고, JavaScript 실행 기능과 뛰어난 성능을 동시에 제공하는 것을 목표로 합니다.
핵심 방법론 및 기술적 특징:
Lightpanda는 "빈 페이지에서부터" 시작하여 Chromium, Blink, WebKit에 기반을 두지 않는 독자적인 아키텍처를 가집니다. 성능 최적화를 위해 저수준 시스템 프로그래밍 언어인 Zig로 개발되었으며, 그래픽 렌더링 기능을 제거한(Opinionated: without graphical rendering) 순수한 헤드리스 브라우저로 설계되었습니다.
주요 구현 구성 요소는 다음과 같습니다:
- HTTP loader:
Libcurl을 사용하여 HTTP 요청을 처리합니다. - HTML parser:
html5ever라이브러리를 통해 HTML 문서를 파싱하고 DOM 트리를 구성합니다. - JavaScript support:
zig-js-runtime프로젝트를 통해 Google V8 JavaScript 엔진을 통합하여 JavaScript 코드를 실행합니다. 이를 통해 동적 웹 페이지의 상호작용이 가능합니다. - Web API 지원: DOM API (부분적으로 지원되며, 지속적으로 개발 중), Ajax XHR API, Fetch API를 구현하여 웹 페이지의 동적 데이터 로딩 및 상호작용을 지원합니다.
- DOM dump: 웹 페이지의 현재 DOM 상태를 덤프하는 기능을 제공합니다.
- CDP/websockets server: Chrome DevTools Protocol (CDP) 호환 웹소켓 서버를 내장하여 Puppeteer, Playwright, chromedp와 같은 브라우저 자동화 라이브러리와 호환됩니다. 이를 통해 외부 스크립트에서 Lightpanda를 제어할 수 있습니다.
- 사용자 상호작용: 클릭(Click), 입력 폼(Input form) 처리 기능을 지원하여 웹 페이지 내 요소들과 상호작용할 수 있습니다.
- 네트워크 기능: 쿠키(Cookies), 사용자 정의 HTTP 헤더(Custom HTTP headers), 프록시 지원(Proxy support), 네트워크 인터셉션(Network interception) 기능을 제공합니다. 또한
--obey_robots옵션을 통해robots.txt를 존중하여 웹 크롤링 윤리를 준수할 수 있습니다.
성능 측면에서 Lightpanda는 Chrome 대비 현저히 우수하다고 주장합니다. 메모리 사용량은 Chrome보다 9배 적고, 실행 속도는 11배 빠르며, 시작 시간이 매우 빠릅니다.
설치 및 사용:
Lightpanda는 리눅스(x86_64), macOS(aarch64), Windows (WSL2를 통해 리눅스 지침 따름)용 나이틀리 빌드 바이너리로 직접 설치하거나, Docker 이미지를 통해 쉽게 배포할 수 있습니다.
CLI(Command Line Interface)를 통해 특정 URL의 콘텐츠를 가져오거나(fetch), CDP 서버를 시작(serve)할 수 있습니다. Puppeteer와 같은 자동화 라이브러리와는 browserWSEndpoint를 Lightpanda의 CDP 서버 주소로 설정하여 연동합니다.
개발 현황 및 테스트:
Lightpanda는 현재 베타 단계이며 활발히 개발이 진행 중입니다. 안정성과 웹 API 커버리지가 점진적으로 향상되고 있으나, 아직 오류나 크래시가 발생할 수 있습니다. 내부적으로는 make test 명령을 통한 유닛 테스트, 데모 저장소와 연동된 Go 기반의 러너를 활용한 엔드투엔드 테스트, 그리고 wpt.live 기반의 Web Platform Tests (WPT)를 통해 웹 표준 준수 여부를 검증하고 있습니다. 특히, WPT는 lightpanda-io/wpt 포크 저장소를 클론하여 로컬 HTTP 서버를 구성하고 wptrunner를 통해 실행합니다.
기여 및 라이선스:
Lightpanda는 GitHub를 통해 풀 리퀘스트를 받으며, 기여자는 CLA(Contributor License Agreement)에 서명해야 합니다. 기본적으로 사용량 원격 측정(telemetry) 데이터를 수집하지만, 환경 변수를 설정하여 비활성화할 수 있습니다.