작업을 한 시간쯤 하다 보면 에이전트가 갑자기 30분 전에 거절한 방법을 다시 제안할 때가 있습니다. 이미 직접 수정한 파일을 예전 내용 그대로 요약하기도 하죠. 잊어버린 것처럼 보이지만, 실제로는 작동 방식이 그렇습니다. 에이전트는 크기가 제한된 창을 보며, 프로젝트 전체가 아니라 그 창에 들어온 내용만 봅니다.

컨텍스트 창이 무엇으로 채워지는지, /context 명령으로 어떻게 확인하는지, 남은 공간이 거의 없을 때 무엇을 할지 살펴보겠습니다.

컨텍스트와 한계

컨텍스트는 모델이 다음 단계를 수행할 때 참고할 수 있는 정보입니다. 사용자 메시지, 에이전트의 답변, 읽은 코드, 명령 출력, 프로젝트 지침 등이 여기에 포함됩니다. 컨텍스트 창은 이런 정보를 한 번에 얼마나 담을 수 있는지 정합니다. 디스크의 여유 공간이나 컴퓨터의 RAM과는 다릅니다.

여기서 혼동이 자주 생기는 차이가 있습니다. 서로 같다고 착각하기 쉬운 세 가지를 보죠.

  • 디스크에 있는 파일 - 도구로 읽을 수 있는 프로젝트 내용입니다.
  • 저장된 세션 기록 - 대화 기록으로, 디스크에 저장되어 다시 열 수 있습니다.
  • 현재 컨텍스트 - 지금 모델이 참고할 수 있는 내용입니다.

서로 연결되어 있지만 같은 것은 아닙니다. 파일이 폴더에 있어도 대화에 한 번도 포함되지 않을 수 있습니다. 반대로 대화에는 30분 전에 읽은 파일 버전이 남아 있을 수도 있죠. 그러니 "우리 이 얘기 했잖아요"라는 말만으로 에이전트가 최신 정보를 보고 있다고 단정할 수는 없습니다.

  • 프로젝트 파일
  • 도구로 읽기
  • 답변에 필요한 정보

파일이 존재한다는 사실과 에이전트가 그 파일을 안다는 사실 사이에는 읽기 단계가 있습니다. Claude Code는 프로젝트를 검색하고, 필요한 파일을 열고, 관련 코드로 이동하면서 이 단계를 직접 수행합니다. 미리 모든 경로를 나열할 필요는 없습니다. 다만 읽기 전까지 그 파일은 대화에 없는 것과 같습니다.

이 정보의 양은 토큰으로 잽니다. 토큰은 모델이 사용자 요청과 읽은 코드를 잘게 나눈 텍스트 조각입니다. 토큰 하나가 단어 전체일 수도, 단어의 일부일 수도 있어서 단어 수만으로 토큰 수를 계산할 수는 없습니다.

첫 질문 전부터 창을 차지하는 것

첫 단어를 입력하기 전부터 컨텍스트 창은 이미 채워져 있습니다. /context 명령을 실행하면 무엇이 차지하고 있는지 볼 수 있습니다.

/context 명령 출력: 200k 토큰 중 4k 사용 중. System prompt, Memory files, Skills, Messages 항목별 사용량과 Free space 행을 보여 줍니다.

세션을 막 열었는데도 200k 토큰 중 4k가 이미 사용 중입니다. 전부 기본 구성에 해당하죠. System prompt는 에이전트 자체의 지침, Memory files는 불러온 CLAUDE.md와 프로젝트 규칙, Skills는 사용할 수 있는 스킬 목록입니다. 대화 내용을 나타내는 Messages 행은 아직 비어 있습니다.

이번에는 한 시간쯤 작업하고 MCP 서버도 몇 개 연결한 상태를 보겠습니다.

/context

  System prompt     3.2k   ( 2%)   기본 지침
  System tools     12.1k   ( 6%)   내장 도구 설명
  MCP tools        21.4k   (11%)   연결된 외부 서버
  Memory files      1.8k   ( 1%)   CLAUDE.md, rules, auto memory
  Messages         45.2k   (22%)   대화, 파일, 로그
  Free space      116.3k   (58%)

특정 버전의 실제 출력이 아니라 예시입니다. 표시되는 행과 화면 배치는 Claude Code 버전 및 프로젝트에 연결된 구성요소에 따라 다르고, 컨텍스트 창의 크기는 모델에 따라 달라집니다. 그래도 대체로 비슷한 모양이며, 여기서 얻을 수 있는 실용적인 요점은 다음과 같습니다.

  • 에이전트 지침과 내장 도구 설명 같은 기본 항목은 항상 들어갑니다. 사용자가 조정할 수 있는 부분은 아닙니다.
  • 연결한 MCP 서버는 한 번도 사용하지 않았더라도 최소한 도구 목록을 창에 추가합니다. "일단 연결해 두자"고 하면 매 세션마다 그 비용을 치르게 됩니다.
  • 길어진 CLAUDE.md도 실행할 때마다 다시 비용이 듭니다. 짧게 유지할 이유가 하나 더 생기는 셈이죠.
  • 작업 중 실질적으로 늘어나는 것은 Messages 행 하나입니다. 이 항목을 눈여겨보세요.
프로젝트에서 직접 확인해 보세요

Claude Code를 사용할 수 있다면 /context를 실행하고, 파일 몇 개를 읽어 달라고 한 뒤 다시 실행해 보세요. Messages 행이 바로 늘어나므로 파일을 한 번 읽는 데 공간이 얼마나 드는지 확인할 수 있습니다.

작업하면서 쌓이는 내용

이제부터 창을 채우는 쪽은 사용자이고, 메시지만 들어가는 것도 아닙니다. 에이전트가 읽고 요청에 따라 가져온 모든 것이 컨텍스트에 들어갑니다.

출처공간을 차지하는 내용
대화사용자 메시지, 에이전트 답변, 거절된 방법까지 포함
읽은 파일전체 내용 또는 필요한 부분
도구 결과명령 출력, 검색 결과, 브라우저에서 확인한 내용
스킬 및 MCP 자료사용한 스킬의 지침, 호출한 도구의 설명

요청과 그 결과로 들어오는 컨텍스트는 크기가 크게 다를 수 있습니다. "로그 전체를 보여 줘"라는 요청은 네 단어지만, 결과는 수천 줄일 수 있습니다. 그래서 긴 질문보다 큰 출력이 공간을 더 많이 차지할 때가 있습니다.

필요한 자료를 정확히 지정하는 습관을 들여 보세요. 경로 앞에 @를 붙이면 파일을 대화에 포함할 수 있고, 경로를 입력하면 자동 완성도 사용할 수 있습니다. 예를 들면 @src/reward-flow.js를 읽고 점수가 어디서 정해지는지 설명해 주세요라고 요청할 수 있습니다. @로 폴더를 언급했다고 해서 그 안의 모든 파일이 불러와지는 것은 아닙니다. 폴더를 지정하면 파일 목록이 제공됩니다. 질문에 맞는 자료를 선택하세요. 파일과 폴더를 지정할 때의 차이는 파일 전달 문서에도 설명되어 있습니다.

그리고 한 가지 더. 파일의 숫자를 직접 10에서 20으로 바꿔도 이전 답변이 자동으로 바뀌지는 않습니다. 새 답변을 받기 전에 현재 내용을 읽어 달라고 하세요. 한 번 읽은 파일을 참조했다고 해서 대화 속 이전 텍스트가 디스크 파일의 실시간 사본이 되지는 않습니다.

공간이 부족해질 때

컨텍스트 창은 무한하지 않지만, 공간이 찼다고 세션이 갑자기 중단되지는 않습니다. 창이 차면 Claude Code는 압축을 수행해 상세한 기록을 짧게 요약하고 공간을 확보합니다. 자동으로 실행되며, 시점은 모델과 설정에 따라 다릅니다.

/compact 명령으로 직접 압축을 시작할 수도 있습니다. 직접 실행하면 시점을 고를 수 있습니다. 예를 들어 다음 큰 작업에 들어가기 전에 실행하고, 꼭 남겨야 할 내용을 함께 지정할 수 있습니다.

/compact 작업 목표와 수정 범위를 유지하고,
별도 핸들러를 사용하는 방법은 거절했다는 점과
다음 단계인 검색 필드 초기화 확인을 기억해 주세요.

압축에서 중요한 점은 대화가 아니라 요약이 창에 남는다는 것입니다. 요약에 담기지 않은 세부 내용은 창에서 사라집니다. 압축 후에 "20분 전에 동의했잖아요"라고 따져도 소용없습니다. 필요한 사실은 파일에서 다시 확인하는 편이 낫습니다. 프로젝트 지침은 사라지지 않습니다. 루트의 CLAUDE.md는 다시 불러옵니다.

두 번째 명령인 /clear는 압축하지 않습니다. 새 대화를 시작합니다. 이전 대화는 저장되어 있고 /resume으로 다시 열 수 있으며, 프로젝트 파일은 바뀌지 않고 지침도 평소처럼 불러옵니다.

명령기능사용할 때
/context컨텍스트 창의 사용 현황을 보여 줍니다공간이 어디에 쓰였는지 모를 때
/compact대화 기록을 짧게 요약합니다같은 작업을 계속하지만 대화가 길어졌을 때
/clear새 대화를 시작합니다작업이 바뀌었을 때

선택 기준은 간단합니다. 같은 작업이면 압축하고, 다른 작업이면 새 대화를 시작하세요. 한 가지 문제를 계속 살펴보는 중이라면 명령을 실행할 때마다 대화를 지울 필요는 없습니다. 지금까지의 관찰과 확인 내용이 도움이 되니까요. 새 주제로 넘어가기 전에는 필요한 결론을 두어 줄로 적어 두면 좋습니다. "보상은 src/reward-config.js에서 정하고, 지급은 src/reward-flow.js에서 처리한다." 대화 전체를 다시 쓰지 않고도 어디를 확인할지 알 수 있습니다.

컨텍스트 창을 효율적으로 쓰기

처음부터 불필요한 내용으로 창을 채우지 않으면 세 명령을 자주 쓸 일도 없습니다. 효과가 큰 습관을 몇 가지 소개합니다.

  • 구체적으로 요청하세요. 모호한 요청을 받으면 에이전트는 탐색부터 합니다. 불필요한 파일을 읽고 여러 방법을 검토하죠. 파일과 기대하는 결과를 지정하면 공간과 시간을 아낄 수 있습니다.
  • 모든 것을 한꺼번에 불러오지 마세요. 테스트가 실패한 이유를 묻는다면 로그 전체가 아니라 오류 주변의 몇 줄이면 충분합니다.
  • 프로젝트 지침은 짧게 유지하세요. CLAUDE.md는 매 세션마다 불러옵니다. 참고 자료가 길다면 필요할 때 읽을 수 있도록 별도 파일로 두는 편이 낫습니다.
  • 필요하지 않은 MCP 서버는 연결 해제하세요. "혹시 몰라서" 연결한 서버는 매번 공간을 차지하지만 아무런 이점도 주지 않습니다.
  • 규모가 큰 조사 작업은 서브에이전트에 맡기세요. 서브에이전트는 별도의 컨텍스트 창에서 작업하고 요약을 돌려줍니다. 읽은 파일 수십 개는 그쪽에 남습니다.

기억해 둘 점

컨텍스트는 "프로젝트에 있는" 모든 내용이 아니라, 작업대 위에 올려 둔 내용입니다. 디스크의 파일, 기록된 대화, 현재 창의 정보는 서로 다릅니다. 이상한 답변의 상당수는 이 셋을 혼동하는 데서 비롯됩니다.

결국 할 일은 세 가지입니다. /context로 사용량을 확인하고, @로 필요한 자료를 전달하고, 적절한 시점에 대화를 압축할지 새로 시작할지 결정하세요. 상황에 맞게 선택하면 됩니다. 압축은 필요한 파일을 읽는 일을 대신하지 않고, 파일을 전달해도 에이전트의 추론을 검증해 주지는 않습니다.