SSD Nodes Learn 🎉 VPS $5.50/월부터
가이드 Matt Connor작성자 Matt Connor

Claude Code 세션 재개와 기록 위치 확인

Claude Code 세션을 이름이나 선택기로 재개하는 방법과 세션 기록이 저장되는 위치를 설명합니다. VPS에서 남는 plaintext transcript와 버전별 단축키 변경 사항도 확인할 수 있습니다.

Claude Code 세션을 어떻게 재개합니까

Claude Code 세션을 재개하려면 현재 디렉터리에서 가장 최근 대화를 열 때 claude --continue를 실행하고, 목록에서 이전 대화를 선택하려면 claude --resume를 실행합니다. 이미 실행 중인 세션 안에서는 /resume 명령으로 종료하지 않고 다른 대화로 전환할 수 있습니다. 짧은 형식은 -c-r입니다.

claude --continue
claude --resume
claude --resume auth-refactor

세션 이름이나 ID를 이미 알고 있다면 이를 인수로 전달합니다. 그러면 Claude Code는 선택기 없이 해당 세션으로 바로 이동합니다.

아래 내용은 2026년 8월 기준 공식 세션 문서와 일치합니다. Claude Code는 자주 릴리스되며 버전마다 플래그 이름과 키보드 단축키가 변경될 수 있습니다. 따라서 아래 내용이 터미널에 표시되는 내용과 다르면 claude --help 및 해당 문서를 기준으로 확인합니다.

세션의 실제 의미

세션은 프로젝트 디렉터리에 연결된 저장된 대화 하나입니다. 세션에는 전체 메시지 기록이 저장됩니다. 여기에는 Claude Code가 실행한 도구 호출과 해당 호출이 반환한 결과도 포함됩니다. Claude Code는 작업 중에 대화를 한 번에 마지막에 저장하지 않고 계속 디스크에 기록합니다. 따라서 터미널을 닫거나 SSH 연결이 끊겨도 대화를 유지할 수 있습니다.

세션을 재개하면 텍스트만 복원되는 것이 아닙니다. 전체 대화 기록과 함께 세션에서 사용하던 모델도 복원됩니다. --agent를 사용했다면 세션을 시작할 때 사용한 subagent도 복원됩니다. 권한 모드도 복원됩니다. 다만 안전을 위해 예외가 있습니다. plan mode와 bypass-permissions mode는 절대 복원되지 않습니다. 따라서 이 중 하나에 있던 세션을 재개하면 새 세션이 시작될 때의 모드로 재개됩니다.

일부 항목은 실행 시점의 플래그이며 저장된 상태가 아니므로 복원되지 않습니다. --add-dir으로 추가한 디렉터리와 --mcp-config, --settings, --plugin-dir 같은 옵션은 세션을 재개할 때 다시 전달해야 합니다. settings.json 같은 설정 파일은 실행 시 다시 읽습니다. 따라서 해당 파일에 있는 설정은 다시 지정할 필요가 없습니다.

VPS에서 세션 기록이 더 중요한 이유

사람들이 놀라는 사실이 있다. 트랜스크립트는 에이전트가 실행된 컴퓨터에 기록된다. 사용자 계정에 저장되거나 클라우드와 동기화되지 않는다. 해당 컴퓨터 디스크에 있는 파일이다.

따라서 VPS의 tmux 창에 남겨 둔 세션은 노트북의 선택 목록에 나타나지 않는다. 노트북에서 사용한 세션도 VPS에 나타나지 않는다. 두 컴퓨터 사이에서 세션이 이동하지 않는다. 대부분의 사용자가 VPS에서 Claude Code를 tmux로 실행하는 방식으로 작업한다면, 실제 대화 기록은 서버에 쌓인다. 로컬에서 표시되는 선택 목록에는 이와 다른 훨씬 적은 세션만 나타난다.

인터페이스가 달라도 동일하게 분리된다. 데스크톱 앱과 VS Code 확장은 각각 자체 세션 기록을 보관한다. 어느 쪽도 CLI의 기록과는 다르다. 웹의 Claude Code도 자체 기록을 보관한다.

한 컴퓨터 안에서는 검색 범위가 예상보다 넓다. claude --resume <session-id>는 먼저 현재 프로젝트 디렉터리와 해당 git worktree를 검색한 다음, 그 컴퓨터의 다른 모든 프로젝트를 검색한다. 기억해야 할 핵심은 "그 컴퓨터에서"이다. 다른 호스트의 세션 ID는 아무것도 찾지 못하며, Claude Code는 No conversation found with session ID: <session-id>으로 이를 알린다.

Claude Code는 세션 기록을 어디에 저장합니까

기본적으로 대화 기록은 Claude Code 설정 디렉터리 아래의 다음 형식 경로에 저장됩니다. ~/.claude/projects/<project>/<session-id>.jsonl

<project>은 작업 디렉터리 경로에서 영숫자가 아닌 모든 문자를 하이픈으로 바꾼 값입니다. 따라서 /home/deploy/apps/api에서 시작한 세션은 -home-deploy-apps-api이라는 이름의 디렉터리에 저장됩니다. 변환된 이름이 200자를 초과하면 Claude Code가 이름을 자르고 전체 경로의 해시를 덧붙입니다. 그러면 디렉터리 이름이 파일 시스템 제한 안에 유지됩니다.

파일 형식은 JSONL입니다. 한 줄에 JSON 객체 하나가 있으며, 각 줄은 메시지, 도구 사용 또는 메타데이터 항목입니다. 일반 텍스트이므로 읽어도 됩니다.

그러나 이 파일을 직접 읽는 파서를 작성해서는 안 됩니다. 항목 형식은 Claude Code 내부 형식이며 버전마다 변경됩니다. 따라서 파일을 직접 읽는 스크립트는 업데이트 후에 작동하지 않을 수 있습니다. Anthropic의 공식 문서도 같은 이유로 /export 또는 문서화된 스크립트 인터페이스를 사용하라고 안내합니다.

설정 2개가 저장 위치와 보존 기간을 변경합니다. CLAUDE_CONFIG_DIR은 전체 설정 디렉터리를 다른 위치로 옮깁니다. 따라서 대화 기록을 별도의 볼륨이나 암호화된 볼륨에 저장할 수 있습니다. settings.jsoncleanupPeriodDays은 기록을 보존하는 기간을 제어합니다. 기본값은 30일이며 최솟값은 1일입니다.

트랜스크립트 파일에는 실제로 무엇이 들어 있는가

모든 도구 결과가 기록되므로 트랜스크립트에는 Claude가 읽은 파일의 내용과 Claude가 실행한 명령의 출력이 포함됩니다. Anthropic의 데이터 사용 페이지에도 명시되어 있듯이 Claude Code는 세션 트랜스크립트를 ~/.claude/projects/ 아래에 평문으로 로컬 저장합니다.

이것이 서버에서 무엇을 의미하는지 생각해 보십시오. Claude가 서비스가 시작되지 않는 이유를 확인하려고 .env 파일을 읽었다면, 이제 해당 파일의 내용이 홈 디렉터리의 JSONL 파일에 저장되어 있습니다. 명령이 연결 문자열을 출력했다면 그 문자열도 포함됩니다. 정보가 유출된 것은 아닙니다. 트랜스크립트는 발생한 일을 기록하며, 이것이 트랜스크립트의 목적입니다. 따라서 트랜스크립트는 위협 모델에 반드시 포함해야 합니다.

  • 백업: /home 또는 /root을 일반 방식으로 백업하면 트랜스크립트도 백업 대상 위치로 복사됩니다. 제외 항목을 추가하거나, 프롬프트와 파일 내용의 사본이 백업 저장소에 남는다는 점을 감수해야 합니다.
  • 스냅샷 및 이미지: 어떤 이유로든 생성한 VPS 스냅샷에는 전체 디렉터리가 포함됩니다. 두 번째 서버를 만들기 위해 복제하는 이미지에도 전체 디렉터리가 포함됩니다.
  • 서버의 다른 계정: 권한이 엄격하다고 가정하지 말고 ls -ld ~/.claude ~/.claude/projects로 직접 권한을 확인하십시오.
  • 의도적인 업로드: /feedback 명령은 대화 기록을 의도적으로 Anthropic에 전송합니다. /bug/share도 같은 경로를 통해 보고합니다. 이는 사용자가 선택하는 동작이므로, 확인하기 전에 무엇에 동의하는지 알아야 합니다.

트랜스크립트가 생성되지 않기를 원한다면 CLAUDE_CODE_SKIP_PROMPT_HISTORY을 사용해 트랜스크립트 기록을 억제할 수 있습니다. 단일 비대화형 claude -p 실행에서만 억제하려면 --no-session-persistence을 사용합니다. 어느 설정이든 적용하기 전에 그 대가를 명확히 이해해야 합니다. resume은 트랜스크립트를 읽어야 동작하므로 트랜스크립트가 없으면 resume도 사용할 수 없습니다.

오래된 대화를 찾는 방법

claude --resume으로 선택기를 열거나, 실행 중인 세션 안에서 /resume을 사용합니다. 각 행에는 직접 지정한 경우 세션 이름이 표시됩니다. 이름을 지정하지 않았다면 생성된 제목이 표시됩니다. 또한 마지막 활동 이후 경과 시간, git 브랜치, 파일 크기도 표시됩니다.

선택기에서 검색할 수 있습니다. /을 누르거나 바로 입력을 시작해 목록을 필터링합니다. 범위를 넓히는 단축키를 익혀 두면 유용합니다. Ctrl+A은 이 컴퓨터의 모든 프로젝트에 있는 세션을 표시합니다. Ctrl+W은 현재 저장소의 모든 worktree를 표시합니다. Ctrl+B은 현재 git 브랜치로 범위를 좁힙니다. 세션을 선택하기 전에 Space을 눌러 내용을 미리 볼 수 있습니다. Ctrl+R을 누르면 강조 표시된 세션의 이름을 바꿀 수 있습니다.

세션 이름을 지정하면 이 과정이 훨씬 쉬워집니다. claude -n auth-refactor으로 세션을 시작하거나, 대화가 실제 작업으로 전환되었다고 판단되는 시점에 /rename auth-refactor을 실행합니다. 이름을 지정한 세션은 셸에서 이름으로 바로 재개할 수 있습니다.

이름을 지정하지 않은 세션에도 생성된 제목이 표시됩니다. 이 제목은 첫 번째 프롬프트를 요약하는 소형 고속 모델에 백그라운드 요청을 보내 생성합니다. 이 제목을 사용하면 선택기에서 해당 행을 식별할 수 있습니다. 그러나 제목은 재개할 때 사용하는 식별자가 아닙니다. claude --resume <name>은 직접 지정한 이름에만 일치합니다.

transcript를 검색해 올바른 세션 찾기

때로는 어떤 문구만 기억나고 다른 정보는 전혀 기억나지 않을 수 있다. transcript는 텍스트이므로 검색하면 된다.

grep -rl "nftables" ~/.claude/projects/

이 명령은 일치하는 transcript의 경로를 출력한다. .jsonl 확장자를 제외한 파일 이름이 세션 ID이며, claude --resume <session-id>는 이 ID를 받는다. grep을 사용해 원하는 세션을 찾은 다음, 실제 내용을 읽으려면 해당 세션을 재개하거나 export한다.

두 가지 주의할 점이 있다. 내용은 JSON 이스케이프 형식이므로, 따옴표 문자가 포함된 문구나 줄바꿈으로 나뉜 문구는 리터럴 문자열로 일치하지 않을 수 있다. 또한 tool result 내부에서 일치한 경우에는 Claude가 해당 텍스트를 확인했다는 뜻이지, 누군가 그 텍스트를 입력했다는 뜻은 아니다.

대화 읽기 및 내보내기

/export는 현재 대화를 일반 텍스트로 렌더링합니다. 메시지와 도구 출력이 JSON 대신 읽기 쉬운 형식으로 기록됩니다. 인수를 지정하지 않으면 클립보드 또는 파일을 선택하는 메뉴가 열립니다. 파일 이름을 지정하면 /export handover.txt가 해당 경로에 직접 씁니다. 서버의 대화를 노트북으로 옮기거나 티켓에 첨부할 때 사용하는 올바른 방법입니다.

자동화할 때는 안정적인 사용을 목적으로 제공되는 인터페이스를 사용합니다. hook과 status line 명령은 입력으로 transcript_path 필드를 받으므로, SessionEnd hook을 사용해 세션이 종료될 때 transcript를 보관할 수 있습니다. 저장된 세션을 열지 않고 질문을 보낼 수도 있습니다.

claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'

이 명령은 이전 대화에 후속 프롬프트를 보내고 구조화된 JSON을 반환합니다. 다음 릴리스에서 형식이 변경될 수 있는 JSONL 형식을 파싱하는 것보다 훨씬 안정적인 기반입니다.

새로 시작하는 편이 이어가는 것보다 나을 때

이어가기를 사용하면 전체 기록이 복원되며, 이후 모든 요청에는 이 전체 기록이 포함된다. 어제 4시간 동안 진행한 대화를 오늘 이어가면 비용이 많이 든다. 긴 세션에서 토큰 사용량이 어떻게 누적되는지를 보면 실제 비용이 어디에서 발생하는지 알 수 있다.

Claude Code에는 때때로 중간 선택지가 표시된다. Pro 또는 Max 플랜에서 약 1시간 동안 유휴 상태였고 100,000개가 넘는 토큰을 포함한 세션을 이어가면 첫 메시지를 보내기 전에 대화 상자가 열린다. 그 시점에는 프롬프트 캐시가 만료되었으므로 어떤 옵션을 선택하든 다음 요청에서 전체 기록을 한 번 다시 처리한다.

  • Resume from summary는 즉시 압축을 수행하므로 이후 요청에는 전체 기록 대신 요약이 포함된다. 요청당 비용은 줄어들지만, 요약에서 제외된 내용은 더 이상 사용할 수 없다.
  • Resume full session as-is는 대화를 변경하지 않고 불러오므로 모든 세부 정보가 유지된다. 요청당 비용은 대화 크기에 따라 증가한다.

세 번째 옵션은 전체 세션을 이어가면서 이후에 다시 이어갈 때 대화 상자가 표시되지 않도록 한다.

판단 기준은 생각보다 간단하다. 다음에 입력하려는 내용이 이미 말한 내용에 의존한다면 이어간다. 그렇지 않다면 새로 시작한다. 오래된 맥락이 섞이는 현상은 주의해서 보면 쉽게 확인할 수 있다. 예를 들어 Claude가 1시간 전에 삭제한 파일을 언급하거나, 세션 초반에 이미 결정한 사항을 다시 논의하는 경우다. 이는 오래된 맥락이다. 이 맥락을 계속 유지하면 토큰과 정확도가 동시에 손실된다.

이전 대화에서 다시 사용할 유용한 내용이 결정이나 사실이라면, 이어가기에 의존해 보존하지 않는다. 모든 세션에서 확인할 수 있는 곳에 기록한다. Claude Code의 메모리 파일은 이를 위한 기능이다.

여기서는 /branch도 알아둘 가치가 있다. 현재 지점까지의 대화를 복사한 뒤 복사본으로 전환하며, 원본은 그대로 유지하고 세션 선택기에 남겨 둔다. 첫 번째 접근 방식을 잃지 않고 두 번째 접근 방식을 시도할 때 사용한다.

resume이 compaction 및 memory와 다른 점

이 기능들은 자주 혼동되지만, 해결하는 문제는 서로 다릅니다.

resume은 종료, 재부팅 또는 다른 작업으로 전환한 뒤 대화를 다시 불러오는 기능입니다. compaction은 실행 중인 대화의 context window를 관리하는 기능입니다. /compact는 Claude가 유지하는 내용을 요약으로 대체하므로 이후 요청에서 전송하는 토큰 수가 줄어듭니다. 문제가 context window가 가득 찬 것이라면 compaction을 사용해야 합니다. Claude Code context window 관리에서 이 기능을 자세히 설명합니다.

memory는 다시 다릅니다. CLAUDE.md 파일과 auto memory에는 모든 세션이 시작될 때 로드되는 지침과 사실이 저장됩니다. 따라서 이것들은 다시 돌아가는 대화가 아닙니다. 나중에 특정 대화로 돌아갈 필요가 없도록 기록해 두는 내용입니다.

동시에 실행되는 두 대화가 서로 조정하도록 하려는 경우에는 별도의 메커니즘이 필요합니다. 두 Claude Code 세션이 모두 실행 중이면 서로 메시지를 보낼 수 있습니다. Claude Code 세션끼리 메시지 보내기를 참조하십시오. 이는 어제의 세션을 디스크에서 다시 불러오는 것과는 다른 문제입니다.

FAQ

Claude Code는 세션 기록을 어디에 저장합니까?

기본적으로 구성 디렉터리의 ~/.claude/projects/<project>/<session-id>.jsonl에 저장합니다. 여기서 <project>은 작업 디렉터리 경로에서 영숫자가 아닌 문자를 하이픈으로 바꾼 값입니다. 각 파일은 JSONL 형식이며, 메시지, 도구 사용 또는 메타데이터 항목 하나를 줄 하나에 JSON 객체로 저장합니다. CLAUDE_CONFIG_DIR을 사용하면 구성 디렉터리를 다른 위치로 옮길 수 있습니다. settings.jsoncleanupPeriodDays은 기록을 보관하는 기간을 설정하며, 기본값은 30일이고 최솟값은 1입니다.

노트북의 선택 목록에 VPS 세션이 표시되지 않는 이유는 무엇입니까?

에이전트가 실행된 컴퓨터의 디스크에 기록을 저장하며, 컴퓨터 간에 기록을 동기화하지 않기 때문입니다. VPS에서 tmux 안에 나눈 대화는 VPS에만 존재합니다. SSH로 VPS에 접속해 해당 세션을 그곳에서 재개하거나, 로컬 기록이 필요하면 세션 안에서 /export을 실행한 뒤 텍스트 파일을 복사합니다.

다른 디렉터리에서 시작한 세션을 재개할 수 있습니까?

세션 ID가 있으면 가능합니다. claude --resume <session-id>은 먼저 현재 프로젝트 디렉터리와 해당 git worktree를 검색한 다음, 같은 컴퓨터의 다른 모든 프로젝트를 검색합니다. 선택 목록에서 Ctrl+A를 사용하면 컴퓨터의 모든 프로젝트로 목록을 넓힐 수 있습니다. Ctrl+W를 사용하면 현재 저장소의 모든 worktree로 목록을 넓힐 수 있습니다. 일치하는 항목이 없으면 Claude Code가 No conversation found with session ID: <session-id>를 보고합니다.

이전 세션을 재개해야 합니까, 아니면 새 세션을 시작해야 합니까?

다음 메시지가 해당 대화에서 이미 나눈 내용에 의존한다면 세션을 재개합니다. 그렇지 않다면 새 세션을 시작합니다. 세션을 재개하면 전체 기록을 다시 로드하고, 이후의 모든 요청에 해당 기록이 포함되기 때문입니다. 컨텍스트가 오래된 상태로 남아 있지 않은지도 확인해야 합니다. 이미 삭제한 파일을 계속 참조하는 세션은 오래된 컨텍스트를 유지하고 있으며, 이로 인해 매 턴마다 토큰과 정확도가 손실됩니다.

Claude Code가 기록을 디스크에 쓰지 않도록 할 수 있습니까?

가능합니다. CLAUDE_CODE_SKIP_PROMPT_HISTORY는 기록 저장을 억제하고, --no-session-persistence은 단일 비대화형 claude -p 실행에서 기록 저장을 억제합니다. 먼저 이 설정의 영향을 이해해야 합니다. 세션 재개 기능은 기록을 읽어 사용하므로, 기록 저장을 끄면 --continue--resume에서 로드할 내용이 없어집니다. 파일이 존재하는 것 자체보다 파일의 저장 위치가 문제라면 CLAUDE_CONFIG_DIR을 암호화된 볼륨으로 지정하고 cleanupPeriodDays을 대신 줄입니다.