피드로 돌아가기
I built a pure-Rust browser automation library, no Node.js, no wrappers, just CDP over Tokio
Dev.toDev.to
Backend

Node.js 의존성 제거 및 Tokio 기반 CDP 직접 통신을 통한 Pure-Rust 브라우저 자동화 구현

I built a pure-Rust browser automation library, no Node.js, no wrappers, just CDP over Tokio

saripalli shanmukha kiran sagar2026년 5월 10일3intermediate

Context

기존 Rust 브라우저 라이브러리의 Node.js Wrapper 구조로 인한 성능 저하 및 무거운 런타임 의존성 문제 발생. 다수 라이브러리의 유지보수 중단 및 다중 페이지 세션 격리 실패로 인한 이벤트 유출 문제 상존.

Technical Solution

  • Tokio WebSockets를 활용하여 Chrome DevTools Protocol(CDP)과 직접 통신하는 Zero Node.js 아키텍처 설계
  • Page별 Session ID 추적 시스템 구축을 통한 Multi-page Isolation 및 이벤트 간섭 원천 차단
  • 명령 실행 전 Event Handler를 선등록하는 구조를 채택하여 Race-condition 없는 이벤트 처리 보장
  • Playwright 스타일의 Locator API와 제네릭 기반 evaluate() 구현으로 Rust 타입 시스템 내 JS 데이터 역직렬화 지원
  • DomContentLoaded, Load, NetworkIdle(500ms 기준)의 세분화된 Wait Mode를 통한 SPA 대응 최적화
  • BrowserError 열거형을 통한 구조화된 에러 컨텍스트 제공으로 불투명한 문자열 에러 제거

- 외부 런타임 의존성(Node.js 등) 제거를 통한 바이너리 경량화 및 실행 속도 개선 검토 - 비동기 이벤트 기반 시스템 설계 시 핸들러 선등록 패턴을 통한 Race-condition 방지 적용 - 다중 세션 환경에서 고유 식별자(Session ID) 기반의 엄격한 격리 레이어 구축 확인 - 에러 처리 시 단순 문자열이 아닌 구조화된 데이터 타입을 정의하여 디버깅 효율성 증대

원문 읽기