대화가 길어지면 답이 뭉개지고, 아까 말한 걸 또 묻습니다. 모델이 지쳐서가 아닙니다. 책상이 좁아진 겁니다. 이 글은 그 책상 안에서 실제로 무슨 일이 벌어지는지 뜯어봅니다.
1. 바보가 된 게 아니라, 책상이 좁아진 겁니다
클로드를 오래 쓰신 분이라면 이런 경험이 있으실 겁니다. 처음 30분은 날아다니는데, 두 시간쯤 지나면 방금 정한 규칙을 잊고 이미 고친 파일을 또 고칩니다.
흔한 해석은 "대화가 길어져서 헷갈린 것"입니다. 절반만 맞습니다. 정확히는 모델이 한 번에 올려놓을 수 있는 책상 넓이가 정해져 있고, 그 위가 이미 꽉 찼다는 뜻입니다. 이 책상을 컨텍스트 창(context window)이라고 부릅니다.
2. 클로드는 대화를 기억하지 않습니다 — 매번 백지에서 시작합니다
여기가 신입들이 제일 많이 헷갈리는 지점입니다. 화면에는 대화가 죽 이어져 보이니, 클로드가 앞의 내용을 기억하고 있다고 느낍니다.
아닙니다. 요청 하나하나가 전부 첫 만남입니다. 여러분이 새 메시지를 보낼 때마다, 지금까지의 대화 전체 + 규칙 파일 + 읽은 파일들이 통째로 다시 모델 앞에 놓입니다. 모델은 그걸 처음 보는 것처럼 읽고 답합니다.
사람으로 치면 이렇습니다. 매일 아침 기억을 잃는 직원이 있는데, 대신 책상 위 서류를 순식간에 다 읽습니다. 어제 일을 아는 게 아니라, 어제 남긴 메모를 다시 읽는 겁니다.
챗GPT 대화창과 겉보기는 같습니다. 다른 건 과금과 성능이 갈리는 지점입니다 — 대화가 길어질수록 매 요청이 무거워지고, 책상이 차면 앞쪽부터 밀려납니다. 그래서 "아까 그거"가 사라집니다.
3. 그 책상에 제일 먼저 올라가는 건 「사규」입니다
클로드 코드를 쓰신다면 CLAUDE.md라는 파일을 두셨을 겁니다. 프로젝트 규칙을 적어두면 매번 설명하지 않아도 되는 파일입니다.
편한 만큼 대가가 있습니다. 이 파일은 매 세션 자동으로 책상에 올라갑니다. 일을 시작하기도 전에 자리를 먹는 고정비입니다. 그리고 대부분은 이 고정비가 얼마인지 한 번도 재보지 않습니다.
규칙 파일 말고도 도구·스킬 목록이 함께 올라갑니다. 그 재고를 실제로 세어본 기록은 클로드 코드에 202개를 깔아봤습니다에 정리해 뒀습니다.
4. 재보면 이렇습니다
저희 규칙 파일을 실제로 쟀습니다.
카드뉴스로 보기
51,116자 · 2,301줄 — 매 세션 대략 3만~4만6천 토큰.
그중 1,360줄(59%)이 빈 줄이었고, 그 가운데 775줄은 지워도 정보가 하나도 안 줄어드는 잉여였습니다.
더 나빴던 건 구조였습니다. 제일 큰 덩어리가 「영문 블로그」라는 제목을 달고 있었는데, 그 안에 카드뉴스·릴스·게시 형식이 328줄 중 298줄을 차지하고 있었습니다. 제목과 내용이 어긋나면 찾을 수가 없습니다. 그래서 매번 전부 읽게 됩니다.
5. 지우지 말고 옮깁니다
줄이는 방법은 하나뿐인 것 같지만 둘입니다. 지우거나, 옮기거나. 지우면 나중에 그 규칙이 없어서 같은 사고를 반복합니다. 그래서 옮겼습니다.
- 판단 기준은 남깁니다 — 무엇을 하면 안 되는지, 무엇을 먼저 하는지. 이건 매 순간 필요합니다.
- 절차는 부를 때만 읽히는 자리로 — 게시 순서, 파일 형식, 명령어. 이건 그 일을 할 때만 필요합니다.
- 맨 위에 지도를 답니다 — 어디에 뭐가 있는지 한 표. 이게 없으면 옮긴 순간 못 찾습니다.
결과: 51,116자 → 26,808자 (48% 감소).
옮긴 482줄이 전부 목적지에 있는지 기계로 대조했습니다 — 손실 0.
중요한 건 감소율이 아니라 어떤 종류의 글자를 덜어냈는가입니다. 매 세션 필요한 것만 남기고, 가끔 필요한 것은 가끔 읽히게 했습니다.
6. 가져가세요 — 그대로 복붙하시면 됩니다
세 가지를 드립니다. 게이트 없습니다.
① 내 규칙 파일이 얼마나 무거운지 재는 한 줄
node -e "const s=require('fs').readFileSync('CLAUDE.md','utf8'),L=s.split('\n');console.log('줄',L.length,'· 빈 줄',L.filter(l=>!l.trim()).length,'· 문자',s.length,'· 대략 토큰',Math.round(s.length/1.4))"
먼저 재보세요. 대부분 예상보다 큽니다.
② 잉여 빈 줄만 걷어내는 한 줄 (정보 손실 0)
node -e "const f='CLAUDE.md',fs=require('fs');let n=0;fs.writeFileSync(f,fs.readFileSync(f,'utf8').split('\n').filter((l,i,a)=>!(l.trim()===''&&a[i-1]!==undefined&&a[i-1].trim()==='')).join('\n'));console.log('정리 완료')"
먼저 백업하세요: cp CLAUDE.md CLAUDE.md.bak
③ 규칙 파일 뼈대 — 판단만 남긴 골격
# 프로젝트 규칙
## 🗺 어디를 봐야 하나 — 먼저 이 표를 본다
**전부 읽지 않는다.** 아래에서 필요한 줄만 찾아 그 파일 하나만 연다.
이 파일은 **판단 기준**만 갖는다. 절차·형식·코드는 여기 없다.
| 무엇을 하려는가 | 어디로 |
|---|---|
| 무엇을 먼저 하나 (우선순위·금지) | 이 파일 아래 |
| 〈작업 A〉 절차 | 📖 docs/a.md |
| 〈작업 B〉 절차 | 📖 docs/b.md |
| 지난 결정 기록 | 📖 log.md |
## 하면 안 되는 것
- (되돌리기 어려운 일 — 삭제·배포·발송은 확인 없이 실행하지 않는다)
## 먼저 하는 것
- (순서가 중요한 일)
⚠ 규칙을 바꾸면 **정본 한 곳만** 고친다. 여기에 옮겨 적으면 두 벌이 되고 시간이 지나 어긋난다.
⚠ 옛 규칙은 지우지 말고 취소선 + 폐기 표시 + 정본 링크를 단다.
7. 다음 편
책상 넓이를 알았으니, 다음은 그 위에 올라가는 「사규」 자체를 해부합니다. 시스템 프롬프트와 내가 쓴 프롬프트는 무엇이 다른지, 왜 어떤 규칙은 먹히고 어떤 규칙은 무시되는지.
「클로드 해부」는 6편으로 갑니다 — 컨텍스트 창 · 시스템 프롬프트 · 토큰 · 도구 사용 · 스킬과 에이전트 · 모델 선택. 매 편 복붙해서 바로 쓰는 것을 하나씩 드립니다.