바이브코딩에서 여러 AI 코딩 세션을 동시에 사용할 때 안전하게 작업하는 방법

AI 코딩 도구를 쓰다 보면 이런 생각이 듭니다.

하나의 프로젝트에서 Claude Code를 두 개 실행해서, 하나는 UI를 고치고 다른 하나는 버그를 잡게 하면 더 빠르지 않을까?

가능합니다. 실제로 잘 운영하면 생산성이 올라갑니다. 다만 아무 준비 없이 같은 프로젝트 폴더에서 여러 세션을 동시에 실행하면 문제가 생길 수 있습니다. 두 세션이 같은 파일을 동시에 수정하거나, 한쪽 세션이 다른 세션의 미완성 변경사항을 기준으로 다시 코드를 고치는 상황이 생길 수 있기 때문입니다.

이 글에서는 바이브코딩을 할 때 하나의 프로젝트를 여러 AI 코딩 세션으로 병렬 작업하는 방법, 컨플릭트를 줄이는 방법, 그리고 실무에서 바로 쓸 수 있는 Git worktree 기반 워크플로우를 정리합니다.

문제는 여러 세션이 아니라 같은 폴더 동시 수정이다

Claude Code를 두 개 실행하는 것 자체가 문제는 아닙니다. 문제는 두 세션이 같은 프로젝트 폴더를 동시에 수정하는 방식입니다.

예를 들어 같은 폴더에서 첫 번째 Claude Code 세션을 실행합니다.

cd my-project
claude

다른 터미널에서도 같은 폴더에서 다시 실행합니다.

cd my-project
claude

이 방식은 단순해 보이지만 위험합니다. 첫 번째 세션이 Header.tsx를 고치고 있는데 두 번째 세션도 우연히 같은 파일을 수정할 수 있습니다. 또는 첫 번째 세션이 아직 정리하지 않은 중간 상태의 코드를 두 번째 세션이 읽고, 그것을 기준으로 잘못된 판단을 할 수도 있습니다.

결과적으로 다음과 같은 문제가 생깁니다.

문제설명
파일 덮어쓰기한 세션의 수정사항을 다른 세션이 다시 바꿔버릴 수 있음
Git 상태 혼란어떤 변경이 어느 세션에서 나온 것인지 구분하기 어려움
컨텍스트 오염한 AI 세션이 다른 세션의 미완성 코드를 기준으로 판단할 수 있음
테스트 실패 원인 추적 어려움어느 변경 때문에 문제가 생겼는지 확인하기 어려움
Merge conflict 증가같은 파일을 동시에 수정하면 충돌 가능성이 높아짐

따라서 병렬 작업의 핵심은 단순합니다.

여러 AI 세션을 쓰되, 같은 작업 폴더를 동시에 수정하지 않게 해야 합니다.

가장 안전한 방법은 Git worktree다

가장 안전한 방식은 Git worktree를 사용하는 것입니다.

Git worktree는 하나의 Git 저장소를 기반으로 여러 개의 작업 폴더를 만들어주는 기능입니다. 각 작업 폴더는 서로 다른 브랜치를 사용할 수 있고, 파일 상태도 분리됩니다.

쉽게 말하면 이런 구조입니다.

my-project/
├── main 작업 폴더
├── 로그인 UI 수정용 작업 폴더
└── API 버그 수정용 작업 폴더

각 폴더는 같은 저장소를 기반으로 하지만, 실제 파일 수정은 서로 분리됩니다. Claude Code 공식 문서도 병렬 세션을 실행할 때 worktree를 사용하면 각 세션의 변경이 서로 다른 파일 체크아웃 안에 머무른다고 안내합니다. Claude Code에는 claude --worktree <name> 형태의 전용 흐름도 있습니다.

기본 원칙은 다음입니다.

한 세션 = 한 작업 = 한 브랜치 = 한 worktree

어떤 작업을 나누면 좋은가

예를 들어 쇼핑몰 프로젝트에서 동시에 하고 싶은 작업이 세 가지라고 가정해 보겠습니다.

  1. 로그인 화면 UI 개선
  2. 상품 목록 페이지 모바일 버그 수정
  3. README 문서 정리

이 세 작업은 서로 직접적인 관련이 적습니다. 따라서 각각 별도 세션으로 나누기 좋습니다.

세션작업수정 가능 범위
세션 1로그인 UI 개선src/pages/Login.tsx, src/components/LoginForm.tsx
세션 2상품 목록 모바일 버그 수정src/pages/ProductList.tsx, 관련 CSS
세션 3README 정리README.md

반대로 다음처럼 범위가 넓거나 전역 파일을 건드리는 작업은 병렬 작업에 적합하지 않습니다.

세션작업문제
세션 1전체 UI 리팩토링수정 범위가 너무 넓음
세션 2공통 컴포넌트 전체 개선다른 작업과 충돌 가능성이 높음
세션 3Tailwind 설정 변경프로젝트 전체에 영향

병렬 작업은 여러 일을 동시에 시키는 것이 아니라, 서로 부딪히지 않는 작은 일을 나누는 것입니다.

기본 워크플로우

아래 방식은 터미널 기준의 가장 기본적인 흐름입니다.

1. 기준 브랜치를 최신 상태로 맞추기

먼저 메인 브랜치를 최신 상태로 맞춥니다.

git checkout main
git pull origin main

프로젝트에 따라 main 대신 masterdevelop을 기준 브랜치로 사용할 수도 있습니다.

2. 작업별 worktree 만들기

작업별로 별도 worktree와 브랜치를 만듭니다.

git worktree add ../wt-login-ui -b feature/login-ui
git worktree add ../wt-product-mobile -b fix/product-mobile
git worktree add ../wt-readme -b docs/readme-update

이제 폴더 구조는 대략 다음처럼 됩니다.

projects/
├── my-project/              # 원래 프로젝트 폴더
├── wt-login-ui/             # 로그인 UI 작업용
├── wt-product-mobile/       # 상품 목록 모바일 버그 수정용
└── wt-readme/               # README 문서 수정용

각 폴더는 같은 저장소를 기반으로 하지만 서로 다른 작업 공간입니다.

Claude Code 자체의 worktree 흐름을 쓰고 싶다면 다음처럼 시작할 수도 있습니다.

claude --worktree login-ui
claude --worktree product-mobile

팀 규칙상 worktree 위치와 브랜치 이름을 명확히 관리하고 싶다면 git worktree add 방식이 더 예측 가능하고, Claude Code의 기본 격리 흐름을 빠르게 쓰고 싶다면 claude --worktree도 좋은 선택입니다.

3. 각 폴더에서 Claude Code 실행하기

각 worktree 폴더로 이동해서 Claude Code를 실행합니다.

cd ../wt-login-ui
claude

다른 터미널에서는 다음처럼 실행합니다.

cd ../wt-product-mobile
claude

README 작업도 별도 폴더에서 실행합니다.

cd ../wt-readme
claude

이렇게 하면 각 Claude 세션이 서로 다른 작업 폴더에서 동작합니다. 한 세션이 수정한 파일이 다른 세션의 작업 폴더에 바로 섞이지 않습니다.

4. 각 세션에 수정 범위를 명확히 알려주기

AI 코딩 도구에 작업을 맡길 때 가장 중요한 것은 수정 범위를 제한하는 것입니다.

나쁜 지시는 이렇습니다.

로그인 화면 개선해줘.

이렇게 말하면 Claude가 로그인 화면뿐 아니라 공통 버튼, 전역 스타일, 라우팅, 상태관리 파일까지 건드릴 수 있습니다.

더 안전한 지시는 다음과 같습니다.

로그인 화면의 UI만 개선하세요.

수정 가능한 파일:
- src/pages/Login.tsx
- src/components/LoginForm.tsx
- src/styles/login.css

수정하지 말아야 할 파일:
- package.json
- 라우팅 파일
- 공통 API client
- 전역 CSS
- 다른 페이지 컴포넌트

작업 방식:
1. 먼저 관련 파일을 확인하세요.
2. 수정 계획을 짧게 설명하세요.
3. 최소한의 변경으로 구현하세요.
4. 변경 파일과 잠재 리스크를 요약하세요.

이런 식으로 범위를 좁혀주면 불필요한 변경이 줄어듭니다.

5. 각 worktree에서 테스트하기

각 worktree에서 작업이 끝나면 바로 커밋하지 말고 먼저 확인합니다.

git status
git diff
npm test
npm run build

프로젝트에 따라 다음 명령어도 사용할 수 있습니다.

npm run lint
npm run typecheck
npm run dev

확인해야 할 것은 다음입니다.

확인 항목이유
의도하지 않은 파일이 수정됐는가작업 범위를 벗어났는지 확인
빌드가 통과하는가기본적인 오류 확인
테스트가 통과하는가기존 기능이 깨졌는지 확인
불필요한 패키지가 추가됐는가dependency 오염 방지
공통 파일이 변경됐는가다른 세션과 충돌 가능성 확인

6. 작은 단위로 커밋하기

문제가 없다면 작업별로 커밋합니다.

git add .
git commit -m "Improve login UI"

다른 worktree에서도 마찬가지입니다.

git add .
git commit -m "Fix product list mobile layout"

좋은 커밋 메시지는 작업 의도가 드러납니다.

Improve login form spacing
Fix product card overflow on mobile
Update README setup guide

나쁜 커밋 메시지는 나중에 문제를 추적하기 어렵습니다.

Update
Fix stuff
AI changes
Various improvements

커밋 단위가 명확해야 문제가 생겼을 때 되돌리기 쉽습니다.

7. main에 하나씩 병합하기

각 작업이 끝났다고 한 번에 모두 병합하지 않는 것이 좋습니다. 하나씩 병합하고, 병합할 때마다 테스트합니다.

cd ../my-project
git checkout main
git pull origin main

먼저 로그인 UI 작업을 병합합니다.

git merge feature/login-ui
npm test
npm run build

문제가 없으면 다음 작업을 병합합니다.

git merge fix/product-mobile
npm test
npm run build

마지막으로 문서 작업을 병합합니다.

git merge docs/readme-update

이렇게 하면 문제가 생겼을 때 어느 작업에서 문제가 발생했는지 쉽게 알 수 있습니다.

병렬 작업에 적합한 일과 부적합한 일

모든 작업이 병렬 세션에 적합한 것은 아닙니다.

병렬 작업에 적합한 작업이유
특정 페이지 UI 수정수정 범위가 비교적 명확함
독립 컴포넌트 추가다른 코드와 충돌 가능성이 낮음
테스트 코드 추가기존 코드 변경이 적음
문서 정리코드와 충돌 가능성이 낮음
작은 버그 수정원인과 파일 범위가 제한적일 수 있음
접근성 점검특정 컴포넌트 단위로 나누기 좋음

예를 들면 다음과 같은 작업은 병렬로 맡기기 좋습니다.

세션 1: Header 모바일 메뉴 접근성 개선
세션 2: LoginForm validation 메시지 개선
세션 3: ProductCard 이미지 비율 문제 수정
세션 4: README 실행 방법 업데이트

반대로 아래 작업은 병렬 세션에 적합하지 않습니다.

병렬 작업에 부적합한 작업이유
전체 리팩토링거의 모든 파일에 영향
라우팅 구조 변경여러 페이지와 연결됨
상태관리 구조 변경전역 영향이 큼
디자인 시스템 변경대부분의 UI에 영향
패키지 업데이트lock file 충돌 가능성
API client 구조 변경여러 기능에 영향

특히 아래 파일은 여러 세션이 동시에 수정하지 않도록 해야 합니다.

package.json
package-lock.json
pnpm-lock.yaml
yarn.lock
vite.config.ts
next.config.js
tailwind.config.js
tsconfig.json
src/router/*
src/store/*
src/api/*
src/styles/global.css

이런 파일들은 프로젝트 전체에 영향을 주기 때문에 한 세션만 담당하게 하는 것이 안전합니다.

컨플릭트가 생겼을 때 처리 방법

worktree를 사용해도 merge conflict가 완전히 사라지는 것은 아닙니다. 두 작업이 같은 파일의 같은 부분을 수정했다면 병합 과정에서 충돌이 날 수 있습니다.

컨플릭트가 발생하면 바로 Claude에게 “알아서 해결해줘”라고 시키는 것은 좋지 않습니다.

먼저 현재 상태를 확인합니다.

git status

그리고 충돌 파일을 확인합니다.

git diff

그다음 Claude에게는 이렇게 지시하는 것이 좋습니다.

Merge conflict가 발생했습니다.
바로 수정하지 말고 먼저 양쪽 변경사항을 설명하세요.

1. 현재 브랜치의 변경사항은 무엇인가요?
2. 병합하려는 브랜치의 변경사항은 무엇인가요?
3. 어떤 변경을 유지하는 것이 안전한가요?
4. 충돌 해결안을 제안하세요.

제가 확인한 뒤 실제 수정을 진행하세요.

컨플릭트 해결은 단순한 코드 편집이 아닙니다. 어떤 기능을 우선할지, 어떤 변경이 더 최신 의도인지 판단해야 합니다. 따라서 최종 판단은 사람이 하는 것이 안전합니다.

가장 쉬운 운영 규칙

복잡하게 느껴진다면 아래 규칙만 기억해도 됩니다.

  1. 같은 프로젝트 폴더에서 Claude Code를 여러 개 동시에 실행하지 않는다.
  2. 병렬 작업은 Git worktree로 분리한다.
  3. 한 세션에는 한 가지 일만 맡긴다.
  4. 각 세션의 수정 가능 파일을 제한한다.
  5. package.json, lock file, 전역 CSS, 라우팅, 설정 파일은 병렬 수정하지 않는다.
  6. 작업이 끝나면 diff를 확인한다.
  7. main에는 하나씩 병합하고, 병합할 때마다 테스트한다.

이 규칙을 지키면 병렬 바이브코딩의 위험을 크게 줄일 수 있습니다.

Claude Code에 바로 넣을 수 있는 프롬프트 템플릿

아래 템플릿을 각 세션 시작 시 붙여 넣으면 좋습니다.

현재 작업은 별도 Git worktree에서 진행합니다.

작업 내용:
[여기에 작업 내용을 입력]

수정 가능 범위:
[수정 가능한 파일 또는 폴더를 입력]

수정 금지:
- package.json
- lock file
- routing
- global styles
- shared API client
- 관련 없는 컴포넌트

작업 방식:
1. 먼저 관련 파일을 확인하세요.
2. 수정 전 간단한 구현 계획을 설명하세요.
3. 최소한의 변경으로 구현하세요.
4. 가능한 경우 lint, test, build를 실행하세요.
5. 변경된 파일, 주요 변경 내용, 잠재 리스크를 요약하세요.

예시는 다음과 같습니다.

현재 작업은 별도 Git worktree에서 진행합니다.

작업 내용:
로그인 화면의 UI 간격과 버튼 정렬을 개선하세요.

수정 가능 범위:
- src/pages/Login.tsx
- src/components/LoginForm.tsx
- src/styles/login.css

수정 금지:
- package.json
- lock file
- routing
- global styles
- shared API client
- 다른 페이지 컴포넌트

작업 방식:
1. 먼저 관련 파일을 확인하세요.
2. 수정 전 간단한 구현 계획을 설명하세요.
3. 최소한의 변경으로 구현하세요.
4. 가능한 경우 lint, test, build를 실행하세요.
5. 변경된 파일, 주요 변경 내용, 잠재 리스크를 요약하세요.

작업이 끝난 worktree 정리하기

작업이 끝난 worktree는 정리할 수 있습니다.

git worktree remove ../wt-login-ui
git worktree remove ../wt-product-mobile
git worktree remove ../wt-readme

사용하지 않는 worktree 정보가 남아 있다면 다음 명령어로 정리합니다.

git worktree prune

다만 정리하기 전에 해당 worktree에 남은 변경사항, 커밋, 푸시되지 않은 브랜치가 없는지 확인해야 합니다.

결론

바이브코딩에서 여러 AI 코딩 세션을 동시에 사용하는 것은 충분히 유용합니다. 다만 같은 폴더에서 여러 세션을 동시에 실행하는 방식은 피하는 것이 좋습니다. 파일 수정이 섞이고, Git 상태가 복잡해지며, 컨플릭트가 발생했을 때 원인을 추적하기 어려워집니다.

가장 안정적인 방식은 Git worktree를 사용해 세션별 작업 공간을 분리하는 것입니다.

핵심은 다음 한 문장으로 정리할 수 있습니다.

AI 코딩 세션을 병렬로 돌릴 때는, 사람 개발자 여러 명이 협업하듯이 브랜치와 작업 범위를 분리해야 한다.

AI가 코드를 빠르게 작성해 주더라도, 작업을 나누고 병합 순서를 관리하는 역할은 여전히 사람에게 있습니다. 바이브코딩의 생산성은 AI에게 모든 것을 맡길 때가 아니라, 사람이 작업 단위와 경계선을 명확히 설계할 때 가장 안정적으로 올라갑니다.

참고 자료