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. 오래된 도구 출력부터 비웁니다. 한 번 보고 다시 안 볼 로그·검색 결과가 1순위.
  2. 그래도 부족하면 대화를 요약합니다.
  3. 요약 후, 최근에 호출된 스킬 등 일부 핵심 상태를 다시 붙여 작업이 끊기지 않게 합니다.
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장에서 더 다룹니다.

📌 핵심
일부 버전에는 일시중지한 세션으로 돌아왔을 때 맥락을 다시 보여주는 "away summary" 기능이 기본 활성화되어 있습니다. 세부 동작은 버전에 따라 다르니 공식 문서를 확인하세요.

모델 선택: 작업에 맞는 두뇌 고르기

Claude Code는 기본적으로 최신 모델을 쓰지만, 작업 성격에 따라 모델을 바꿀 수 있습니다. 일반적인 분류:

성격적합한 모델군언제
가장 강력·복잡한 추론상위(Opus 계열)까다로운 설계·디버깅
균형(속도·비용·성능)중간(Sonnet 계열)대부분의 일상 작업
빠르고 저렴경량(Haiku 계열)단순·반복 작업, 서브에이전트의 잡일
⚠️ 흔한 실수
모델명·요금은 매우 자주 바뀝니다. 구체적인 모델 문자열·가격은 본문에 적지 않습니다. 현재 사용 가능한 모델과 전환 방법은 세션의 설정(또는 /model 류 명령)과 공식 문서에서 확인하세요.

💡 비용 팁: 서브에이전트가 하는 "파일 검색·로그 스캔" 같은 잡일에는 더 싸고 빠른 모델을 배정하고, 실제 추론은 강한 모델에 맡기면 품질을 지키면서 비용을 아낄 수 있습니다(→ 13장, 22장).

이 장에서 배운 것

  • 컨텍스트 윈도우는 유한한 작업 기억이고, 상주 레이어·대화·파일·도구 출력이 이를 채운다.
  • 차오르면 컴팩션이 일어나 오래된 도구 출력부터 비우고, 부족하면 대화를 요약한다.
  • 컴팩션은 중요한 결정을 잃을 수 있으니, 핵심 규칙은 CLAUDE.md에 남기고 /compact에 초점을 지정한다.
  • 주제가 바뀌면 새 세션이 깔끔하고, 다중 세션은 진행 상태를 파일로 남겨 이어간다.
  • 작업 성격에 맞춰 모델을 고르되, 모델명·요금은 항상 공식 문서로 확인한다.

✍️ 확인 문제

  1. "Claude가 방금 말한 제약을 잊어버렸다"는 현상의 흔한 원인과, 이를 예방하는 방법은 무엇인가요?
  2. 컴팩션이 일어날 때 가장 먼저 비워지는 것은 무엇인가요?
  3. 며칠에 걸친 큰 작업을 여러 세션으로 나눠 진행할 때, 컨텍스트 리셋에 대비하는 좋은 습관은 무엇인가요?
🎉 1부 완료! 다음 장부터는 2부 핵심 사용법입니다.
다음 장: 05. 프롬프트로 작업 지시하기