Claude Code 멀티 계정 셋업 — 한 Mac에서 4계정 분리 운영
- 1. Claude Code 멀티 계정 셋업 — 한 Mac에서 4계정 분리 운영
- 2. Claude Code 세션 공유 — .jsonl 심볼릭 링크
- 3. Claude Code 설정 동기화와 트러블슈팅
Claude Code에는 rate limit이 있다. 일정량을 넘으면 대기가 걸린다. 해결책은 계정을 더 만드는 것이다. 거기에 회사 프로젝트는 회사 계정, 개인 프로젝트는 개인 계정으로 분리하고 싶은 니즈까지 더해지면, 결국 한 Mac에서 여러 Claude Code 계정을 동시에 운영하는 상황이 된다.
문제는 Claude Code가 기본적으로 ~/.claude 하나만 바라본다는 것이다. 계정을 바꿀 때마다 설정 디렉토리를 통째로 교체하거나, 터미널마다 다른 계정으로 로그인하거나, 매번 API 키를 수동으로 바꾸거나 — 어느 방법도 깔끔하지 않다.
CLAUDE_CONFIG_DIR 환경변수를 사용하면 같은 머신에서 여러 Claude Code 인스턴스를 독립된 설정으로 운영할 수 있습니다. 회사·개인·실험·고객 계정을 한 Mac에서 분리해서 굴리는 셋업입니다.
CLAUDE_CONFIG_DIR이 하는 일
Claude Code는 기동 시 CLAUDE_CONFIG_DIR 환경변수를 읽어 설정·히스토리·세션 데이터를 저장할 루트 디렉토리를 결정합니다. 이 변수를 지정하지 않으면 기본값인 ~/.claude를 사용합니다.
변수 하나로 분리되는 항목은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
settings.json |
모델·옵션·환경변수 설정 |
CLAUDE.md |
프로젝트 전역 지시문 |
commands/, hooks/ |
커스텀 명령 및 훅 |
history.jsonl |
대화 히스토리 |
projects/ |
세션 데이터 (.jsonl) |
반면 분리되지 않는 항목도 있습니다. 전역 zsh 별칭(~/.zshrc), 시스템 PATH, ~/.ssh 같은 OS 레벨 설정은 인스턴스마다 별도로 존재하지 않습니다. Claude Code의 바이너리 자체도 하나이며, 계정별로 별도 설치가 필요하지 않습니다.
디렉토리 생성과 명명 규칙
기본 인스턴스(~/.claude)는 그대로 두고, 추가 인스턴스용 디렉토리를 -N 인덱스로 생성합니다.
mkdir ~/.claude-2 # 두 번째 인스턴스
mkdir ~/.claude-3 # 세 번째 인스턴스
mkdir ~/.claude-4 # 네 번째 인스턴스-1은 기본 ~/.claude에 대응하는 플래그로 예약합니다. 이 명명 규칙을 지키면 뒤에서 정의하는 쉘 함수의 플래그(-1, -2, -3, -4)와 디렉토리 인덱스가 1:1로 대응됩니다.
쉘 함수 정의
~/.oh-my-zsh/custom/aliases.zsh(또는 ~/.zshrc)의 claude() 함수에 인스턴스 선택 플래그를 추가합니다. -1과 -2 플래그를 파싱해 CLAUDE_CONFIG_DIR을 결정한 뒤 command claude를 호출하는 구조입니다.
claude() {
local args=()
local config_dir=""
# ... 기존 플래그 처리 ...
for arg in "$@"; do
if [[ "$arg" =~ ^-[ycg12]+$ ]]; then
local flags="${arg#-}"
for (( i=0; i<${#flags}; i++ )); do
case "${flags:$i:1}" in
1) config_dir="$HOME/.claude" ;;
2) config_dir="$HOME/.claude-2" ;;
# ... 기타 플래그 ...
esac
done
else
args+=("$arg")
fi
done
if [[ -n "$config_dir" ]]; then
CLAUDE_CONFIG_DIR="$config_dir" command claude "${args[@]}"
else
command claude "${args[@]}"
fi
}정의 후 사용 방법은 다음과 같습니다.
# 기본 계정 (플래그 없으면 ~/.claude)
claude
# 명시적으로 기본 계정
claude -1
# 두 번째 계정
claude -2
# 플래그 조합
claude -2y # 두 번째 계정 + yolo
claude -2cy # 두 번째 계정 + continue + yolo
claude -2cyg # 두 번째 계정 + continue + yolo + 다른 플래그CLAUDE_CONFIG_DIR은 해당 셸 세션 내에서만 유효합니다. 별도 터미널 탭마다 독립적으로 인스턴스를 지정할 수 있기 때문에, 회사 계정과 개인 계정을 탭 단위로 분리해서 동시에 운영하는 것이 가능합니다.
기존 설정 마이그레이션
이미 ~/.claude를 사용 중이라면 기본 인스턴스는 그대로 유지하고, 추가 인스턴스에만 필요한 파일을 복사합니다.
# 설정 파일 복사
cp ~/.claude/settings.json ~/.claude-2/
cp ~/.claude/CLAUDE.md ~/.claude-2/
cp -r ~/.claude/commands ~/.claude-2/
cp -r ~/.claude/hooks ~/.claude-2/
# 플러그인은 심볼릭 링크 (동기화 유지 + 용량 절약)
ln -sf ~/.claude/plugins ~/.claude-2/pluginssettings.json과 CLAUDE.md는 복사본으로 관리하므로 인스턴스마다 다른 모델이나 옵션을 설정할 수 있습니다. plugins는 심볼릭 링크로 연결해 두면 한쪽에서 설치하거나 업데이트한 플러그인이 양쪽 모두에 반영됩니다.
마이그레이션 후 디렉토리 구조는 다음과 같습니다.
~/.claude/ ← 기본 인스턴스 (-1)
├── settings.json
├── CLAUDE.md
├── commands/
├── hooks/
├── plugins/ ← 원본
└── history.jsonl
~/.claude-2/ ← 두 번째 인스턴스 (-2)
├── settings.json ← 복사본 (독립 수정 가능)
├── CLAUDE.md ← 복사본
├── commands/ ← 복사본
├── hooks/ ← 복사본
├── plugins → ~/.claude/plugins ← 심볼릭 링크
└── history.jsonl ← 독립 히스토리파일 소유권은 복사 시 자동으로 현재 사용자로 설정되므로 별도 chown 작업은 필요하지 않습니다. 단, 루트 권한으로 복사한 경우에는 소유권을 확인해야 합니다.
인스턴스별 분리되는 것들
CLAUDE_CONFIG_DIR로 분리되는 항목과 공유되는 항목을 정리하면 다음과 같습니다.
인스턴스별 독립 관리
settings.json— 모델 지정,env블록의 API 키, 각종 옵션CLAUDE.md— 전역 시스템 프롬프트commands/,hooks/— 커스텀 명령과 훅history.jsonl— 대화 히스토리 (각 디렉토리에 격리)projects/— 세션 데이터. 기본적으로 인스턴스별 독립 저장됨
공유 상태 유지 (심볼릭 링크 방식)
plugins/— 위 마이그레이션 예시처럼 심볼릭 링크로 공유 가능projects/— 세션 공유가 필요하면~/.claude-shared/projects로 공유 가능 (Ep2에서 다룸)
분리 불가 (OS 레벨 공유)
~/.zshrc,~/.zshenv등 전역 쉘 설정- 시스템
PATH ~/.ssh,~/.gnupg등 자격증명 저장소- Claude Code 바이너리 (
/usr/local/bin/claude등)
운영상 주의
API 키 충돌
settings.json의 env 블록에 API 키를 넣지 않고 셸 환경변수(ANTHROPIC_API_KEY)로 관리하면, 터미널 세션마다 다른 계정의 키가 노출될 위험이 있습니다. 계정별 키는 각 인스턴스의 settings.json env 블록에 명시하거나, 계정별 .env 파일을 분리해서 source 하는 방법을 권장합니다.
쉘 별칭 충돌
위 함수를 정의하기 전에 alias claude=... 형태의 별칭이 이미 있는지 확인합니다. 함수와 별칭이 동시에 존재하면 zsh는 별칭을 우선합니다. 기존 별칭은 unalias claude로 제거한 뒤 함수로 대체합니다.
플래그 없이 실행 시 기본 동작
플래그를 지정하지 않으면 ~/.claude가 사용됩니다. 의도치 않게 기본 인스턴스로 접속하는 실수를 방지하려면 주로 사용하는 계정에 해당하는 플래그(-2 등)를 쉘 프롬프트나 터미널 탭 제목에 표시하는 방법이 유용합니다.
세 번째, 네 번째 계정 추가
~/.claude-3, ~/.claude-4 디렉토리를 생성하고 함수의 case 블록에 3) config_dir="$HOME/.claude-3" ;; 항목을 추가하면 됩니다. 구조가 동일하므로 확장 비용이 낮습니다.
마무리
CLAUDE_CONFIG_DIR 하나와 쉘 함수 수십 줄로 한 Mac에서 여러 Claude Code 인스턴스를 완전히 분리해서 운영할 수 있습니다. 컨텍스트를 격리해야 하는 상황에서 설정 비용 대비 효과가 큰 방법입니다.
다음 글(Ep2)에서는 계정 간 세션 공유를 symlink 구조로 구현하는 방법을, Ep3에서는 sync-claude.sh를 이용한 설정 동기화를 다룹니다.