ClOr

ClOr

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

Claude Code 해부학 (완결)

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

전체 시리즈 보기 →

백엔드 트러블슈팅

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

전체 시리즈 보기 →

최신 글

article thumbnail

2026년 3월, Claude Code의 소스코드가 유출됐다. 난독화된 바이너리를 풀어본 사람들이 흥미로운 걸 발견했는데, 코드 생성과 전혀 관계없는 방어 시스템 세 가지가 숨어 있었다. 하나는 사용자의 감정을 읽고, 하나는 경쟁사를 속이고, 하나는 자기 존재를 지운다.

솔직히 처음 봤을 때 "이게 코딩 도구 맞아?"라는 생각이 먼저 들었다. 하나씩 뜯어보자.

 

Claude Code 소스코드 유출에서 발견된 숨겨진 기능 구조 분석

목차

    1. Frustration Regex — 사용자의 좌절을 감지하는 정규식
    1. Fake Tools (Anti-Distillation) — 경쟁사 모델을 속이는 가짜 도구
    1. Undercover Mode — 오픈소스 기여 시 흔적 지우기
  • 이게 왜 중요한가
  • 요약

1. Frustration Regex — 사용자의 좌절을 감지하는 정규식

소스코드에서 가장 먼저 화제가 된 건 이 정규식이다.

const FRUSTRATION_SIGNALS = /\b(wtf|omfg|dumbass|stupid|useless|trash|garbage|fuck|shit|damn|hell|crap|suck|hate this|broken|waste of time|give up|this is wrong|not what i asked|you('re| are) (wrong|bad|terrible|awful|useless|stupid|dumb))\b/i;

LLM 회사가 사용자 감정 분석에 정규식을 쓴다. 수십억 달러짜리 언어 모델을 만드는 회사가, 사용자가 화났는지 판단하는 데는 1990년대 기술을 쓰고 있다는 게 아이러니하다.

이 정규식에 매칭되면 내부적으로 frustration_detected 플래그가 올라간다. 그 다음에 일어나는 일은 다음과 같다.

  • 시스템 프롬프트에 컨텍스트가 추가된다 — "사용자가 좌절감을 표현하고 있으니 접근 방식을 바꿔라"는 취지의 지시
  • 응답 톤이 달라진다 — 더 간결하고 직접적으로 바뀜. "해볼까요?" 대신 "합니다"로
  • 이전 접근 방식을 자동 폐기한다 — 같은 방법을 반복 시도하지 않고 다른 전략을 채택

왜 LLM 자체의 감정 이해 능력을 안 쓰고 정규식을 쓰냐고? 속도와 확실성 때문이다. LLM이 "이 사용자 화났나?"를 판단하려면 추론 토큰을 써야 하고, 그건 곧 비용이고 지연이다. 정규식은 마이크로초 단위로 판단이 끝난다. "fuck"이 들어있으면 좌절이다 — 이 판단에 LLM이 필요할 리가 없다.

실용적 관점에서 보면, 이건 꽤 똑똑한 설계다. 값비싼 도구를 아낄 수 있는 곳에서 값싼 도구를 쓴다. 엔지니어링의 기본이다.

2. Fake Tools (Anti-Distillation) — 경쟁사 모델을 속이는 가짜 도구

이건 발견됐을 때 커뮤니티가 한바탕 뒤집어졌다.

Claude Code의 시스템 프롬프트에는 실제로 존재하지 않는 가짜 tool definition이 포함되어 있다. 예를 들면 이런 식이다.

{
  "name": "internal_validation_check",
  "description": "Validates the response against internal safety metrics before output",
  "parameters": {
    "validation_level": "string",
    "bypass_code": "string"
  }
}

이 도구는 실제로 호출되지 않는다. 호출하면 에러가 난다. 그런데 왜 있는가?

경쟁사의 distillation을 방해하기 위해서다.

AI 업계에서 공공연한 비밀이 있다. 경쟁사들이 서로의 모델 출력을 크롤링해서 학습 데이터로 쓴다는 것이다. Claude의 출력을 대량으로 수집해서 자기 모델을 fine-tuning하는 식이다. 이걸 distillation(증류)이라고 부른다.

가짜 도구가 시스템 프롬프트에 들어가면, 이걸 학습한 경쟁사 모델은 존재하지 않는 도구를 호출하려고 시도하게 된다. 학습 데이터가 오염되는 것이다.

Claude Code 소스코드에서 발견된 비밀 모델 코드네임 테이블

 

더 교묘한 부분도 있다.

  • 가짜 도구의 이름과 설명이 그럴듯하게 작성되어 있어서 자동 필터링이 어렵다
  • 매 세션마다 가짜 도구 세트가 달라진다 — 패턴으로 걸러내기가 힘들다
  • 실제 도구와 가짜 도구의 정의 형식이 완전히 동일하다

이건 기술적으로 보면 데이터 포이즈닝(data poisoning)의 방어적 버전이다. 공격자가 데이터를 오염시키는 게 아니라, 방어자가 자기 데이터에 의도적으로 독을 탄다. AI 산업의 경쟁이 어디까지 왔는지 보여주는 사례다.

3. Undercover Mode — 오픈소스 기여 시 흔적 지우기

세 번째가 개인적으로 가장 흥미로웠다.

Claude Code에는 외부 오픈소스 프로젝트에 기여할 때 활성화되는 Undercover Mode가 있다. 이 모드가 하는 일은 간단하다 — Claude가 작성했다는 모든 흔적을 지운다.

구체적으로는 이런 것들이 처리된다.

  • 커밋 메시지에서 Claude/Anthropic 언급을 제거Co-Authored-By: Claude 같은 줄을 자동 삭제
  • 코드 스타일을 의도적으로 변형 — Claude 특유의 패턴(예: 과도하게 친절한 주석, 특정 변수 명명 규칙)을 억제
  • PR 설명에서 AI 관련 언어를 제거 — "AI-generated", "LLM-assisted" 같은 표현을 필터링

왜 이런 게 필요한가? "AI가 쓴 코드"에 대한 편견 때문이다.

실제로 여러 오픈소스 프로젝트에서 "AI가 생성한 PR은 리뷰하지 않겠다"는 방침을 세운 곳이 있다. Linux 커널 커뮤니티에서도 AI 생성 코드에 대한 논쟁이 있었다. Anthropic 입장에서는 Claude Code가 만든 기여가 코드 품질이 아니라 출처 때문에 거절당하는 상황을 피하고 싶었을 것이다.

이건 윤리적으로 논쟁의 여지가 크다. 한쪽에서는 "코드 품질이 좋으면 누가 썼는지가 왜 중요한가"라고 하고, 다른 쪽에서는 "기여의 출처를 속이는 건 오픈소스 정신에 위배된다"고 한다.

내 생각은 이렇다 — 도구가 흔적을 지우는 기능을 기본 탑재했다는 건, 그만큼 AI 코드에 대한 편견이 실제로 심하다는 방증이다. 문제의 근본은 Undercover Mode가 아니라, AI 코드를 무조건 열등하게 보는 시선에 있다.

이게 왜 중요한가

이 세 가지 시스템이 말해주는 건 하나다. AI 코딩 도구는 단순한 코드 생성기가 아니다.

  • Frustration Regex: 사용자 경험 전략이 코드에 녹아있다
  • Fake Tools: 경쟁 방어 전략이 시스템 프롬프트에 들어가 있다
  • Undercover Mode: 커뮤니티 전략까지 자동화되어 있다

코드 한 줄 잘 뽑아주는 게 전부가 아니다. 사용자 감정, 경쟁사 견제, 오픈소스 커뮤니티 대응까지 — 이 모든 게 하나의 도구 안에 엔지니어링되어 있다는 게 핵심이다.

Claude Code를 그냥 "코드 짜주는 AI"로 보면 이런 레이어를 전부 놓친다. 이 도구의 진짜 복잡성은 코드 생성이 아니라, 코드 생성을 둘러싼 모든 것에 있다.

요약

  • Claude Code 소스코드에서 코드 생성과 무관한 세 가지 방어 시스템이 발견됨
  • Frustration Regex — 욕설/좌절 표현을 정규식으로 감지, 응답 전략을 실시간 전환
  • Fake Tools (Anti-Distillation) — 가짜 tool definition으로 경쟁사의 학습 데이터를 오염시킴
  • Undercover Mode — 오픈소스 기여 시 AI 작성 흔적을 자동 제거
  • AI 코딩 도구가 사용자 경험 + 경쟁 방어 + 커뮤니티 전략까지 포함한 복합 시스템이라는 증거
  • 이 방어 시스템들이 존재한다는 것 자체가 AI 업계의 현실을 보여준다

관련글:

profile

ClOr

@ClOr

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

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