Claude Code에서 컨텍스트와 메모리 관리하기: /compact, CLAUDE.md, 토큰 예산 (2026)
Claude Code에서 컨텍스트는 하나의 세션이 지니는 작업 메모리(여러분의 프롬프트, 읽어들인 파일, 대화 기록, 도구 출력)이며, /clear하거나 세션을 닫으면 사라져요. 메모리는 여러분이 작성하는 CLAUDE.md와 Claude가 스스로 기록하는 자동 메모리로 이루어진, 세션을 넘나드는 지식이에요. 컨텍스트와 메모리를 잘 관리한다는 건 이런 뜻이에요. /context로 측정하고, 60% 부근에서 일찍 /compact로 압축하고, 작업을 바꿀 때는 /clear로 초기화하고, 중요한 결정은 모두 CLAUDE.md에 고정해 아무것도 "잊히지" 않게 하는 거예요. 이렇게 하면 긴 세션을 안정적으로 유지하고 토큰 비용도 낮게 유지할 수 있어요.
Claude Code로 길고 여러 파일에 걸친 세션을 써 봤다면 아마 이런 경험을 했을 거예요. 순조롭게 진행되다가 20분 전에 확정한 결정을 Claude가 "잊기" 시작하거나, 터미널이 컨텍스트가 거의 가득 찼다고 경고하죠. 이 글은 대부분의 가이드가 따로 다루는 세 가지 요소—세션 내 컨텍스트, 세션 간 메모리, 토큰 예산—를 하나의 실전 워크플로로 묶어요. 완전한 초보자라면 먼저 입문 가이드를 읽으세요. 하지만 매일 여러 파일 세션을 돌린다면, 이 글이 바로 여러분을 위한 거예요.
Claude Code의 컨텍스트 vs 메모리: 무엇이 다른가요?
이 두 단어는 자주 같은 의미로 쓰이지만, 완전히 다른 것이에요. 그리고 이 둘을 혼동하는 게 Claude Code에서 컨텍스트를 관리할 때 겪는 대부분 문제의 근원이에요. 컨텍스트(컨텍스트 윈도)는 Claude가 지금 이 순간 "볼 수 있는" 단기 메모리예요. 여러분의 질문, 읽어들인 파일의 내용, 대화 기록, 실행한 도구 결과, 그리고 세션 시작 시 로드된 CLAUDE.md가 여기에 들어가요. 이건 유한하고, 세션을 끝내거나 /clear를 입력하면 사라져요.
메모리(Claude Code의 영속 메모리)는 세션을 넘어 살아남아요. 두 종류가 있어요. CLAUDE.md—프로젝트에 대해 Claude에게 알려주려고 여러분이 작성하는 파일—와 자동 메모리—Claude가 스스로 배운 것을 저장하는 곳이에요. 핵심은 이거예요. 메모리는 컨텍스트 안에 있는 게 아니라, 새 세션이 시작될 때마다 컨텍스트로 다시 로드돼요.
| 기준 | 컨텍스트(세션 내) | 메모리(세션 간) |
|---|---|---|
| 담는 내용 | 프롬프트, 읽은 파일, 대화 기록, 도구 출력, 로드된 CLAUDE.md | CLAUDE.md(여러분이 작성) + 자동 메모리(Claude가 작성) |
| 지속 기간 | 세션 내에서만. /clear하거나 닫으면 사라짐 | 디스크에 저장되어 새 세션마다 다시 로드됨 |
| 누가 관리하나 | 작업하는 동안 자동으로 채워짐 | 여러분이 의도적으로 작성 / Claude가 기록 |
| 컨텍스트가 가득 찼을 때 | /compact 또는 /clear가 필요 | 영향 없음—여전히 다시 로드됨 |
다시는 헷갈리지 않도록 한 줄로 정리할게요. 컨텍스트는 Claude가 지금 생각하고 있는 것, 메모리는 Claude가 늘 알고 있는 것이에요.
왜 모든 Claude Code 세션은 빈 컨텍스트로 시작할까요?
많은 사람이 Claude가 동료처럼 어제의 대화를 "기억한다"고 은연중에 여겨요. 하지만 그렇지 않아요. 근본적으로 언어 모델에는 내장된 장기 메모리가 없어요—Claude는 사실 대화를 기억하지 못해요. 새 세션은 모두 깨끗하고 텅 빈 컨텍스트 윈도예요. "내 프로젝트를 기억한다"는 느낌은 사실 Claude Code가 각 세션 시작 시 메모리(CLAUDE.md와 자동 메모리)를 자동으로 다시 로드하는 데서 오는 것이지, 모델이 무언가를 떠올리는 게 아니에요.
바로 이 때문에 메모리가 존재해요. 메모리는 리셋할 때마다 "기억을 잃는" 컨텍스트 윈도를 보완하는 다리예요. 이걸 이해하고 나면 Claude가 스스로 기억해 주기를 기대하는 걸 멈추고, 기억해야 할 것을 의도적으로 적어 두기 시작하게 돼요. 세션마다 컨텍스트 윈도가 새로 시작되는 동작은 컨텍스트 윈도에 관한 Claude Code 공식 문서(2026-08-20 접속)에 설명되어 있어요.
실무적인 결론은 이거예요. 파일에 기록되지 않고 채팅 안에만 존재하는 결정은 사라질 위험이 있어요—세션이 끝날 때, 또는 컨텍스트가 압축되면 그보다 더 일찍요. 이 점은 /compact 섹션에서 다시 다룰게요.
/context와 토큰 상태로 컨텍스트 측정하기
측정할 수 없는 것은 관리할 수 없어요. 가장 먼저 외워 둘 명령은 /context예요. 세션 중에 이걸 입력하면 Claude Code가 현재 로드된 Memory files(어떤 CLAUDE.md가 컨텍스트에 들어갔는지)와 컨텍스트 윈도 사용 비율을 나열해 줘요.
/context
이건 여러분의 CLAUDE.md가 실제로 컨텍스트에 들어갔는지 확인하는 가장 믿을 만한 방법이에요—추측하지 말고 Memory files 목록을 보세요. 게다가 터미널의 상태 표시줄에는 사용 중인 토큰 비율이 실시간으로 표시돼요. 컨텍스트가 높은 임계값에 도달하면 세션이 멈추지 않도록 Claude Code가 자동으로 압축(auto-compact)해요.
| 컨텍스트 사용률 | 상태 | 할 일 |
|---|---|---|
| < 60% | 안전 | 평소처럼 계속 작업 |
| 60-80% | 주의 | 적극적으로 /compact, 작업을 바꾸기 직전이라면 /clear |
| ~80-83% | 자동 압축 작동 | Claude Code가 알아서 압축—하지만 요약 품질을 통제하려면 먼저 직접 압축하는 게 좋음 |
자동 압축 임계값은 Claude Code 공식 문서(2026-08-20 접속)에 따르면 대략 80-83%이지만, 이 수치는 버전에 따라 달라질 수 있어요.
/compact—컨텍스트를 올바르게 압축하기
이건 이 글에서 가장 중요한 명령이에요. /compact는 현재 대화 전체를 읽어 압축된 요약을 만든 다음, 기존 대화를 그 요약으로 대체해요. 그 결과, 작업의 흐름은 그대로 유지하면서 대부분의 토큰을 확보해요—Claude는 여러분이 무엇을 하는지 압축된 형태로 여전히 알고 있어요.
# automatic compaction
/compact
# compact with instructions on what to keep
/compact keep the DB schema decisions and the files I edited, drop the debug logs
언제 압축해야 할까요? 제 실전 규칙은 이거예요. 60% 부근에서 적극적으로, 90%까지 기다리지 마세요. 대화가 아직 "깨끗할" 때 일찍 압축하면, 컨텍스트가 이미 꽉 찬 뒤에 억지로 압축할 때보다 훨씬 나은 요약이 나와요—그 시점에는 Claude가 많은 것을 버려야 하고 요약이 세부를 놓치기 쉬워요. /compact <instructions>로 무엇을 남길지 명시하면 품질이 크게 올라가요.
⚠️ 한계에 관한 중요한 참고: 압축은 손실이 있어요. 대화 안에만 존재하고 파일에 기록되지 않은 것은 압축 후에 영구히 사라질 수 있어요. 이건 사람들이 작업 도중에 결정을 "잃게" 만드는 실제 버그예요. 아래 표는 무엇이 살아남고 무엇이 그렇지 않은지 보여줘요.
/compact 후에도 남음 | 사라짐 / 자동으로 다시 로드되지 않음 |
|---|---|
프로젝트 루트의 CLAUDE.md(디스크에서 다시 주입됨) | 하위 디렉터리에 중첩된 CLAUDE.md |
자동 메모리 MEMORY.md(파일 상단이 다시 로드됨) | 경로 범위 규칙(paths:로 선언). 해당 파일이 더 이상 열려 있지 않게 되면 |
.claude/rules/의 범위 없는 규칙 | 채팅에서 말만 하고 파일에 기록하지 않은 지시 |
짧게 요점만. 압축하기 전에 Claude에게 "중요한 결정을 CLAUDE.md에 써 줘"라고 말한 다음 /compact를 실행하세요. 디스크에 있는 것은 안전해요.
/clear vs /compact—어느 것을 써야 할까요?
이 두 명령은 헷갈리기 쉽지만, 쓰임새는 아주 달라요. 짧게 말하면, 같은 작업을 이어 갈 때는 /compact, 다른 것으로 전환할 때는 /clear예요.
| 요소 | /compact | /clear |
|---|---|---|
| 하는 일 | 대화를 요약으로 압축하고 흐름을 유지 | 대화를 통째로 지우고 빈 컨텍스트로 시작 |
| 사용 시점 | 같은 작업인데 컨텍스트가 가득 참 | 무관한 작업/프로젝트로 전환 |
| 이전 컨텍스트 유지? | 예(요약으로) | 아니요 |
| CLAUDE.md + 자동 메모리 | 여전히 다시 로드됨 | 여전히 다시 로드됨 |
기억할 점은 이거예요. /clear든 /compact든, 세션 간 메모리(CLAUDE.md와 자동 메모리)는 여전히 다시 로드돼요—그래서 잃는 건 임시 대화뿐이고, 프로젝트의 "기본 지식"은 잃지 않아요. 작업을 바꿀 때는 주저하지 말고 /clear하세요. 무관한 옛 대화를 붙들고 있으면 토큰만 태우고 Claude의 주의를 흩뜨릴 뿐이에요.
CLAUDE.md—여러분이 직접 쓰는 장기 메모리
CLAUDE.md는 여러분이 직접 통제하는 가장 강력한 메모리 도구예요. 매 세션마다 가장 넓은 범위에서 가장 좁은 범위 순으로 자동으로 컨텍스트에 로드돼요. Claude Code는 여러 단계의 CLAUDE.md를 읽어 하나로 병합해요.
| 단계 | 위치 | 용도 |
|---|---|---|
| 관리 정책 | 조직/관리자가 설정 | 머신/팀 전체에 적용되는 정책 |
| 사용자 | ~/.claude/CLAUDE.md | 개인 설정. 모든 프로젝트에 적용 |
| 프로젝트 | ./CLAUDE.md | 프로젝트 규약. git에 커밋해 팀 전체가 사용 |
| 로컬 | ./CLAUDE.local.md | 개인 메모. 커밋하지 않음 |
넓은 범위에서 좁은 범위로의 로드 순서는, 더 좁은 단계(프로젝트, 로컬)가 더 넓은 단계에 덧붙일 수 있다는 뜻이에요. 가장 빠르게 시작하는 방법은 /init를 실행하는 거예요—Claude Code가 코드베이스를 스캔해 프로젝트용 출발점 CLAUDE.md를 만들어 줘요.
/init
효과적인 CLAUDE.md 작성법: 짧게—약 200줄 이내로 유지하세요. 파일이 길면 매 세션 컨텍스트를 소모할 뿐 아니라 준수율도 떨어져요(지시가 너무 많으면 Claude가 우선순위를 정하기 어려워요). 비대해진 컨텍스트 파일이 왜 20% 더 많은 비용을 유발하는지에 대한 실측 분석이 있어요. 구체적이고 검증 가능한 것을 쓰세요. "2칸 들여쓰기를 쓴다"가 "보기 좋게 정리한다"보다 나아요. 긴 내용은 @path로 다른 파일을 가져오고, 문맥에 특화된 규약은 경로 범위 .claude/rules/(glob에 일치하는 파일을 열 때만 로드됨)에 넣어 컨텍스트를 아끼세요. 이 파일 구성을 더 깊이 알고 싶다면 제대로 된 CLAUDE.md 파일 작성하기 가이드를 보세요—세부 사항은 그 글이 담당하니 여기서는 반복하지 않을게요.
경로 범위 규칙의 간단한 예예요. .claude/rules/api-conventions.md 파일에 로드 시점을 제한하는 YAML 프런트매터를 붙인 거예요.
---
paths:
- "src/api/**/*.ts"
---
Use camelCase for function names; always validate input with Zod.
paths: 필드가 없는 규칙(범위 없음)은 루트 CLAUDE.md와 같은 우선순위로 매 세션 로드돼요. 범위가 지정된 규칙은 glob에 일치하는 파일을 열 때만 로드되고요—그래서 모든 걸 CLAUDE.md에 욱여넣는 것보다 컨텍스트를 더 아껴요. .claude/rules/의 전체 설정(폴더 구성, 사용자 수준 규칙, 로드 우선순위)은 CLAUDE.md 가이드를 보세요.
자동 메모리—Claude가 스스로 세션을 넘어 기억할 때
이건 오래된 가이드 상당수가 건너뛰는 비교적 새로운 기능(2026)이에요. 여러분이 작성하는 CLAUDE.md와 별개로, Claude Code는 스스로 작업 중 배운 것을 프로젝트 전용 메모리 폴더 ~/.claude/projects/<project>/memory/에 저장할 수 있어요.
그 안에서 MEMORY.md는 인덱스 역할을 해요. 파일의 처음 200줄 또는 처음 25KB 중—먼저 오는 쪽까지—가 매 세션 로드되고, 나머지 주제 파일은 필요할 때만 온디맨드로 로드돼요. 이 기능은 기본적으로 켜져 있어요. /memory 명령으로 관리하고(autoMemoryEnabled 옵션으로 전환), Claude가 배운 것을 기록하거나 떠올릴 때 "Saved N memories" / "Recalled N memories" 같은 알림을 보게 돼요.
/memory
구분을 분명히 할게요. CLAUDE.md는 여러분이 쓰는 것(지시—Claude가 어떻게 일하길 원하는지)이고, 자동 메모리는 Claude가 쓰는 것(배움—그것이 습득한 것)이에요. 둘은 서로를 보완해요. 자동 메모리 메커니즘과 로드 한도는 Claude Code 공식 메모리 문서(2026-08-20 접속)에 정리되어 있어요.
토큰 예산—더 저렴하고 지속 가능하게 작업하기
이 부분은 경쟁 가이드들이 거의 비워 두는 대목이에요. 최신 모델은 컨텍스트를 인식해요. 남은 토큰이 얼마인지 추적하고, 컨텍스트가 줄어들수록 자동으로 더 간결하게 답하고 도구를 더 아껴 써요. 하지만 운에 맡기지 마세요—아래 여섯 가지 규칙이 세션을 저렴하면서도 안정적으로 유지해 줘요.
| # | 규칙 | 이유 |
|---|---|---|
| 1 | ~60%에서 /compact, 90%까지 기다리지 않기 | 이른 요약이 손실이 적고 품질이 높음 |
| 2 | 한 세션을 입력 토큰 < 약 120k로 제한 | 너무 오래 가는 세션은 잡음이 늘고 비싸짐 |
| 3 | 무거운 읽기는 subagent에 위임 | subagent는 자체 컨텍스트가 있어 메인 컨텍스트를 "먹지" 않음 |
| 4 | 작업 청킹—단계로 나누기 | 각 단계가 깔끔한 세션이 되어 압축/클리어가 쉬움 |
| 5 | CLAUDE.md를 군살 없이 유지 | 매 세션 로드되는 토큰을 절약 |
| 6 | CLAUDE.md의 사람용 메모에는 HTML 주석 사용 | 주석은 컨텍스트에서 제거되어 토큰을 쓰지 않음 |
규칙 3은 강조할 만해요. Claude가 큰 디렉터리나 긴 로그를 읽어야 할 때는, 메인 세션에 곧바로 읽어들이지 말고 subagent에 넘기세요. subagent는 별도의 컨텍스트에서 작업하고 결론만 돌려줘요—여러분의 메인 컨텍스트는 가벼운 채로 남아요. 이런 작업 구성 방식은 subagent로 컨텍스트를 분리하기 글에서 자세히 다뤄요. 규칙 6의 주석에 대해선, <!-- -->로 감싼 CLAUDE.md 속 사람용 메모는 Claude의 컨텍스트에 절대 닿지 않으니, 토큰을 쓰지 않고 자유롭게 주석을 달 수 있어요.
컨텍스트와 메모리 관리 워크플로(실전 체크리스트)
이 모든 걸 하나로 묶어, 매일 실행할 수 있는 여섯 단계 루틴으로 만들어 볼게요.
- CLAUDE.md 생성:
/init를 실행해 코드베이스로부터 출발점 파일을 만들어요. - CLAUDE.md 다듬기: 200줄 이내로, 구체적이고 검증 가능하게 유지하고, 문맥 특화 규약은
.claude/rules/로 옮겨요. - 모니터링: 긴 세션 동안 주기적으로
/context를 입력하고, 상태 표시줄의 토큰 %를 주시해요. - 일찍 압축: 60% 부근에서 무엇을 남길지 지시와 함께
/compact해요(예: 결정 + 편집한 파일 남기기). - 작업 전환 시 초기화: 무관한 작업으로 넘어갈 때
/clear해요. - 결정 고정: 압축하거나 세션을 끝내기 전에 Claude에게 "이 결정을 CLAUDE.md에 반영해 줘"라고 말해, 압축으로 아무것도 잃지 않게 해요.
이미 만들어진 키트(AgentKit)로 속도 높이기
프로젝트마다 괜찮은 CLAUDE.md, .claude/rules/, subagent 설정을 작성하는 데는 적잖은 시간이 들어요. 더 빠르게 가고 싶다면, AgentKit 번들—지금 149달러(원래 198달러) 같은 기성 키트에는 예시 CLAUDE.md/rules와 함께 자체 컨텍스트를 가진 subagent가 들어 있어요—바로 위의 토큰 예산 원칙에 딱 들어맞죠. 저울질해 보고 싶다면 AgentKit이 무엇이고 그만한 값어치를 하는지를 자세히 살펴봤어요. 다만 컨텍스트 관리에서는, 키트를 쓰든 안 쓰든 위의 /context, /compact, /clear 명령이 여전히 기초예요.
흔한 실수와 피하는 법
솔직히 말하면, 이 지점들이 저를—그리고 많은 사람을—가장 자주 넘어뜨려요.
/compact후 결정을 잃음: 채팅에서 말만 하고 파일에 기록하지 않았기 때문이에요 -> 압축하기 전에 중요한 결정은 늘CLAUDE.md에 기록하세요.- 비대해진 CLAUDE.md: 너무 긴 파일은 토큰도 낭비하고 준수율도 떨어뜨려요 -> 경로 범위
.claude/rules/로 쪼개세요. - 압축 후 규칙 / 중첩 CLAUDE.md가 자동으로 다시 로드되지 않음: 경로 범위 규칙과 하위 디렉터리
CLAUDE.md는 스스로 다시 로드되지 않아요 -> glob에 일치하는 파일을 다시 열어 재활성화하세요. - 여러 CLAUDE.md 파일 간 지시 충돌: 단계들이 서로 모순되면 Claude가 의도치 않은 방식으로 고를 수 있어요 -> user/project/local 전반의 일관성을 점검하세요.
다른 문제에 부딪히면 Claude Code의 흔한 오류 고치기 모음을 보세요. 그리고 Claude Code가 각 요소를 어떻게 맞물리게 하는지 큰 그림을 이해하려면 skill, subagent, hook, MCP의 차이에 관한 글을 확인해 보세요.
자주 묻는 질문(FAQ)
/compact는 /clear와 어떻게 다른가요?
/compact는 대화를 압축된 요약으로 만들고 작업 흐름을 유지해요—같은 작업을 이어 가는데 컨텍스트가 가득 찼을 때 쓰세요. /clear는 대화를 통째로 지우고 빈 컨텍스트로 시작해요—다른 작업으로 전환할 때 쓰세요. 둘 다 CLAUDE.md와 자동 메모리는 다시 로드돼요.
자동 압축은 몇 %에서 작동하나요?
공식 문서에 따르면 자동 압축은 컨텍스트 사용률이 약 80-83%일 때 작동해요. 그렇더라도 손실이 적고 품질이 높은 요약을 위해 60% 부근에서 미리 /compact하는 게 좋아요. 정확한 임계값은 버전에 따라 달라질 수 있어요.
CLAUDE.md는 /compact 후에도 남나요?
네. 프로젝트 루트의 CLAUDE.md는 디스크에서 다시 주입되므로 압축 후에도 항상 있어요. 하지만 하위 디렉터리에 중첩된 CLAUDE.md와 경로 범위 규칙은 자동으로 다시 로드되지 않아요—재활성화하려면 일치하는 파일을 다시 열어야 해요.
언제 /compact해야 하나요?
적극적으로, 컨텍스트 사용률이 약 60%일 때요—90%까지 기다리지 마세요. 대화가 아직 "깨끗할" 때 일찍 압축하면 더 나은 요약이 나와요. 지시도 덧붙이세요. 예를 들어 /compact keep the schema decisions and edited files처럼 하면 Claude가 여러분이 필요한 것을 정확히 남겨요.
자동 메모리는 어디에 저장되나요?
Claude Code는 배운 것을 프로젝트 전용 메모리 폴더(~/.claude/projects/<project>/memory/)에 저장하고, MEMORY.md가 인덱스 역할을 해요. 그 처음 200줄 또는 25KB 중 먼저 오는 쪽까지가 매 세션 로드돼요. 기본적으로 켜져 있고, /memory 명령으로 전환하고 살펴볼 수 있어요. 정확한 경로는 버전마다 직접 확인하세요.
Claude Code에서 토큰을 줄이려면 어떻게 하나요?
~60%에서 /compact로 일찍 압축하고, CLAUDE.md를 군살 없이 유지하고(< 200줄), 무거운 읽기는 subagent에 위임해 메인 컨텍스트를 먹지 않게 하고, 작업을 단계로 나누고, 작업을 바꿀 때 /clear하세요. 이것들이 가장 효과적인 토큰 예산 레버예요.
결론 + 다음 단계
전체 워크플로를 한 줄로. /context로 측정 -> ~60%에서 /compact로 일찍 압축 -> 작업을 바꿀 때 /clear -> 결정을 CLAUDE.md에 고정하고, 배움은 자동 메모리에 맡기세요. 세 가지 요소—컨텍스트, 메모리, 토큰 예산—을 익히면 긴 세션이 더 이상 "잊지" 않고 눈에 띄게 저렴해져요. 다음 단계: 메모리가 제값을 하도록 제대로 된 CLAUDE.md 파일 작성법을 배우고, 아키텍처 수준에서 최적화하고 싶어지면 컨텍스트 엔지니어링이란 무엇인지를 더 깊이 파 보세요.