본문 바로가기
AI 인공지능

Claude Code 토큰, 나도 모르게 새고 있었다 — 실전에서 막은 3가지

by 요즘IT 2026. 7. 11.

Claude Code 매일 돌리는 분들 있죠?

저도 서버에 도커로 올려놓고 거의 매일 씁니다. 헤츠너 서버 한 대에 컨테이너로 띄워서 --dangerously-skip-permissions 붙여 자동으로 굴리거든요. 편해요. 진짜 편한데.

근데 어느 날 문득 이런 생각이 들더라고요. "이거 나 지금 돈 새고 있는 거 아닌가?"

한 외국 개발자가 딱 이 지점을 짚은 글을 올렸어요. 자기가 매일 Claude Code로 실제 업무 툴을 만드는데, 조용히 돈을 갉아먹던 습관이 세 개 있었다는 거예요. 읽어보니까 저도 똑같이 당하고 있던 것들이라 정리해봤습니다.

솔직히 저도 처음엔 몰랐던 것들이에요.


1. "다 됐어요!" 근데 코드는 한 번도 안 돌려봤다

제일 열받는 케이스부터.

Claude가 코드를 쫙 고쳐요. 그리고 당당하게 말합니다. "완료했습니다 ✅". 그럼 우리는 믿잖아요? 됐다니까 넘어가요.

근데 나중에 터져요. 알고 보니 그 코드, 한 번도 실행 안 해본 거였어요.

어? 이상하죠? 분명 다 됐다고 했는데.

이게 왜 문제냐면요. AI가 "됐다"고 말하는 거랑 "실제로 돌아가는 걸 확인했다"는 완전히 다른 얘기거든요. 사람으로 치면, 시험 답안지 안 채점하고 "다 맞았을걸요?" 하는 거예요. 그 자신감의 근거가 없어요.

CLAUDE.md에 "확인 없이 완료라고 하지 마"라고 규칙을 박아넣을 순 있어요. 근데 이게 웃긴 게, 규칙은 급하면 무시돼요. 사람도 그렇잖아요. 마감 닥치면 "일단 됐다고 치자" 하고 넘어가는 거.

그래서 원저자가 실제로 쓴 해법이 **Stop 훅(hook)**이에요.

훅이 뭐냐면, Claude가 자기 턴을 끝내려고 할 때마다 자동으로 끼어드는 스크립트예요. 문지기라고 생각하면 돼요. Claude가 "저 이제 끝낼게요" 하고 나가려는 순간, 문 앞에서 딱 막아서는 거죠. "야, 테스트는 돌려봤어?"

settings.json에 이렇게 배선을 깔아둡니다.

"hooks": {
  "Stop": [
    { "hooks": [ { "type": "command", "command": "python3 ~/.claude/hooks/verify-gate.py" } ] }
  ]
}

핵심은 저 verify-gate.py예요. 이 스크립트가 이번 세션에서 진짜로 테스트를 돌렸는지, 기능을 실제로 실행해봤는지를 검사해요. 안 했으면? Claude는 물리적으로 "완료"라고 말을 못 해요. 문이 안 열리거든요.

원저자 말로는 이거 깔고 나서 가짜 완료가 0으로 떨어졌다고 합니다.

이게 포인트예요. 규칙은 부탁이고, 훅은 강제예요. 부탁은 무시당하지만 강제는 안 당하죠.


2. 입 한 번 안 뗐는데 이미 7천 토큰이 나갔다

이건 진짜 조용한 도둑이에요.

원저자가 자기 세팅을 재봤대요. 매 세션마다, 내가 뭐 한 마디 타이핑하기도 전에 컨텍스트에 기본으로 실려 들어가는 토큰이 얼마인지.

7,229 토큰.

이게 무슨 뜻이냐면요. Claude한테 "안녕"이라고 한 글자 치는 순간에도, 그 뒤에는 이미 7천 토큰짜리 짐이 딸려 들어가 있다는 거예요. 그리고 이 짐은 메시지 보낼 때마다 매번 계산돼요. 한 번이 아니라 매번.

CLAUDE.md 파일들, 자동으로 로드되는 규칙들, 안 쓰는 MCP 툴 정의들. 이런 게 다 쌓여서 그래요.

비유하자면, 편의점 잠깐 가는데 캠핑 장비를 풀세트로 짊어지고 나가는 거예요. 텐트에 코펠에 침낭까지. 정작 사는 건 삼각김밥 하나인데.

저도 이 얘기 듣고 제 서버 세팅 열어봤거든요? 안 쓰는 MCP 서버가 몇 개 그냥 켜져 있더라고요. 언젠가 쓰겠지 하고 붙여놓은 것들. 근데 걔네가 매 요청마다 자릿세를 받고 있었어요.

해결은 간단해요.

자주 안 쓰는 규칙은 자동 로드에서 빼고, 필요할 때만 Claude가 읽어가게 바꿔요. 그리고 매일 안 쓰는 MCP 서버는 그냥 꺼요. 원저자는 이 작업 하나로 오후 반나절 만에 고정 로드를 거의 절반으로 줄였다고 합니다.

한번 세보세요. CLAUDE.md 몇 개인지, 항상 켜져 있는 규칙 몇 줄인지, 안 쓰는 MCP 몇 개인지. 생각보다 무겁습니다.


3. 어제 정한 걸 오늘 아침에 다 까먹는다

Claude Code 써보면 아는 그 답답함 있죠.

새 세션 열면요, 어제 우리가 뭘 정했는지 하나도 기억을 못 해요. 백지예요. 매일 아침 기억상실증 걸린 동료랑 다시 인사하는 느낌.

여기서 요즘 유행하는 해법은 벡터 데이터베이스예요. 대화 기록을 다 임베딩해서 검색하게 만드는 거. 근데요, 원저자가 딱 잘라 말해요. 혼자 쓰는 규모에선 그거 필요 없다고.

맞는 말이에요. 개인이 쓰는데 벡터DB까지 세팅하는 건, 김치냉장고 하나 사려고 냉동창고를 짓는 격이거든요.

그래서 원저자가 실제로 쓰는 방식은 촌스러울 만큼 단순해요.

MEMORY.md라는 목차 파일 하나 두는 거예요. 기억 하나당 딱 한 줄. 그리고 사실(fact)마다 작은 파일 하나씩 따로 만들어요. 세션 시작하면 Claude가 이 목차를 먼저 읽고, 지금 필요한 파일만 골라서 열어봐요. 새로 정한 게 생기면 세션 끝에 다시 적어두고요.

그냥 텍스트 파일이에요. grep으로 검색되고, 인프라도 필요 없고, 백업도 복사 한 방이면 끝.

이게 은근히 서버 운영이랑 잘 맞아요. 저는 도커 컨테이너들이 /opt/workspace를 같이 보게 해놨거든요. 여기다 MEMORY.md 하나 놔두면 컨테이너 새로 띄워도 기억이 안 날아가요. 화려한 기술 없이도 "어제 우리가 이거 이렇게 하기로 했지" 하는 상태로 세션을 시작할 수 있는 거죠.

MEMORY.md index file structure
MEMORY.md index file structure


결국 핵심은, 규칙 말고 구조예요

세 개를 관통하는 게 하나 있어요.

"이렇게 해줘"라고 부탁하는 걸로는 안 된다는 것.

  • 완료라고 거짓말하지 마 → 부탁 (X) → 훅으로 강제 (O)
  • 토큰 아껴줘 → 부탁 (X) → 안 쓰는 걸 아예 꺼버리기 (O)
  • 어제 기억해줘 → 부탁 (X) → 파일로 남겨두기 (O)

AI한테 "잘 좀 해줘"라고 말하는 건 한계가 있어요. 대신 잘못할 수 없는 환경을 만들어주는 거죠. 문지기를 세우고, 짐을 덜어주고, 메모지를 쥐여주는 거예요.

솔직히 저도 그동안 CLAUDE.md에 규칙만 잔뜩 써놓고 "왜 말을 안 들어" 하고 있었거든요. 근데 문제는 Claude가 아니라 제 구조였던 거예요.

혹시 Claude Code를 매일 쓰는데 요금이나 결과물이 뭔가 찜찜했다면, 오늘 이 세 개 중 하나만 손봐도 체감이 다를 거예요. 저는 다음 글에서 이걸 도커 환경에 어떻게 자동으로 물려놨는지, 실제 세팅을 좀 더 풀어볼 생각이에요.

일단 오늘은 여러분 세팅에서 안 쓰는 MCP 하나 끄는 것부터 시작해보세요. 반나절이면 충분합니다.