-
Claude Code 작동 방식 이해하기 3: 세션 기반 작업AI 2026. 6. 19. 15:49

세션 기반 작업
Claude code는 작업하면서 대화를 로컬 환경에 저장해둡니다. 사용자의 프롬프트, 도구 사용, 응답 및 결과 등이 ~/.claude /projects/ 아래에 존재하는 JSONL 형태의 일반적인 텍스트 파일로 저정됩니다. 이를 통해 Claude에서는 되돌리기, 재개 및 포크 세션을 활성화합니다. Claude가 코드를 변경하기 전에 해당하는 파일과 참고한 파일에 대한 파일을 스냅샷하여 버전을 관리해주기 때문에 필요할 때 언제든 되돌리기할 수 있습니다. 방금 말씀드린 파일과 더불어 Claude 작업에 따라 저장되는 데이터를 지우는 방법은 ~/.claude의 애플리케이션 데이터를 통해 확인할 수 있습니다.
각각의 세션은 기본적으로 독립적입니다. 만약 사용자가 새로운 세션을 생성할 경우 기본적으로 이전 세션의 대화 기록 없이 새로운 컨텍스트 윈도우로 시작하게 됩니다. 하지만 Claude의 자동 메모리를 통해 저장된 다른 세션에 대한 정보는 새로운 세션을 열더라도 Claude가 그것을 이용하여 작업할 수 있습니다. 또한 이런 방법이 아니더라도 사용자가 CLAUDE.md에 지침을 추가하여 새로운 세션을 열더라도 일관된 지침을 통해 작업할 수 있습니다.
브랜치 간 작업
각 Claude Code의 세션은 브랜치가 아니라 디렉토리에 묶입니다. 그래서 같은 디렉토리에서 git checkout으로 브랜치를 바꾸면 Claude가 보는 파일만 새 브랜치 것으로 교체될 뿐, 대화 기록은 그대로 유지됩니다. 따라서 브렌치 전환 전에 작업한 내용을 계속 기억합니다. /resume 선택기도 기본적으로 현재 디렉토리(worktree)의 세션만 보여주고, 단축키로 다른 worktree·프로젝트까지 범위를 넓힐 수 있다. 만약 여러 작업을 동시에 돌리고 싶다면 git worktree로 브랜치별 디렉토리를 만들어 병렬 세션을 띄우면 됩니다.(git worktree add ../proj-feat feature 후 해당 폴더에서 claude 실행, 또는 내장 플래그 claude -w feature). 각 세션은 파일이 격리되어 있기 때문에 서로 영향을 주지 않습니다.
세션 재개 또는 fork

claude --continue나 claude --resume으로 세션을 재개하면 같은 세션 ID를 그대로 써서 중단한 지점부터 다시 시작됩니다. 새로 보내는 메시지는 기존 대화에 그대로 추가됩니다. 반면 --fork-session이나 /branch로 포크하면 지금까지의 기록을 새 세션 ID로 복사해 작업할 수 있습니다. 따라서 원본 세션은 건드리지 않고 그대로 보존됩니다. 정리하면, 재개는 "같은 세션을 계속 잇는 것", 포크는 "지금 상태를 복제해 새 세션으로 잇는 것"입니다. 그래서 같은 맥락에서 다른 방향을 실험해 보고 싶을 때 포크 기능이 유용합니다. 재개의 세부 동작, /resume 선택기, 세션 이름 지정, 그리고 동일한 세션을 두 터미널에서 동시에 열었을 때의 동작 관련 내용은 세션 관리 문서에서 알 수 있습니다.
컨텍스트 윈도우
컨텍스트 윈도우는 LLM이 한 번의 요청에서 처리하고 기억할 수 있는 텍스트·데이터의 총량을 의미합니다. Claude의 컨텍스트 윈도우에는 대화 기록, 파일 콘텐츠, 명령 출력, CLAUDE.md, 자동 메모리, 로드된 skills, 시스템 지침 등이 담기며, 작업을 이어갈수록 점점 채워집니다.
용량이 한계에 가까워지면 Claude Code는 내용을 자동으로 압축(compact)하는데, 이 과정에서 대화 초반의 지침이나 세부 내용이 손실될 수 있습니다. 따라서 계속 지켜져야 하는 규칙은 대화 기록에 의존하지 말고 CLAUDE.md에 저장해 두는 것이 안전합니다.
컨텍스트가 채워지는 세부 과정
Claude Code는 컨텍스트 한계에 가까워지면 다음 순서로 공간을 확보합니다.
- 먼저 이전 도구 출력을 지웁니다.
- 그래도 부족하면 대화를 요약합니다. 이때 요청 내용과 핵심 코드 스니펫은 유지되지만, 대화 초반의 세부 지침은 사라질 수 있습니다.
압축 과정에서 무엇을 보존할지 직접 제어하고 싶다면, CLAUDE.md에 "Compact Instructions" 섹션을 추가하거나 /compact를 포커스와 함께 실행하면 됩니다(예: /compact focus on the API changes).
한편 단일 파일이나 도구 출력이 너무 커서 요약 직후 컨텍스트가 곧바로 다시 가득 차는 경우, Claude Code는 몇 번 시도한 뒤 자동 압축을 멈추고 오류를 띄웁니다. 복구 방법은 자동 압축이 thrashing 오류로 중지됨 문서에서 확인할 수 있습니다.
무엇이 공간을 차지하는지 확인하려면 /context를 실행합니다. 참고로 MCP 도구 정의는 기본적으로 지연 로딩되어 도구 검색을 통해 필요할 때만 불러오므로, Claude가 특정 도구를 실제로 사용하기 전까지는 도구 이름만 컨텍스트를 소비합니다. 서버별 비용은 /mcp로 확인할 수 있습니다.
skills 및 subagents로 컨텍스트 관리단순 압축 외에도, 컨텍스트에 무엇을 로드할지 제어하는 데 활용할 수 있는 기능들이 있습니다.
Skills는 필요할 때 로드됩니다. Claude는 세션 시작 시 각 skill의 설명만 확인하고, 전체 콘텐츠는 해당 skill이 실제로 사용될 때 불러옵니다. 수동으로 호출하는 skill이라면 disable-model-invocation: true를 설정해, 필요해지기 전까지 설명조차 컨텍스트에 올라오지 않도록 유지할 수 있습니다. 직접 작성하지 않은 skill은 skillOverrides를 사용해 설정에서 동일하게 제어하면 됩니다.
Subagents는 주 대화와 완전히 분리된 자체 컨텍스트를 갖습니다. 따라서 subagent가 수행하는 작업은 주 대화의 컨텍스트를 차지하지 않으며, 작업이 끝나면 결과 요약만 돌려줍니다. 이런 격리 기능 덕분에 subagent는 긴 세션에서 특히 유용합니다.
각 기능의 비용은 컨텍스트 비용을, 컨텍스트 관리 팁은 토큰 사용 감소를 참고하여 확인할 수 있습니다.
'AI' 카테고리의 다른 글
Claude Code 작동 방식 이해하기 2: 접근 범위, 실행 환경 및 인터페이스 (0) 2026.06.19 Claude Code 작동 방식 이해하기 1: 에이전트 루프, 내장 도구 (0) 2026.06.11