본문 바로가기

AI Development

Git Worktrees + Claude Code — 혼자서 팀처럼 병렬 개발하는 법

반응형

Claude Code 쓰다 보면 이런 상황이 생겨요.

feature/payment 브랜치에서 결제 API 개발 중...
갑자기 main에서 긴급 버그 리포트 들어옴
→ 하던 작업 stash → 브랜치 변경 → 버그 수정 → 다시 원래로
(컨텍스트 전환 비용 + Claude 세션 날아감)

Git Worktrees는 같은 레포를 여러 폴더에 동시에 체크아웃하는 기능이에요. 브랜치마다 별도 폴더가 생겨서 Claude 세션도 독립적으로 유지돼요.

기존:
하나의 폴더 → 브랜치 전환 → 컨텍스트 날아감

Worktrees:
/myproject          (main)        ← Claude 세션 A
/myproject-payment  (feature/payment) ← Claude 세션 B
/myproject-hotfix   (hotfix/login)    ← Claude 세션 C

→ 3개 동시에 Claude가 작업 가능

설치 및 기본 설정

Git 기본 기능이라 별도 설치 없어요.

# 현재 상황 확인
git worktree list

# 출력:
# /Users/cell/myproject  abc1234 [main]

Worktree 만들기

# 새 브랜치로 worktree 생성
git worktree add ../myproject-payment feature/payment

# 기존 브랜치로 worktree 생성
git worktree add ../myproject-hotfix hotfix/login-bug

# 확인
git worktree list
# /Users/cell/myproject          abc1234 [main]
# /Users/cell/myproject-payment  def5678 [feature/payment]
# /Users/cell/myproject-hotfix   ghi9012 [hotfix/login-bug]

이제 세 폴더가 독립적으로 존재해요. 각 폴더에서 Claude를 따로 실행하면 돼요.


실전 — 3개 작업 동시 진행

터미널 탭 3개 열어요.

탭 1 — 결제 기능 개발

cd ~/myproject-payment
claude

# Claude에게:
"결제 취소 API 만들어줘.
 POST /payments/:id/cancel
 재고 롤백이랑 환불 처리 포함해서"

탭 2 — 긴급 버그 수정

cd ~/myproject-hotfix
claude

# Claude에게:
"로그인 시 소셜 계정 연동되어 있으면
 500 에러 나는 버그 수정해줘.
 에러 로그: TypeError: Cannot read property 'provider' of undefined"

탭 3 — main에서 코드 리뷰

cd ~/myproject
claude

# Claude에게:
"/review PR #47 변경사항 리뷰해줘"

세 Claude가 동시에 다른 작업을 해요. 서로 영향 없어요.


CLAUDE.md를 Worktrees에서 공유하기

각 worktree가 같은 레포를 공유하기 때문에 CLAUDE.md도 자동으로 공유돼요.

~/myproject/CLAUDE.md          → 모든 worktree에서 읽힘
~/myproject/.claude/commands/  → 모든 worktree에서 사용 가능
~/myproject/.claude/skills/    → 모든 worktree에서 사용 가능

한 번 설정하면 모든 worktree에서 같은 컨벤션이 적용돼요.


실전 시나리오 — 하루 업무 흐름

9:00  결제 기능 개발 시작
      cd ~/myproject-payment && claude
      "/feature 결제 취소 API"

9:30  긴급 버그 리포트 들어옴
      → 탭 1은 그대로 둠 (Claude 세션 유지)
      → 새 탭에서:
      git worktree add ../myproject-hotfix hotfix/payment-null
      cd ~/myproject-hotfix && claude
      "payment.ts 45번째 줄 null 에러 수정해줘"

9:45  버그 수정 완료
      cd ~/myproject-hotfix && /pr
      → PR 자동 생성

9:46  탭 1로 돌아옴
      → Claude 세션 그대로 있음
      → 결제 취소 API 이어서 개발

11:00 결제 기능 완료
      /pr → PR 생성

11:01 worktree 정리
      git worktree remove ../myproject-hotfix

stash도 없고 브랜치 전환도 없어요. 그냥 탭 전환이에요.


자주 쓰는 명령어

# worktree 목록
git worktree list

# worktree 삭제 (작업 완료 후)
git worktree remove ../myproject-hotfix

# 강제 삭제 (uncommitted changes 있어도)
git worktree remove --force ../myproject-hotfix

# 정리 (삭제된 폴더 참조 제거)
git worktree prune

주의사항

❌ 같은 브랜치를 두 worktree에서 동시에 체크아웃 불가
   → 다른 브랜치여야 함

❌ node_modules는 각 worktree마다 따로 설치 필요
   → cd ~/myproject-payment && pnpm install

✅ .git은 공유 (커밋, 브랜치 전체 공유)
✅ CLAUDE.md, .claude/ 공유
✅ 각 worktree에서 Claude 독립 실행 가능

node_modules 공유하려면 심볼릭 링크 쓰면 돼요.

# node_modules 심볼릭 링크로 공유 (pnpm 기준)
cd ~/myproject-payment
ln -s ../myproject/node_modules ./node_modules

전후 비교

Worktrees 전:

긴급 버그 발생
→ git stash (현재 작업 임시 저장)
→ git checkout main
→ git checkout -b hotfix/bug
→ 버그 수정
→ git checkout feature/payment
→ git stash pop
→ Claude 새 세션 (이전 컨텍스트 없음)
→ 다시 설명하고 이어서 개발
(총 15분 낭비)

Worktrees 후:

긴급 버그 발생
→ 새 탭 열기
→ git worktree add ../myproject-hotfix hotfix/bug
→ cd ~/myproject-hotfix && claude
→ 버그 수정
→ 원래 탭으로 복귀 (Claude 세션 그대로)
(총 30초)

 

반응형