| {{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#3f76e2,#3f76e2><colcolor=#fff,#fff> 프로젝트 | The Chromium Projects · Chromium · ChromiumOS · Chrome(ChromeOS) |
| 관련 문서 | 스키마 · 플래그 · Chrome/문제점 | |
| 기술 | V8(Turbofan) · Blink · GN · Chrome DevTools Protocol(Puppeteer) · Cronet · Chrome Trace Event | |
| 파생 기술 | Node.js · Deno · Electron · Brunch Framework · chromefy | |
| 파생 브라우저 | ungoogled-chromium | |
| 파생 운영체제 | ChromeOS Flex · FydeOS · 웨인 OS · 웨일 OS | |
| 기타 | 웹 환경 무결성 · Chrome Dino · 힘내라! 크롬 · Cube Slam | }}}}}}}}} |
1. 개요
Chromium 및 호환 브라우저의 내장 브라우저 개발자 도구를 원격으로 제어 및 JavaScript를 디버깅하기 위해 사용되는 프로토콜.Debug Adapter Protocol의 전신이 된 V8 Debugger Protocol과는 별개의 프로토콜이다.
2. 구조
- target - 디버깅을 할 대상. Debug Adapter Protocol의 debugee와도 비슷하나, 웹 특성상 웹 페이지나 Service Worker, 크롬 확장 프로그램 또한 target에 포함된다.
- client - CDP로 디버깅을 하는 end client. 쉽게 말해 IDE 등이 해당된다.
- session - 단일 디버깅 세션
- handler - 프로토콜 핸들러. V8 layer, content layer를 제외한 블링크 layer 수준 핸들러의 경우 agent라 불리기도 하나 일반적으로는 handler라 부른다.
기반 프로토콜은 웹소켓에 presentation layer는 JSON-RPC 형태이며,
2.1. 정의
정의 소스는 전부 PDL이라는 The Chromium Projects 자체 개발 포맷으로 작성되어 있다. 대충 WebIDL 정도의 역할을 떠올리면 좋다.- blink - devtools_protocol/browser_protocol.pdl - 브라우저 수준 프로토콜
- v8 - js_protocol.pdl - V8 엔진 수준 프로토콜. 흔히 v8-inspector 프로토콜이라고 부르면 바로 이 subset만을 뜻한다.
CDP 정의 소스는 위 두 entry가 전부이며, 역할은 직관적으로 JS 디버깅 기능은 V8 쪽으로, 브라우저 관련 inspect 기능은 browser_protocol 쪽으로 가는 식이다. 위 두 소스를 실제 소비 가능한 포맷으로 빌드해서 chromedevtools/devtools-protocol로 올리고 있기 때문에 이를 참고해도 문제는 없다. 또한 해당 PDL 소스에서 Chromium에 사용할 C++ 파일도 같이 빌드한다.
2.2. 레이어
총 다섯 가지 레이어가 존재한다. 기본적으로 위에서부터 아래대로 핸들링이 발생하는 순서이며, V8이 가장 low level layer이다.- Chromium 레이어
- headless 레이어
- content 레이어 - 트레이싱 등
- Blink 레이어
- V8 레이어 - 기본적으로 JavaScript 디버깅 관련 대부분을 처리한다. 쉽게 생각해 Node.js inspect 시 사용할 수 있는 기능이면 대부분 여기서 처리된다고 보면 된다.
3. 파생 소프트웨어
- Puppeteer
- Node.js - 6.3 이번 버전에서는 V8 Debugger Protocol을 썼는데, 정작 Chromium 프런트는 CDP만 지원해서 node-inspector라는 proxy layer를 돌러써야 했었다.# 최신 버전에서는 v8-inspector subset을 내장 지원해서 별도의 레이어를 거치지 않고도 Chromium 기반 브라우저에서 Node.js 원격 디버깅이 가능하다.
- vscode-js-debug - CDP 기반 언어 서버 구현체. 현재 Visual Studio Code 등에 기본적으로 내장되어 있는 JavaScript 디버거가 바로 이것이다.
- chrome-remote-interface - 프로토콜 wrapper 라이브러리
- Playwright
4. 외부 링크
- chromedevtools/devtools-protocol
- devtools-protocolNPM - 위 JSON definition의 npm 패키징 및 재배포 버전.
- chrome.debugger
- chrome-protocol-proxy