해결책
웹 개발자들은 일상적으로 하나의 앱을 여러 브라우저에서 테스트하며, 자동화는 오랫동안 선택을 강요했다. 고전적인 W3C WebDriver API는 모든 브라우저에 도달하지만, HTTP 요청–응답 방식으로 말한다: 페이지를 로드하고, 명령을 실행하고, 응답을 기다린다. 콘솔 로그나 네트워크 트래픽을 스트리밍할 수 없고, 명령을 한 번에 하나씩 실행한다. 풍부한 대안 — Chrome의 DevTools Protocol(CDP)이나 Firefox의 옛 Remote Debugging Protocol — 은 자기 브라우저에서만 작동했기에, 도구 제작자는 엔진마다 하나의 프로토콜을 유지해야 했다. 설문 조사들은 크로스 브라우저 테스트를 웹의 가장 큰 고충 중 하나로 꼽았다.
가장 저항이 적은 길은 Chrome의 것이었다. 지배적인 자동화 라이브러리인 Puppeteer는 CDP 위에서 성장했고, 2019년 실험적 Firefox 지원을 얻었을 때 Mozilla는 자연스러워 보이는 일을 했다: Firefox 안에 CDP의 부분집합을 구현하고 유지했다. 그것은 Firefox를 영구적인 추종자로 만들었다. CDP는 Chrome의 DevTools를 위해 존재하며 Chrome의 필요에 따라 변한다; 그것은 공개 명세가 아니다; 그리고 부분적 복제는 결코 전체 Puppeteer API를 보장할 수 없었기에, 어디서 어떤 기능이 작동하는지 아무도 알 수 없었다.
Mozilla의 반격은 코드 편집기에서 얻은 Language Server Protocol의 교훈을 적용했다: 모든 도구가 모든 브라우저를 지원해야 한다면, 해결책은 기존 강자의 프로토콜을 복사하는 것이 아니라 풍부한 기능 집합을 표준으로 만드는 것이다. Puppeteer 팀 및 W3C Browser Testing and Tools Working Group의 다른 구성원들과 함께 WebDriver BiDi를 구축했다 — 양방향, 이벤트 기반 WebSocket 채널 위의 WebDriver 명령으로, 로그, 네트워크 가로채기, 프리로드 스크립트, 동시 명령이 브라우저 전반에서 작동한다. Gecko가 명세를 구현했고; Chromium도 구현했다.
2024년 8월까지 그 베팅은 결실을 맺었다: Firefox 129와 Puppeteer 23이 모두 프로덕션 준비된 WebDriver BiDi를 출시했고, puppeteer.launch({ browser: 'firefox' })는 Firefox에 Chrome과 동일한 개발자 경험을 제공했다. Firefox는 자사의 CDP 부분집합을 폐기했으며 제거는 2024년 말로 예정되었고, Chrome 팀의 자체 발표도 같은 내용을 말했다: 버전 23부터 Firefox 지원은 표준 위에서 작동하는 반면 Chrome은 CDP를 기본으로 유지한다. 복제품이 아닌 표준이 Firefox의 진입 방식이 되었다.
이룬 것
경쟁자와 함께 풍부한 프로토콜을 공개 W3C 표준으로 공동 저술한다 — 그러면 그들 자신의 Puppeteer가 당신을 위해 Firefox를 출시한다
왜 통했는가
프로토콜을 양방향, 이벤트 기반으로 만든 것은 크로스 브라우저 도달 범위를 포기하지 않고도 도구에 CDP급 기능 — 로그, 네트워크 가로채기, 동시성 — 을 제공했다.
W3C에서 Chromium과 공동 저술한 것은 어떤 단일 벤더도 프로토콜을 소유하지 않음을 의미했다; Firefox는 더 이상 Chrome의 DevTools를 위해 작성된 비공개 프로토콜을 유지하지 않았다.
Puppeteer가 CDP를 Chrome의 기본으로 유지했기에, 기존 자동화는 그대로 유지된 채 Firefox 지원이 표준 위에서 작동했다 — Google의 라이브러리가 Mozilla의 호환성을 무료로 출시한 것이다.
BiDi가 Puppeteer에서 기능 동등성에 도달하자, Firefox는 자사의 CDP 부분집합과 그 유지 부담을 폐기할 수 있었고, 표준만이 유일한 전진 경로로 남았다.
경쟁자가 사실상의 프로토콜을 소유할 때, 그것을 복제하지도, 그것과 싸우지도 말라 — 두 엔진이 모두 구현하는 하나의 공개 표준을 공동 저술하면, 지배적인 도구가 당신의 배포 채널이 된다.
여파
Firefox 129는 출시와 함께 CDP를 폐기했으며 제거는 2024년 말로 예정되었고, 양 팀은 사용자들에게 마이그레이션하거나 누락된 API를 보고하도록 요청했다. 일부 Puppeteer 기능은 도약하지 못했다 — CDPSession 전용 호출, 접근성 트리 스냅샷, 워커 평가는 여전히 표준 작업이 필요하다 — 그리고 팀들은 그 공개 목록을 게시했다. 일주일 전 BrowserStack은 자사 클라우드에서 WebDriver BiDi가 프로덕션 준비되었다고 선언했으며, 이는 프로토콜이 명세에서 출시된 크로스 브라우저 인프라로 이동한 시기의 일부였다.
근거 확인하기
출처
- Announcing Official Puppeteer Support for Firefox Mozilla Hacks · hacks.mozilla.org ·
- WebDriver BiDi production-ready in Firefox, Chrome and Puppeteer Chrome for Developers · developer.chrome.com ·
- Puppeteer Support for Firefox (Hacker News discussion) Hacker News · news.ycombinator.com ·