VS Code와 터미널이 각각 Claude에 연결된 그림

필자는 Claude Code를 두 군데서 쓴다. VS Code 확장에서 한 번, 터미널 CLI에서 한 번. 그리고 계정도 두 개다. 하나는 개인 Pro, 하나는 학교에서 받은 Team 좌석.

당연히 VS Code는 학교 계정, 터미널은 개인 계정으로 나눠 쓰고 있다고 생각했다. 그런데 사용량을 확인해보니 양쪽이 완전히 똑같이 나왔다.

Session (5hr)   34%   Resets in 4h
Weekly (7 day)   4%   Resets in 3d

계정이 다르면 한도도 따로 차야 하는데 왜 같을까? 계정 정보가 남아있어서 생기는 일시적인 오류인가 싶었다. 파보니 아니었다.

원인 1 — 로그인 정보는 한 군데에만 있다

Claude Code의 로그인 정보가 어디 저장되는지부터 확인했다. macOS 키체인이다.

security find-generic-password -s "Claude Code-credentials"
"acct"<blob>="jin"
"svce"<blob>="Claude Code-credentials"

항목이 딱 하나다. 그리고 계정 정보가 담긴 ~/.claude.json을 열어보면 역시 oauthAccount가 하나뿐이다.

python3 -c 'import json,os;d=json.load(open(os.path.expanduser("~/.claude.json")));print(d["oauthAccount"]["emailAddress"])'

혹시 VS Code 확장이 자기만의 저장소를 따로 갖고 있나 싶어 확장이 VS Code에 저장해둔 값도 꺼내봤다.

sqlite3 ~/Library/Application\ Support/Code/User/globalStorage/state.vscdb \
  "select value from ItemTable where key='Anthropic.claude-code';"
{"settingsMigrated20251024":true,"experimentGates":{...},
 "hiddenSessionIds":[...],"defaultPermissionMode":"auto"}

전부 UI 설정이고 계정 정보가 없다. 즉 VS Code 확장과 CLI는 같은 키체인 항목, 같은 ~/.claude.json을 공유하고 있었다. 같은 곳을 보니 계정이 갈릴 수가 없다.

여기서 필자는 “그럼 구조적으로 두 계정을 동시에 쓸 수 없구나”라고 결론지었다. 틀린 결론이었다. 왜 틀렸는지는 뒤에서 다룬다.

그럼 VS Code에 학교 계정 이메일이 떠 있던 건 뭐였나. 그냥 옛날 값이었다. 그 창을 켤 당시 로그인돼 있던 계정 정보를 읽어와서 계속 보여주고 있었던 거다. 그 사이에 개인 계정으로 다시 로그인한 걸 창이 모르고 있었다.

원인 2 — 사용량 분석은 계정과 무관하다

사용량 패널 아래쪽에 이런 분석이 나온다.

98% of your usage was at >150k context
84% of your usage came from sessions active for 8+ hours

이 부분은 계정 기준이 아니다. 패널에도 작게 적혀 있다.

Approximate, based on local sessions on this machine — does not include other devices or claude.ai

이 기기의 세션 로그 파일에서 계산하는 값이다. 그러니 어느 계정으로 보든 항상 같게 나온다. 위쪽 퍼센트는 실제 토큰 기준이라 같은 계정이어서 같았고, 아래쪽 분석은 애초에 계정과 상관이 없어서 같았다. 두 겹으로 똑같았던 것이다.

계정 확인은 claude auth status로

여기서 알게 된 유용한 명령어가 하나 있다. /status 슬래시 명령 말고, 셸에서 바로 쓸 수 있는 비대화형 명령이 있다.

claude auth status
{
  "loggedIn": true,
  "authMethod": "claude.ai",
  "email": "personal@example.com",
  "orgName": "personal@example.com's Organization",
  "subscriptionType": "pro"
}

claude auth에는 login / logout / status가 있다. JSON으로 딱 떨어져 나오니 어느 창이 어느 계정인지 확인할 때 훨씬 편하다.

해결 — CLAUDE_CONFIG_DIR

Claude Code에는 설정 디렉터리를 바꾸는 환경변수 CLAUDE_CONFIG_DIR이 있다. 이게 인증까지 갈라주는지가 핵심이었다. 빈 디렉터리를 만들어 시험해봤다.

mkdir /tmp/testconf
CLAUDE_CONFIG_DIR=/tmp/testconf claude auth status
{
  "loggedIn": false,
  "authMethod": "none",
  "apiProvider": "firstParty"
}

된다. 같은 기기, 같은 키체인인데도 설정 디렉터리를 바꾸니 로그인 상태가 따로 논다. 이걸로 계정을 나눌 수 있다.

왜 되는가 — 키체인 항목 이름이 갈린다

앞에서 “키체인 항목이 하나뿐”이라고 했는데, 두 번째 계정으로 로그인한 뒤 다시 세어보니 두 개가 되어 있었다.

security dump-keychain | grep "Claude Code-credentials"
"svce"<blob>="Claude Code-credentials"
"svce"<blob>="Claude Code-credentials-ad195971"

접미사 ad195971이 뭔지 궁금해서 직접 계산해봤다. 자기 경로를 넣어보면 자기 접미사가 나온다.

python3 -c 'import hashlib,os,sys; print(hashlib.sha256(sys.argv[1].encode()).hexdigest()[:8])' \
  "$HOME/.claude-hgu"

필자의 경우 ad195971이 그대로 나왔다. 설정 디렉터리 경로의 SHA-256 앞 8자리다. Claude Code는 CLAUDE_CONFIG_DIR 마다 키체인 항목 이름을 따로 만든다. 그래서 두 계정이 서로를 덮어쓰지 않는다.

처음에 “항목이 하나뿐”이었던 건 기본 디렉터리만 쓰고 있었기 때문이다. 하나뿐인 걸 보고 구조적 한계라고 판단한 게 실수였다.

실제 설정

필자는 이렇게 배치했다.

  • CLI → ~/.claude (기본값 그대로) → 개인 Pro
  • VS Code → ~/.claude-hgu (새로 만듦) → 학교 Team

CLI를 기본값에 두는 게 중요하다. 그러면 기존 로그인·기록·설정을 하나도 건드리지 않는다.

1. 새 설정 디렉터리 만들기

인증만 새로 잡고 나머지는 심볼릭 링크로 공유한다.

NEW=~/.claude-hgu
mkdir -p "$NEW"
for f in CLAUDE.md settings.json settings.local.json projects plugins; do
  ln -s ~/.claude/"$f" "$NEW/$f"
done

projects를 링크하는 게 특히 중요하다. 프로젝트 메모리가 projects/<프로젝트>/memory/ 안에 살기 때문에, 링크를 안 하면 새 계정 쪽에서는 기억이 통째로 사라진다. 세션 파일은 UUID별로 갈라져 있어서 두 계정이 같이 써도 충돌하지 않는다.

반대로 이런 건 링크하면 안 된다.

history.jsonl     단일 append 파일 → 동시에 쓰면 경합
daemon*           프로세스 상태 파일
session-env       세션별 환경

2. VS Code 확장만 새 디렉터리를 보게 하기

확장에 claudeCode.environmentVariables라는 설정이 있다. VS Code 사용자 설정(Cmd+Shift+P → Preferences: Open User Settings (JSON))에 추가한다.

"claudeCode.environmentVariables": [
  { "name": "CLAUDE_CONFIG_DIR", "value": "/Users/사용자명/.claude-hgu" }
]

경로에 ~는 쓰지 말고 절대경로로 적는다. 값이 그대로 환경변수로 넘어가기 때문에 셸이 풀어주지 않는다.

3. 새 디렉터리로 로그인

CLAUDE_CONFIG_DIR=~/.claude-hgu claude auth login --email school@example.com

브라우저가 뜨면 학교 계정으로 로그인한다. 끝나면 VS Code 창을 새로고침한다 (Cmd+Shift+P → Developer: Reload Window).

4. 확인

claude auth status                                    # → 개인 계정
CLAUDE_CONFIG_DIR=~/.claude-hgu claude auth status    # → 학교 계정

헷갈리기 쉬운 지점

claudeCode.environmentVariables는 확장이 띄우는 Claude에 적용된다. 그런데 VS Code 통합 터미널도 이 영향을 받는다. 확장이 띄운 셸이 확장의 환경을 그대로 물려받기 때문이다.

필자는 처음에 “통합 터미널은 확장 설정과 무관하니 거기서 claude를 치면 개인 계정이 뜬다”고 생각했는데, 실제로 확인해보니 아니었다.

echo $CLAUDE_CONFIG_DIR
# /Users/사용자명/.claude-hgu

즉 VS Code 안에서는 확장이든 통합 터미널이든 학교 계정이다. 개인 계정을 쓰려면 확장 밖의 터미널(Terminal.app, iTerm 등)을 열거나, 변수를 명시적으로 빼주면 된다.

env -u CLAUDE_CONFIG_DIR claude auth status

반대로 확장 밖 터미널에서 학교 계정을 쓰고 싶으면 ~/.zshrc에 alias를 걸면 된다.

alias claude-school='CLAUDE_CONFIG_DIR=~/.claude-hgu claude'

되돌리기

claudeCode.environmentVariables 항목만 지우고 창을 새로고침하면 VS Code가 다시 기본 디렉터리로 돌아간다. 새로 만든 디렉터리는 남겨둬도 무해하다.

정리

  • VS Code 확장은 별도 자격증명 저장소가 없고 CLI와 같은 곳을 본다
  • 그래서 기본 상태로는 두 계정을 동시에 쓸 수 없다
  • CLAUDE_CONFIG_DIR을 다르게 주면 인증까지 갈라진다
  • 키체인 항목 이름에 설정 디렉터리 경로의 SHA-256 앞 8자리가 붙어서 서로 덮어쓰지 않는다
  • VS Code 통합 터미널도 확장의 환경을 물려받는다 — 확장과 같은 계정이 된다
  • 단, 설정 디렉터리 전체가 갈라지므로 CLAUDE.md·settings.json·projects는 심볼릭 링크로 공유해주는 편이 좋다
  • 계정 확인은 claude auth status가 제일 빠르다

계정 정보가 남아서 생긴 오류인 줄 알았는데, 기본 상태로는 애초에 나눠 쓸 수 없었고 표시만 옛날 값이었다는 결론. 그리고 눈에 보이는 게 하나뿐이라고 해서 구조적 한계는 아니었다 — 이름이 갈려 있을 뿐이었다.

사용량이 이상하게 똑같이 나온다면 claude auth status를 먼저 찍어보자.