Claude Code가 모르는 것을 지어내지 않게 만드는 방법 (정확한 설정 가이드)

@0x_rody
영어1개월 전 · 2026년 6월 06일
346K
256
29
8
1.2K

TL;DR

이 가이드는 엄격한 정직성 규칙, 검증 프로토콜 및 자동화된 린터 훅을 구현하여 Claude Code가 함수나 테스트를 지어내지 못하도록 방지하는 포괄적인 4단계 프레임워크를 제공합니다.

Claude Code 는 매일 당신에게 거짓말을 합니다. 존재하지 않는 함수, 가짜 import, 실제로 실행되지 않은 "테스트 통과"까지. 해결책은 거짓말을 비용이 많이 드는 행동으로 만드는 4계층 설정입니다.

Claude가 버그를 고쳤다고 말합니다. 두 시간 후에야 호출한 함수가 실제로 존재하지 않았다는 사실을 알게 됩니다.

대부분의 개발자는 모든 것을 다시 확인하고 모델을 탓하는 법을 배웁니다. 진짜 해결책은 거짓말이 당신의 컴퓨터를 떠나기 전에 잡아내는 것입니다.

완벽한 정직 설정 방법은 여기 있습니다 👇

rody - inline image

Claude가 애초에 거짓말을 하는 이유

Claude 는 텍스트 예측기입니다. 모르는 것이 있을 때, 그럴듯한 텍스트를 예측합니다. 만들어진 함수 이름은 실제 함수 이름처럼 보입니다. 자신감 있게 전달된 헛소리는 진실과 똑같이 읽힙니다.

코드가 두 시간 후에 깨지고, 디버깅에 또 한 시간이 걸리기 전까지는 차이를 알 수 없습니다.

해결책은 더 똑똑한 모델이 아닙니다. Claude 의 출력을 실시간으로 확인 가능하게 만들고, "모릅니다"라고 말하는 것이 추측보다 비용이 덜 들게 만드는 것입니다.

아래 4가지 계층입니다. 함께 사용하면 거의 허구를 없앨 수 있습니다.

rody - inline image

계층 1: CLAUDE.md 정직 규칙

첫 번째 계층은 CLAUDE.md 에 있는 일련의 규칙으로, Claude 에게 불확실성을 인정해야 하는 정확한 시기와 방법을 알려줍니다. 프로젝트 루트에 다음을 추가하세요:

markdown
1## 정직 규칙 (매 턴 읽기)
2
3함수, 클래스 또는 import의 존재를 주장하기 전에, 파일을 읽거나
4grep을 실행하여 실제로 확인하세요. 기호를 절대 만들어내지 마십시오.
5
6무언가를 확인할 수 없다면, 명시적으로 "확인하지 않았습니다"라고 말하세요.
7확인되지 않은 주장에 의존하는 코드를 작성하지 마십시오.
8
9이 프로젝트에서 참조된 적이 없는 라이브러리를 사용하라는 작업이 주어지면,
10추가하기 전에 먼저 물어보세요.
11
12작업에 테스트나 빌드가 포함된 경우, 이 세션에서 실제로 테스트나 빌드
13명령어를 실행하지 않았다면 성공을 주장하지 마세요.
14
15오류 메시지, API 응답 또는 스택 추적을 절대 만들어내지 마세요. 직접
16보지 않았다면 그렇게 말하세요.
17
18정말로 모를 때는, 올바른 대답은 "모릅니다" 또는 "먼저 확인해야 합니다"입니다.
19둘 다 자신감 있는 추측보다 낫습니다.

이 규칙들은 당연해 보입니다.

하지만 그렇지 않습니다. 기본적으로 Claude 는 도움이 되는 것처럼 보이도록 최적화되어 있고, "모릅니다"라는 말은 명시적인 허가 없이는 도움이 되지 않는 것처럼 느껴지기 때문입니다.

마지막 줄이 가장 중요합니다. 이것이 바로 "모르겠습니다" 라이센스이며, 대부분의 사람들은 이를 부여하지 않습니다.

계층 2: 쓰기 전 확인 패턴

두 번째 계층은 Claude 가 코드를 작성하기 전에 확인하도록 강제합니다. CLAUDE.md 의 정직 규칙 아래에 다음을 추가하세요:

markdown
1## 확인 프로토콜
2
3기호(함수, 클래스, 타입, 상수)를 사용하는 코드를 쓰거나 수정하기 전에,
4다음 중 하나를 수행하세요:
5
61. 해당 기호가 정의된 파일을 읽고 시그니처를 확인하세요.
72. `grep -r "기호이름" .`을 실행하거나 Glob 도구를 사용하여 찾으세요.
83. package.json, requirements.txt, Cargo.toml 또는 이에 준하는 파일에서
9 의존성을 확인하세요.
10
11확인을 건너뛰었다면, 코드 앞에 다음 주석을 추가하세요:
12`// 미확인: 이 기호가 존재하는지 확인하지 않았습니다`
13
14둘 이상의 파일을 건드리는 작업에는 계획-후-실행 모드가 선호됩니다.
15시작하기 전에 Shift+Tab을 눌러 계획 모드로 전환하세요.

이렇게 하면 Claude 가 세션당 몇 번의 추가 도구 호출을 더 사용하게 됩니다. 하지만 가짜 함수 호출을 디버깅하는 데 몇 시간을 허비하는 것을 막아줍니다.

계층 3: 실시간으로 거짓말을 잡아내는 훅

세 번째 계층은 settings.json 에 있는 훅으로, Claude 가 파일을 작성할 때마다 타입 체커나 린터를 실행합니다. Claude 가 import 를 만들어낸 경우, 체커가 즉시 실패하고 Claude 는 작업이 완료되었다고 주장하기 전에 문제를 수정해야 합니다.

json
1{
2 "hooks": {
3 "PostToolUse": [
4 {
5 "matcher": "Write(*.ts|*.tsx)|Edit(*.ts|*.tsx)",
6 "hooks": [
7 { "type": "command", "command": "npx tsc --noEmit --pretty false 2>&1 | head -20" }
8 ]
9 },
10 {
11 "matcher": "Write(*.py)|Edit(*.py)",
12 "hooks": [
13 { "type": "command", "command": "ruff check --quiet $file && pyright $file 2>&1 | head -20" }
14 ]
15 },
16 {
17 "matcher": "Write(*.rs)|Edit(*.rs)",
18 "hooks": [
19 { "type": "command", "command": "cargo check --message-format=short 2>&1 | head -20" }
20 ]
21 }
22 ]
23 }
24}

훅 출력은 컨텍스트로 Claude 에게 다시 전달됩니다. tsc 가 "Cannot find module 'foo'"라고 말하면, Claude 는 즉시 이를 확인하고 만들어낸 import 를 수정합니다. PostToolUse 검사를 통과하는 조작된 코드는 없습니다.

테스트와 관련된 작업의 경우, Claude 가 세션이 종료되었다고 선언하기 전에 테스트 스위트를 실행하는 Stop 훅을 추가하세요:

json
1"Stop": [
2 {
3 "hooks": [
4 { "type": "command", "command": "npm test 2>&1 | tail -30" }
5 ]
6 }
7]

이제 Claude 는 실제로 테스트를 실행하지 않고는 "완료, 테스트 통과"라고 말할 수 없습니다. 훅이 테스트를 실행합니다.

결과는 Claude 에게 다시 전달됩니다. 테스트가 실패하면 Claude 는 이를 수정하거나 통과하지 않는다는 점을 인정해야 합니다.

계층 4: 사실 확인 서브 에이전트

네 번째 계층은 Claude 의 주장이 배포되기 전에 검토하는 역할만 하는 서브 에이전트입니다.

.claude/agents/fact-checker.md 에 다음을 추가하세요:

yaml
1---
2name: fact-checker
3description: Claude가 코드의 기능, 통과한 테스트, 라이브러리 지원 등에 대해 주장한 후에 이 에이전트를 사용하세요. 모든 커밋 전, 모든 사용자 대상 요약 전, 그리고 새로운 종속성이 포함된 작업 후에 호출하세요.
4tools: Read, Grep, Glob, Bash
5model: sonnet
6---
7
8당신은 주장을 확인하며, 코드를 작성하지 않습니다.
9
10호출되면 다음을 수행하세요:
11
121. 최근 대화에서 모든 사실적 주장을 식별하세요. 예시:
13 "함수 X는 Y를 수행합니다", "테스트가 통과합니다", "라이브러리 Z는 W를 지원합니다",
14 "이 import는 올바릅니다".
15
162. 각 주장에 대해 독립적으로 확인하세요:
17 - 코드 주장: 실제 파일을 읽고 확인하세요
18 - 테스트 주장: 직접 테스트를 실행하세요
19 - 라이브러리 주장: 실제 패키지나 문서를 확인하세요
20 - Import 주장: 패키지가 종속성 매니페스트에 있는지 확인하세요
21
223. 보고서를 생성하세요:
23 - 확인됨: 주장, 증거 (file:line 또는 명령어 출력)
24 - 틀림: 주장, 실제 사실
25 - 확인 불가능: 주장, 확인할 수 없었던 이유
26
27"저를 믿으세요" 유형의 주장을 절대 받아들이지 마세요. 스스로 주장을 하지 마세요. 확인할 수 없다면, 올바른 출력은 "확인 불가능"입니다.

커밋 전이나 팀과 결과를 공유하기 전에 이 에이전트를 호출하세요. 다른 3개 계층이 놓친 거짓말을 잡아냅니다.

rody - inline image

"모르겠습니다" 라이센스

Claude 는 도움이 되도록 훈련되었으며, 무지를 인정하는 것은 도움이 되지 않는 것처럼 느껴집니다. 그래서 추측하고, 그 추측은 그럴듯해 보입니다.

해결책은 모를 권리를 부여하는 것입니다. CLAUDE.md 가 절반을 담당합니다. 당신의 반응이 나머지 절반입니다. "확인하지 않았습니다"라는 말에 인내심으로 보상하면 모든 세션에서 정직한 Claude 를 얻을 수 있습니다. 좌절감으로 처벌하면 Claude 는 다시 추측하기 시작합니다.

설정이 아닌 습관입니다. 스택에서 가장 과소평가된 해결책입니다.

실제로 작동하는지 확인하는 방법

일상적인 세션에서 나타나는 세 가지 신호입니다.

Claude 가 종속성을 추가하기 전에 물어봅니다. 조용히 npm install 하는 대신 "X를 추가할까요, 아니면 stdlib를 사용할까요?"라고 묻습니다.

Claude 가 기존 코드에 대해 이야기할 때 file:line 을 참조합니다. "validateToken 함수가 Y를 수행합니다" 대신 "src/auth/middleware.ts:47validateToken 이 Y를 수행합니다"라고 말합니다.

tsc 와 린터가 더 이상 불평하지 않습니다. 훅이 드문 조작을 즉시 잡아내고 Claude 가 스스로 수정하므로, 당신이 확인할 때쯤이면 거짓말은 사라져 있습니다.

하루 이틀 후에도 이런 현상이 보이지 않나요? 한 계층이 로드되지 않은 것입니다. 일반적으로 CLAUDE.md 의 위치나 이름이 잘못된 경우입니다.

rody - inline image

Claude 가 계속 거짓말하게 만드는 일반적인 실수

CLAUDE.md 가 너무 깁니다. Claude 는 첫 부분을 읽고 나머지는 훑어봅니다. 정직 규칙은 처음 50줄 안에 넣으세요.

훅이 자동으로 기록됩니다. 출력이 stdout 에 도달하지 않으면 Claude 는 자신이 거짓말했는지 알지 못합니다. 훅 출력이 세션으로 다시 전달되는지 확인하세요.

계획 모드를 건너뜁니다. 계획 모드는 Claude 가 코드를 작성하기 전에 잘못된 가정을 드러내는 곳입니다. 이를 건너뛰면 거짓말을 잡을 가장 저렴한 기회를 놓치는 것입니다.

사실 확인 에이전트를 호출하지 않습니다. 서브 에이전트는 실제로 호출해야만 작동합니다. @fact-checker 를 커밋 흐름의 일부로 만드세요.

"모릅니다"에 대해 나쁘게 반응합니다. 한 번 정직을 처벌하면 Claude 는 다시 추측하기 시작합니다. 이 한 가지 없이는 다른 세 가지 계층도 효과가 없습니다.

rody - inline image

5분 정직 감사

1분: CLAUDE.md 정직 규칙과 확인 프로토콜을 프로젝트 루트에 복사하세요.

1분: 훅 블록을 ~/.claude/settings.json 또는 .claude/settings.json 에 복사하세요.

2분: 위 템플릿을 사용하여 .claude/agents/fact-checker.md 를 만드세요.

1분: 일반적으로 다시 확인하는 작업을 실행하세요. tsc 출력이 Claude 로 돌아오는지 확인하세요. Claude 가 명시적으로 "확인됨" 또는 "확인하지 않았습니다"라고 말하는지 확인하세요.

완료되었습니다. 조작이 "세션마다 발생"에서 "드물고 즉시 잡힘"으로 줄어듭니다. 모델이 더 똑똑해진 것이 아닙니다. 당신의 설정이 그렇게 된 것입니다.

읽어주셔서 감사합니다!

rody - inline image
원클릭 저장

YouMind로 바이럴 글을 AI 심층 읽기

소스를 저장하고, 핵심 질문을 던지고, 주장을 요약해 바이럴 글을 다시 활용할 수 있는 노트로 바꾸세요. 하나의 AI 워크스페이스에서 모두 할 수 있습니다.

YouMind 둘러보기
크리에이터를 위해

당신의 Markdown을 깔끔한 𝕏 글로

직접 쓴 장문을 올릴 때 이미지, 표, 코드 블록을 𝕏에 맞게 정리하는 일은 번거롭습니다. YouMind는 전체 Markdown 초안을 깔끔하고 바로 게시할 수 있는 𝕏 글로 바꿔 줍니다.

Markdown → 𝕏 사용해 보기

분석할 패턴 더 보기

최근 바이럴 아티클

더 많은 바이럴 아티클 보기