ClOr

ClOr

백엔드 실무 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.

Claude Code 해부학 (완결)

51만 줄 소스코드를 19편에 걸쳐 분석한 완결 시리즈

전체 시리즈 보기 →

백엔드 트러블슈팅

실무에서 겪은 장애와 해결 과정 기록

전체 시리즈 보기 →

최신 글

article thumbnail

2026년 3월 31일, Anthropic의 공식 CLI 도구인 Claude Code의 소스코드 전체가 인터넷에 풀렸습니다. TypeScript로 작성된 51만 줄, 파일 1,920개. 난독화도 안 된 원본 그대로입니다.

목차

  • 어떻게 유출됐나
  • 뭐가 들어있나
  • 이 시리즈에서 다룰 것

어떻게 유출됐나

보안 연구원 Chaofan Shou(@Fried_rice)가 npm에 배포된 Claude Code 패키지에서 .map 파일을 발견했습니다. source map이란 빌드된 코드를 원본 소스에 매핑해주는 파일인데, Anthropic이 이걸 그대로 배포해버린 겁니다.

문제의 .map 파일은 약 57MB 크기였고, Anthropic의 R2 스토리지 버킷에서 zip으로 다운로드할 수 있었습니다. source map 안에는 빌드 전 원본 TypeScript 소스가 통째로 들어 있었고, 이를 추출하면 프로젝트 전체를 복원할 수 있었습니다.

빌드 스크립트를 보면 원인이 명확합니다.

scripts/build-bundle.ts에서 source map 생성 옵션을 확인할 수 있습니다.

// scripts/build-bundle.ts (line 112~113)
// Source maps for production debugging (external .map files)
sourcemap: noSourcemap ? false : 'external',

--no-sourcemap 플래그를 명시적으로 넣지 않으면 기본으로 external source map이 생성됩니다. 프로덕션 빌드에서 이 플래그를 빠뜨린 채 npm에 퍼블리시한 것으로 보입니다. 디버깅 편의를 위해 넣어둔 옵션이 보안 사고로 이어진 셈입니다.

뭐가 들어있나

유출된 소스의 규모부터 정리하면 이렇습니다.

항목 수치
전체 파일 수 ~1,920개
코드 라인 수 512,000+
언어 TypeScript (strict 모드)
런타임 Bun
터미널 UI React + Ink
CLI 파싱 Commander.js
스키마 검증 Zod
API 클라이언트 Anthropic SDK
텔레메트리 OpenTelemetry
피처 플래그 GrowthBook

package.json을 보면 기술 스택의 윤곽이 바로 드러납니다.

// package.json (line 7~11)
"type": "module",
"main": "src/entrypoints/cli.tsx",
"bin": {
  "claude": "src/entrypoints/cli.tsx"
},

진입점이 .tsx 파일입니다. CLI 도구인데 React를 쓴다는 뜻이고, 실제로 터미널 UI를 Ink(React 기반 터미널 렌더러)로 그리고 있습니다. 의존성 목록에 react, react-reconciler가 들어있는 것도 이 때문입니다.

tsconfig.json에서는 한 가지 흥미로운 설정이 있습니다.

// tsconfig.json (line 20~22)
"paths": {
  "bun:bundle": ["./src/types/bun-bundle.d.ts"]
}

Bun 런타임의 번들러 전용 모듈인 bun:bundle에 대한 타입 매핑입니다. 이 모듈을 통해 빌드 타임에 피처 플래그를 주입하고, dead code elimination을 수행합니다. VOICE_MODE, PROACTIVE, BRIDGE_MODE 같은 플래그로 기능을 선택적으로 활성화하는 구조입니다.

빌드 파이프라인도 깔끔합니다. esbuild로 단일 .mjs 파일을 만들고, 코드 스플리팅 없이 하나로 번들링합니다. CLI 도구답게 #!/usr/bin/env node shebang을 배너로 삽입하고, MACRO.VERSION 같은 컴파일 타임 상수도 define으로 주입합니다.

이 시리즈에서 다룰 것

이 시리즈에서는 유출된 소스코드를 처음부터 끝까지 분석합니다. 총 19편으로 구성했고, 각 편에서 하나의 주제를 깊이 파고듭니다.

Part 주제
1 프로젝트 구조 분석 — 1,900개 파일의 디렉토리 구조
2 부팅 과정 — CLI 실행부터 첫 프롬프트까지
3 시스템 프롬프트 — Claude에게 주입되는 지시문
4 도구 시스템 — 40개 도구의 등록, 권한, 실행
5 권한 시스템 — 도구 실행 전 허가/거부 판단
6 쿼리 엔진 — 4.6만 줄짜리 LLM API 핵심
7 컨텍스트 수집 — 시스템 정보, 파일, 환경
8 슬래시 명령어 — /commit, /review 등 50개 명령
9 터미널 UI — React + Ink 렌더링 파이프라인
10 MCP 통합 — Model Context Protocol 클라이언트
11 IDE 브릿지 — VS Code, JetBrains 연동
12 멀티 에이전트 — AgentTool과 코디네이터
13 메모리와 컨텍스트 압축 — /compact와 메모리 추출
14 인증과 OAuth — 로그인 흐름과 JWT
15 텔레메트리 — OpenTelemetry 계측
16 피처 플래그와 빌드 — GrowthBook, dead code 제거
17 플러그인과 스킬 — 확장 시스템
18 서버 모드와 원격 세션
19 설계 패턴 총정리 — 51만 줄에서 배우는 것들

각 편에서는 실제 소스코드를 발췌하면서, 왜 이렇게 설계했는지를 중심으로 분석합니다. 공식 문서에는 없는, 코드에서만 알 수 있는 내부 구현을 다룹니다.

Anthropic이 만든 AI 코딩 도구의 내부를 이렇게 자세히 들여다볼 수 있는 기회는 다시 오지 않을 수도 있습니다. 다음 편에서는 1,920개 파일이 어떤 원칙으로 정리되어 있는지, 프로젝트 구조부터 살펴봅니다.


다음 편 예고: [Claude Code 해부학 Part 1] 클로드 코드(Claude Code) 프로젝트 구조 분석 — 1,900개 파일은 어떻게 정리되어 있나

[Claude Code 해부학] 시리즈

  • Part 1: 프로젝트 구조 분석
  • Part 2: 부팅 과정 분석
  • Part 3: 시스템 프롬프트 분석
profile

ClOr

@ClOr

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

ClOr · 백엔드 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.