3. Claude Code 내부 아키텍처

세션 · 컨텍스트 윈도우 · 도구 호출 루프가 실제로 어떻게 맞물리는지

🧒
초딩
2장에서 "에이전트 루프"는 알겠는데, Claude Code를 켜두면 제가 며칠 전에 한 얘기도 기억하고 있더라고요? 그것도 그 루프 안에 다 들어있는 거예요?
🧑‍💻
코딩천재
핵심을 찔렀어. 질문을 거꾸로 해볼게 — 모델 자체는 "이전에 뭘 했는지" 저장하는 기억 장치가 있을까, 없을까?
🧒
초딩
음... 없을 것 같아요? 1장에서 매번 "지금까지 나온 텍스트"만 보고 다음 걸 예측한다고 했으니까.
🧑‍💻
코딩천재
정확해. 모델 자체는 저장 공간이 없어. 그럼 "기억하는 것처럼" 보이려면 어떻게 해야 할까? 답은 단순해 — 매번 대화 전체를 처음부터 다시 통째로 넣어주는 거야. 오늘 나눈 대화, 어제 나눈 대화 요약, 지금까지 읽은 파일 내용, 실행한 명령어 결과... 이걸 전부 이어붙여서 매번 새로 모델에 넣어. 모델은 "기억"하는 게 아니라, 매번 그 긴 텍스트를 처음부터 다시 읽는 거야.
🧒
초딩
근데 대화가 계속 길어지면 그걸 계속 다시 넣는다고요? 끝도 없이 길어지는 거 아니에요?
🧑‍💻
코딩천재
바로 그게 컨텍스트 윈도우의 한계야 — 모델이 한 번에 읽을 수 있는 텍스트 양에는 상한선이 있어(예: 20만 토큰 정도). 그 한도에 가까워지면 Claude Code 같은 하네스는 오래된 대화를 요약해서 압축하거나, 덜 중요한 부분을 잘라내서 다시 채워넣어. 그래서 아주 긴 세션에서는 "예전 디테일을 가끔 깜빡하는" 현상이 생기는 거야 — 압축되면서 정보가 손실될 수 있거든.
💡 핵심
세션이란 결국 "지금까지의 대화 + 파일 내용 + 도구 실행 결과를 모두 이어붙인 하나의 거대한 텍스트"입니다. Claude Code는 매 턴마다 이 텍스트 전체를 다시 모델에 넣고, 컨텍스트 윈도우 한도에 가까워지면 오래된 부분을 요약/삭제해서 공간을 확보합니다.
🧒
초딩
그럼 "도구 호출 루프"는 그 안에서 정확히 어떤 순서로 도는 거예요?
🧑‍💻
코딩천재
순서를 그려보자:
  1. 사용자 메시지가 지금까지의 텍스트 뒤에 추가됨
  2. 이 전체 텍스트를 모델에 보냄 → 모델이 다음 토큰들을 예측해서 출력
  3. 하네스(Claude Code)가 출력을 확인 — "이 안에 파일 읽기/쓰기 같은 도구 호출이 있나?"
  4. 있으면 → 실제로 그 도구(파일 시스템, 터미널 등)를 실행 → 결과를 텍스트로 변환해서 대화 텍스트 뒤에 추가 → 2번으로 돌아감
  5. 없으면(순수 텍스트 답변만 나옴) → 그 텍스트를 사용자에게 보여주고 루프 종료
이 2~4번을 계속 왔다갔다하는 게 바로 "에이전틱 루프"의 실체야. 파일을 5번 고치고, 명령어를 3번 실행하는 작업이면 이 루프가 8번 이상 도는 거지.
🧒
초딩
그럼 Claude Code가 "터미널 명령어 실행해도 될까요?" 물어보는 것도 이 구조 때문이에요?
🧑‍💻
코딩천재
맞아. 3번 단계에서 도구 호출을 감지했을 때, 하네스가 "이건 위험할 수 있는 도구니까 바로 실행하지 말고 사람한테 물어보자"는 규칙을 넣어둔 거야. 이게 바로 권한(permission) 시스템이고, 어떤 도구를 자동 허용할지/물어볼지/막을지는 설정으로 조절할 수 있어. 이 부분이 "하네스를 설계한다"고 할 때 다루는 핵심 중 하나야 — 그냥 AI를 부르는 게 아니라, AI 주변에 이런 안전장치와 흐름 제어를 설계하는 거지.
← 챗봇 vs 에이전트 다음: MCP와 서브에이전트 →