Claude Code 세션 재개 및 대화 기록 확인 방법
Claude Code 세션을 이름이나 선택기로 재개하는 방법과 로컬에 저장된 plaintext 대화 기록을 찾는 경로를 안내합니다. 터미널이 종료되어도 유지되는 세션 데이터의 구조와 재개 시 복원되지 않는 플래그 정보를 확인하여 작업을 안전하게 이어가십시오.
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가 수행한 도구 호출과 그 결과값을 포함한 전체 메시지 기록이 담겨 있습니다. Claude Code는 작업이 끝날 때 한 번만 저장하는 것이 아니라 작업 중에 지속적으로 디스크에 기록하므로, 터미널을 닫거나 SSH 연결이 끊겨도 대화 내용은 유지됩니다.
세션을 재개하면 텍스트 이상의 정보가 복원됩니다. 전체 대화 기록은 물론, 세션에서 사용하던 모델과 --agent를 통해 시작한 서브 에이전트 정보까지 모두 돌아옵니다. 권한 모드 역시 복원되지만 안전을 위해 예외가 적용됩니다. plan 모드와 bypass-permissions 모드는 절대 복원되지 않으므로, 해당 모드에서 작업하던 세션을 재개하면 새로운 세션을 시작할 때와 동일한 모드로 전환됩니다.
일부 항목은 저장된 상태가 아니라 실행 시 전달한 플래그이므로 복원되지 않는다. --add-dir로 추가한 디렉터리와 --mcp-config, --settings, --plugin-dir 같은 옵션은 재개할 때 다시 전달해야 한다. settings.json 같은 설정 파일은 실행할 때 다시 읽으므로, 해당 파일에 있는 설정은 반복해서 지정할 필요가 없다. 인증 정보도 같은 범주에 속한다. Claude Code는 대화와 함께 인증 상태를 복원하지 않고, 로그인 정보와 환경을 바탕으로 실행 시 인증 방법을 결정한다. 따라서 셸에 불필요한 ANTHROPIC_API_KEY가 들어간 VPS에서 세션을 재개하면, 이전에는 정상적으로 실행되었더라도 유효하지 않은 API 키 오류가 발생한다.
VPS에서 세션 기록이 더 중요한 이유
사람들이 놀라는 사실이 하나 있습니다. 대화 기록(transcript)은 에이전트가 실행된 머신에 기록됩니다. 이 기록은 귀하의 계정에 저장되거나 클라우드로 동기화되지 않습니다. 해당 장비의 디스크에 저장된 파일일 뿐입니다.
따라서 VPS의 tmux 창에 남겨둔 세션은 노트북의 선택기(picker)에 나타나지 않으며, 노트북에서 실행한 세션 역시 VPS에 나타나지 않습니다. 세션 정보는 기기 간에 이동하지 않습니다. 대부분의 사용자가 VPS의 tmux에서 Claude Code를 실행하는 방식으로 작업한다면, 실제 대화 기록은 서버에 쌓이게 되며 로컬에서 보는 선택기에는 훨씬 적은 수의 세션만 표시됩니다.
이러한 분리 현상은 인터페이스 간에도 동일하게 적용됩니다. 데스크톱 앱과 VS Code 확장 프로그램은 각각 고유한 세션 기록을 유지하며, 이들은 CLI의 기록과 공유되지 않습니다. 웹 버전의 Claude Code 역시 별도의 기록을 유지합니다. Cowork는 사용자가 소유한 하드웨어가 아닌 Anthropic 샌드박스 내부에서 실행되므로, Cowork와 Claude Code를 비교할 때 대화 기록이 어디에 저장되는지는 결정의 중요한 요소가 됩니다.
한 머신 내부에서의 검색 범위는 예상보다 넓습니다. claude --resume <session-id>는 현재 프로젝트 디렉터리와 해당 git 워크트리를 먼저 검색한 다음, 해당 머신에 있는 다른 모든 프로젝트를 검색합니다. 여기서 기억해야 할 핵심은 "해당 머신 내에서"라는 점입니다. 다른 호스트의 세션 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 또는 문서화된 스크립트 인터페이스를 사용할 것을 권장합니다.
두 가지 설정을 통해 저장 위치와 방식을 변경할 수 있습니다. CLAUDE_CONFIG_DIR는 설정 디렉터리 전체를 재배치하며, 이를 통해 기록을 별도의 볼륨이나 암호화된 볼륨에 저장할 수 있습니다. settings.json의 cleanupPeriodDays은 기록 보관 기간을 제어하며, 기본값은 30일이고 최소 1일로 설정할 수 있습니다.
트랜스크립트 파일 내부에는 무엇이 들어 있는가
모든 도구 실행 결과가 기록되므로, 트랜스크립트에는 Claude가 읽은 파일의 내용과 Claude가 실행한 명령의 출력값이 포함됩니다. Anthropic의 데이터 사용 페이지는 이를 명확히 밝히고 있습니다. Claude Code는 세션 트랜스크립트를 ~/.claude/projects/ 아래에 일반 텍스트(plaintext) 형식으로 로컬에 저장합니다.
서버 환경에서 이것이 무엇을 의미하는지 고려해야 합니다. 서비스가 시작되지 않는 이유를 파악하기 위해 Claude가 .env 파일을 읽었다면, 해당 파일의 내용은 이제 홈 디렉터리에 있는 JSONL 파일 안에 저장됩니다. 명령어가 연결 문자열을 출력했다면, 그 문자열 역시 파일 안에 포함됩니다. 데이터가 유출된 것은 아닙니다. 트랜스크립트는 발생한 일을 기록하는 것이 본래 목적이며, 바로 그 이유 때문에 트랜스크립트를 위협 모델에 포함해야 합니다.
- 백업:
/home또는/root을 단순히 백업하면 트랜스크립트가 백업 저장소로 복사됩니다. 제외 설정을 추가하거나, 프롬프트와 파일 내용의 사본이 백업 저장소에 저장된다는 점을 인지하십시오. - 스냅샷 및 이미지: 어떤 이유로든 생성된 VPS 스냅샷에는 해당 디렉터리 전체가 포함됩니다. 두 번째 서버를 구축하기 위해 복제한 이미지도 마찬가지입니다.
- 서버 내 다른 계정: 권한이 엄격할 것이라고 가정하지 말고
ls -ld ~/.claude ~/.claude/projects를 사용하여 직접 모드를 확인하십시오. - 의도적인 업로드:
/feedback명령은 대화 기록을 Anthropic으로 의도적으로 전송하며,/bug및/share도 동일한 경로를 통해 보고합니다. 이는 사용자가 선택하는 작업이므로, 확인을 누르기 전에 무엇에 동의하는지 파악하십시오.
트랜스크립트가 생성되지 않기를 원한다면 CLAUDE_CODE_SKIP_PROMPT_HISTORY을 사용하여 트랜스크립트 기록을 억제할 수 있으며, --no-session-persistence를 사용하면 비대화형 claude -p 실행 시에만 기록을 억제할 수 있습니다. 설정을 변경하기 전에 그에 따른 트레이드오프를 명확히 이해하십시오. 트랜스크립트는 이어하기(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>은 사용자가 직접 설정한 이름만 검색합니다.
트랜스크립트를 grep하여 올바른 세션 찾기
특정 문구만 기억나고 다른 정보가 없을 때가 있습니다. 트랜스크립트는 텍스트 형식이므로 검색이 가능합니다.
grep -rl "nftables" ~/.claude/projects/이 명령은 일치하는 트랜스크립트의 경로를 출력합니다. .jsonl 확장자를 제외한 파일 이름이 세션 ID이며, claude --resume <session-id> 명령에서 이를 사용할 수 있습니다. grep을 사용하여 원하는 세션을 찾은 다음, 해당 세션을 재개하거나 내보내어 내용을 확인하십시오.
두 가지 주의 사항이 있습니다. 첫째, 내용은 JSON으로 이스케이프 처리되어 있으므로 따옴표가 포함된 문구나 줄 바꿈으로 나뉜 문구는 리터럴 문자열로 일치하지 않을 수 있습니다. 둘째, 도구 결과 내에서 일치하는 항목이 발견되었다면 이는 누군가 입력한 내용이 아니라 Claude가 해당 텍스트를 보았음을 의미합니다.
대화 내용 읽기 및 내보내기
/export는 현재 대화 내용을 JSON 형식이 아닌 읽기 쉬운 일반 텍스트로 렌더링합니다. 인수를 지정하지 않으면 클립보드 복사 또는 파일 저장 메뉴가 나타납니다. 파일 이름을 지정하면 /export handover.txt은 해당 경로로 즉시 내용을 기록합니다. 이 방법은 서버의 대화 내용을 로컬 노트북으로 옮기거나 티켓에 첨부할 때 사용하는 올바른 방식입니다.
자동화가 필요한 작업에는 안정성이 보장된 인터페이스를 사용하십시오. 훅(hook)과 상태 표시줄 명령어는 입력값으로 transcript_path 필드를 받으므로, SessionEnd 훅을 사용하면 세션이 종료될 때 대화 기록을 보관할 수 있습니다. 또한 저장된 세션을 열지 않고도 질문을 던질 수 있습니다.
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)의 차이
이 개념들은 자주 혼동되지만, 각각 해결하는 문제가 다릅니다.
재개는 종료, 재부팅 또는 다른 작업으로 전환한 후 대화를 다시 불러오는 기능입니다. 압축은 활성 대화 내의 컨텍스트 윈도우를 다룹니다. /compact는 Claude가 유지하고 있는 내용을 요약으로 대체하여, 이후 요청에서 더 적은 토큰을 사용하도록 합니다. 컨텍스트 윈도우가 가득 찬 것이 문제라면 압축 기능을 사용해야 하며, Claude Code 컨텍스트 윈도우 관리에서 이를 적절히 다룹니다.
메모리는 이와 또 다릅니다. CLAUDE.md 파일과 자동 메모리는 모든 세션 시작 시 로드되는 지침과 사실 정보를 담고 있으므로, 사용자가 돌아가는 대화가 아닙니다. 이는 다시 돌아갈 필요가 없도록 미리 기록해 두는 정보입니다.
두 개의 대화를 동시에 실행하면서 조율하고 싶다면, 이는 별도의 메커니즘이 필요합니다. Claude Code 세션 간 메시지 전송은 두 세션이 모두 활성화된 상태에서 이루어지며, 이는 어제의 세션을 디스크에서 다시 불러오는 것과는 다른 문제입니다.
FAQ
Claude Code는 세션 기록을 어디에 저장합니까?
기본적으로 설정 디렉터리 내의 ~/.claude/projects/<project>/<session-id>.jsonl에 저장됩니다. 여기서 <project>은 영숫자가 아닌 문자를 하이픈으로 치환한 작업 디렉터리 경로입니다. 각 파일은 JSONL 형식이며, 메시지, 도구 사용, 메타데이터 항목이 한 줄에 JSON 객체 하나씩 기록됩니다. CLAUDE_CONFIG_DIR을 사용하면 설정 디렉터리를 다른 곳으로 옮길 수 있으며, settings.json의 cleanupPeriodDays 설정을 통해 기록 보관 기간을 지정할 수 있습니다. 기본값은 30일이며 최소 1일로 설정할 수 있습니다.
노트북의 선택기(picker)에서 왜 VPS 세션이 보이지 않습니까?
기록은 에이전트가 실행된 기기의 디스크에 저장되며, 기기 간에 동기화되지 않기 때문입니다. VPS의 tmux 안에서 나눈 대화는 해당 VPS에만 존재합니다. SSH를 통해 해당 VPS에서 세션을 재개하거나, 로컬 기록이 필요하다면 내부에서 /export을 실행하여 텍스트 파일을 복사하십시오.
다른 디렉터리에서 시작한 세션을 재개할 수 있습니까?
네, 세션 ID를 알고 있다면 가능합니다. claude --resume <session-id>은 현재 프로젝트 디렉터리와 해당 git 작업 트리(worktree)를 먼저 탐색한 뒤, 같은 기기의 다른 모든 프로젝트를 탐색합니다. 선택기 내부에서 Ctrl+A를 누르면 기기 내 모든 프로젝트로 범위를 넓히고, Ctrl+W을 누르면 현재 저장소의 모든 작업 트리로 범위를 넓힙니다. 일치하는 항목이 없으면 Claude Code는 No conversation found with session ID: <session-id>를 보고합니다.
이전 세션을 재개해야 합니까, 아니면 새 세션을 시작해야 합니까?
다음 메시지가 이전 대화 내용에 의존한다면 세션을 재개하십시오. 그렇지 않다면 새로 시작하는 것이 좋습니다. 세션을 재개하면 전체 기록을 다시 불러오며, 이후의 모든 요청에 해당 기록이 포함되기 때문입니다. 컨텍스트 오염(drift)을 주의하십시오. 이미 삭제한 파일을 계속 참조하는 세션은 오래된 컨텍스트를 유지하고 있는 것이며, 이 컨텍스트는 매 요청마다 토큰 비용을 발생시키고 정확도를 떨어뜨립니다.
Claude Code가 디스크에 기록을 남기지 않게 할 수 있습니까?
네. CLAUDE_CODE_SKIP_PROMPT_HISTORY를 사용하면 기록 저장을 차단할 수 있고, --no-session-persistence을 사용하면 비대화형 claude -p 실행 시에만 기록을 차단할 수 있습니다. 다만, 기록은 재개(resume) 기능이 읽어 들이는 데이터이므로, 이를 끄면 --continue 및 --resume가 불러올 데이터가 없어진다는 점을 유의하십시오. 파일이 존재하는 것 자체가 문제라면, CLAUDE_CONFIG_DIR을 암호화된 볼륨으로 지정하고 cleanupPeriodDays 값을 낮추는 방식을 고려하십시오.