04. 세션과 컨텍스트 이해하기
- 컨텍스트 윈도우가 무엇이고 무엇으로 채워지는지 이해한다
- 컴팩션(compaction)이 일어날 때 무엇이 남고 무엇이 사라지는지 안다
- 언제 새 세션을 시작해야 하는지 판단할 수 있다
- 작업에 맞는 모델을 고르는 기준을 안다
왜 이 장이 중요한가
Claude Code를 쓰다 보면 "갑자기 멍청해졌다", "방금 말한 걸 까먹는다" 같은 경험을 하게 됩니다. 이런 불만의 상당수는 사실 컨텍스트 예산(context budget) 문제입니다. 이 장을 이해하면 그 현상을 예방하고 통제할 수 있습니다.
컨텍스트 윈도우: 유한한 작업 기억
세션에는 단 하나의 예산이 있습니다 — 모델의 컨텍스트 윈도우. 모델이 어느 순간에 "볼 수 있는" 모든 것이 이 안에 들어가야 합니다. 무엇이 이 예산을 차지할까요?
flowchart TB
subgraph Window["컨텍스트 윈도우 (유한한 예산)"]
direction TB
Resident["상주 레이어<br/>시스템 프롬프트 · CLAUDE.md ·<br/>자동 메모리 인덱스 · 스킬 설명"]:::know
Conv["대화 이력<br/>주고받은 메시지"]:::user
Files["파일 내용<br/>읽어들인 코드"]:::tool
ToolOut["도구 출력<br/>명령 실행 결과 등"]:::result
end
classDef know fill:#CE93D8,stroke:#8E24AA,color:#000
classDef user fill:#FFE082,stroke:#F9A825,color:#000
classDef tool fill:#90CAF9,stroke:#1E88E5,color:#000
classDef result fill:#A5D6A7,stroke:#43A047,color:#000
- 상주 레이어: 세션 초반에 로드되어 계속 남는 것들 — 시스템 프롬프트, 프로젝트·유저 CLAUDE.md, 자동 메모리 인덱스, 사용 가능한 스킬들의 설명(전체 내용이 아니라 설명만).
- 대화 이력 / 파일 / 도구 출력: 작업하며 점점 쌓이는 것들. 파일을 많이 읽고 명령을 많이 돌릴수록 빠르게 찹니다.
📌 핵심: 당신이 입력하기 전에 이미 컨텍스트의 일부가 차 있습니다(CLAUDE.md·메모리·스킬 설명 등). 그래서 큰 코드베이스에서 무턱대고 파일을 잔뜩 읽게 두면 금세 한계에 부딪칩니다. 이 절약 기법은 22장에서 다룹니다.
/context를 입력하세요. 컨텍스트 사용량을 색상 그리드로 보여줍니다.컴팩션: 예산이 차면 일어나는 일
윈도우가 차오르면 Claude Code는 자동으로 컴팩션(compaction) 을 수행합니다. 핵심 동작은 이렇습니다(공식 문서가 정성적으로 설명하는 부분이라, 정확한 수치보다 원리를 기억하세요):
- 오래된 도구 출력부터 비웁니다. 한 번 보고 다시 안 볼 로그·검색 결과가 1순위.
- 그래도 부족하면 대화를 요약합니다.
- 요약 후, 최근에 호출된 스킬 등 일부 핵심 상태를 다시 붙여 작업이 끊기지 않게 합니다.
flowchart LR
A[윈도우 차오름]:::danger --> B[오래된 도구 출력 정리]:::tool
B --> C{여전히 부족?}:::agent
C -->|예| D[대화 요약]:::tool
C -->|아니오| E[계속 진행]:::result
D --> F[핵심 상태 재첨부]:::know
F --> E
classDef danger fill:#EF9A9A,stroke:#E53935,color:#000
classDef tool fill:#90CAF9,stroke:#1E88E5,color:#000
classDef agent fill:#80DEEA,stroke:#00ACC1,color:#000
classDef result fill:#A5D6A7,stroke:#43A047,color:#000
classDef know fill:#CE93D8,stroke:#8E24AA,color:#000
⚠️ 컴팩션의 함정: 요약 과정에서 중요한 결정·제약이 사라질 수 있습니다. 예를 들어 "이 패턴은 절대 쓰지 마"라고 했던 메시지가 요약에 안 남으면, Claude가 다시 그 패턴을 쓸 수 있습니다.
대응책:
- 정말 중요한 규칙은 대화에만 의존하지 말고 CLAUDE.md에 적어두기 (상주 레이어라 컴팩션에 덜 휘둘림 → 9장).
- 수동
/compact에 초점을 지정하기:
```
> /compact 상품 필터링 계획과 구현 결정사항에 집중해서 요약해줘
```
이렇게 하면 요약 시 무엇을 우선 보존할지 알려줄 수 있습니다.
언제 새 세션을 시작할까
컴팩션으로 버티기보다, 주제가 바뀌면 새 세션이 더 깔끔할 때가 많습니다.
| 상황 | 권장 |
|---|---|
| 완전히 다른 작업으로 전환 | 새 세션 (claude를 새로 실행하거나 /clear) |
| 같은 작업이 길어져 느려짐·헷갈림 | /compact로 정리 후 계속, 또는 새 세션 |
| 며칠에 걸친 큰 작업 | 진행 상태를 파일(예: 계획 문서·CLAUDE.md)에 남기고 새 세션에서 그 파일로 이어가기 |
💡 여러 세션 이어가기 팁: 다음 세션이 이어받아야 할 최소한의 맥락(무엇을 했고, 다음에 뭘 할지)을 파일로 남겨두면 컨텍스트가 리셋돼도 안전합니다. 대화 기억에만 의존하지 마세요. 긴 세션·다중 세션 운영은 22장에서 더 다룹니다.
모델 선택: 작업에 맞는 두뇌 고르기
Claude Code는 기본적으로 최신 모델을 쓰지만, 작업 성격에 따라 모델을 바꿀 수 있습니다. 일반적인 분류:
| 성격 | 적합한 모델군 | 언제 |
|---|---|---|
| 가장 강력·복잡한 추론 | 상위(Opus 계열) | 까다로운 설계·디버깅 |
| 균형(속도·비용·성능) | 중간(Sonnet 계열) | 대부분의 일상 작업 |
| 빠르고 저렴 | 경량(Haiku 계열) | 단순·반복 작업, 서브에이전트의 잡일 |
/model 류 명령)과 공식 문서에서 확인하세요.💡 비용 팁: 서브에이전트가 하는 "파일 검색·로그 스캔" 같은 잡일에는 더 싸고 빠른 모델을 배정하고, 실제 추론은 강한 모델에 맡기면 품질을 지키면서 비용을 아낄 수 있습니다(→ 13장, 22장).
이 장에서 배운 것
- 컨텍스트 윈도우는 유한한 작업 기억이고, 상주 레이어·대화·파일·도구 출력이 이를 채운다.
- 차오르면 컴팩션이 일어나 오래된 도구 출력부터 비우고, 부족하면 대화를 요약한다.
- 컴팩션은 중요한 결정을 잃을 수 있으니, 핵심 규칙은 CLAUDE.md에 남기고
/compact에 초점을 지정한다. - 주제가 바뀌면 새 세션이 깔끔하고, 다중 세션은 진행 상태를 파일로 남겨 이어간다.
- 작업 성격에 맞춰 모델을 고르되, 모델명·요금은 항상 공식 문서로 확인한다.
✍️ 확인 문제
- "Claude가 방금 말한 제약을 잊어버렸다"는 현상의 흔한 원인과, 이를 예방하는 방법은 무엇인가요?
- 컴팩션이 일어날 때 가장 먼저 비워지는 것은 무엇인가요?
- 며칠에 걸친 큰 작업을 여러 세션으로 나눠 진행할 때, 컨텍스트 리셋에 대비하는 좋은 습관은 무엇인가요?
🎉 1부 완료! 다음 장부터는 2부 핵심 사용법입니다.
다음 장: 05. 프롬프트로 작업 지시하기