3-9. 마무리와 회고
숫자로 보는 CRD
12월 20일에 시작해서 2월 초까지, 약 2달간의 개발을 숫자로 정리하면 이렇다.
- PR: chrome-remote-devtools 레포에 127개, devtools-frontend 레포에 12개
- npm 패키지: client, server, rn-inspector 총 3개 배포
- 릴리스: client/server v0.1.0-rc.1 (12/27), rn-inspector v0.1.0-rc.1 (2/9)
- 서버 재작성: Bun(TypeScript) → Rust
처음 10일(12/20 ~ 12/30)에 PR 47개를 머지한 게 가장 밀도가 높았다. 그때의 에너지가 프로젝트 전체의 뼈대를 만들었다.
배민 따라하기의 결말
시작은 분명 "배민 기술 블로그를 따라 해보자"였다.
배민이 한 것: CDP 클라이언트, WebSocket 릴레이 서버, DevTools 프론트엔드 연동, 기록방(세션 기록/재생).
내가 거기에 더한 것: rrweb 세션 리플레이, PostMessage 트랜스포트, Tauri 데스크톱 앱, init() API, CSS 도메인(Styles 탭), 오프라인 리플레이, React Native Inspector, Redux DevTools, MMKV/AsyncStorage 보드, React DevTools 패널, Rust 서버, npm 배포, 문서 사이트.
따라 하다 보니 욕심이 나고, 욕심 내다 보니 배민이 안 한 것까지 하게 됐다. 이게 사이드 프로젝트의 매력이자 함정이다. 끝이 없다.
AI와의 협업에 대해
이 프로젝트는 AI 없이는 불가능했을 속도로 진행됐다. 솔직히 말하면 코드의 80% 이상은 AI가 작성했다.
그런데 중요한 건, 방향을 잡는 건 내가 했다는 거다. "CDP 클라이언트를 만들자", "rrweb으로 리플레이를 만들자", "PostMessage로 서버 없이 데모를 만들자", "서버를 Rust로 바꾸자" 같은 결정은 AI가 내린 게 아니다. 내가 배민 블로그를 읽고, 레퍼런스 코드를 보고, 내 경험에 기반해서 내린 결정이다.
AI는 구현을 빠르게 해주는 도구였다. 내가 "이런 구조로 이런 기능을 만들어줘"라고 하면, AI가 코드를 작성하고, 나는 그걸 검증하고 수정하는 사이클이 빠르게 돌았다.
다만 AI로 빠르게 개발하면 생기는 문제도 있었다:
- 비슷한 유틸 함수가 여러 곳에 중복되는 현상
- 에러 핸들링이 부실한 코드
- 테스트 없이 기능만 쌓이는 기술 부채
- "동작은 하는데 왜 동작하는지 모르겠는" 코드
이런 건 결국 사람이 직접 정리해야 한다. AI가 코드를 짜준다고 해서 개발자가 필요 없어지는 게 아니라, 개발자의 역할이 "코드를 짜는 사람"에서 "방향을 잡고 품질을 관리하는 사람"으로 바뀌는 거라는 걸 체감했다.
기술적으로 배운 것
이 프로젝트를 하면서 가장 깊게 배운 건 CDP 자체다. Chrome DevTools Protocol이 어떤 도메인으로 구성되어 있고, 각 도메인이 무슨 역할을 하고, DevTools 프론트엔드가 어떤 메시지를 기대하는지. 이걸 아는 사람이 많지 않다는 것도 알게 됐다.
devtools-frontend 코드를 직접 수정하면서 Chromium 빌드 시스템도 조금은 이해하게 됐고, rrweb의 내부 구조, Tauri의 WebView 통합 방식, Rust WebSocket 서버 구현, React Native의 네이티브 모듈 시스템(TurboModule, JSI) 등 넓은 범위의 기술을 얕게나마 경험했다.
결국 하나의 프로젝트에서 웹 프론트엔드, 백엔드(Rust), 모바일(React Native), 데스크톱(Tauri), CI/CD, 문서 사이트까지 전부 건드린 셈이다. 풀스택이라는 말이 이렇게 쓰이는 건가.
남은 과제
- 성능 최적화: 대량의 CDP 이벤트가 쌓일 때 Inspector UI가 느려지는 문제
- WebSocket 서버 안정성: 동시 접속이 많아질 때의 메모리 관리
- React Native 커버리지: 웹 대비 지원하는 CDP 도메인이 아직 적음
- 플러그인 시스템: 커스텀 CDP 도메인과 패널을 플러그인으로 추가할 수 있는 구조
- Tauri 앱 완성도: 시스템 트레이, 자동 업데이트 같은 데스크톱 앱 기능
이 과제들을 다 해결할 수 있을지는 모르겠다. 사이드 프로젝트는 늘 열정으로 시작해서 현실에 치여 멈추니까. 하지만 적어도 이번에는 npm에 배포까지 해냈고, 실제로 돌아가는 도구를 만들었다는 점에서 과거의 시도들보다는 한 발 더 나아갔다고 생각한다.
마지막으로
근성과 광기만 남은 상태에서 시작한 프로젝트가, 어느덧 3개의 npm 패키지와 127개의 PR이 되었다.
배민 기술 블로그를 보고 "나도 해봐야지" 했던 그 충동이, AI 덕분에 빠르게 결과물로 이어졌다. 완벽하진 않지만, 돌아가는 코드가 있고, 문서가 있고, 테스트가 있다. 누군가 이 코드를 보고 "나도 해봐야지"라고 생각하면 좋겠다.
끝이라고 쓰긴 하지만, GitHub에 이슈는 계속 올라오고 있고, 고치고 싶은 것도 많다. 이건 끝이 아니라 v0.1.0인 거다.
배민 따라하기로 시작해서 127개의 PR, 3개의 npm 패키지, 웹/React Native/데스크톱을 아우르는 원격 디버깅 도구를 만들었다. AI와의 협업으로 속도를 냈지만, 방향을 잡고 품질을 관리하는 건 결국 사람의 몫이었다.