๊น€๊ณผ์žฅ
๐ŸŒฟ Git Worktree โ€” ์•ˆ์ „ํ•œ ์‹คํ—˜ ๊ณต๊ฐ„

Step 23 / 22

๐ŸŒฟ Git Worktree โ€” ์•ˆ์ „ํ•œ ์‹คํ—˜ ๊ณต๊ฐ„

์›๋ณธ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ณ„๋„ ๊ณต๊ฐ„์—์„œ ์‹คํ—˜ํ•˜๊ธฐ

Git Worktree = ์•ˆ์ „ํ•œ ์‹คํ—˜ ๊ณต๊ฐ„

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ค๊ฐ€ โ€œ์•„, ์ด๊ฑฐ ์ž˜๋ชป ๊ฑด๋“œ๋ ธ๋‹คโ€ ์‹ถ์„ ๋•Œ ์žˆ์ž–์•„์š”? ๋˜๋Œ๋ฆฌ๋ ค ํ•ด๋„ ์–ด๋””๊นŒ์ง€ ๋ฐ”๊ฟจ๋Š”์ง€ ๊ธฐ์–ต์ด ์•ˆ ๋‚˜๊ณ , ์›๋ณธ์ด ๋ง๊ฐ€์งˆ๊นŒ ๋ด ๋ถˆ์•ˆํ•˜๊ณ . ์ด๋Ÿฐ ๊ฒฝํ—˜, ๋‹ค๋“ค ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

Git Worktree๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ด์ค˜์š”. ์›๋ณธ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์˜†์— ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์„œ ๋งˆ์Œ๊ป ์‹คํ—˜ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.

๋น„์œ ํ•˜๋ฉด ๋ชจ๋ธํ•˜์šฐ์Šค์™€ ๊ฐ™์•„์š”. ์‹ค์ œ๋กœ ์‚ด๊ณ  ์žˆ๋Š” ์šฐ๋ฆฌ ์ง‘(์›๋ณธ)์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ์˜†์— ๋ชจ๋ธํ•˜์šฐ์Šค(์›ŒํฌํŠธ๋ฆฌ)๋ฅผ ์ง€์–ด์„œ ์ธํ…Œ๋ฆฌ์–ด๋ฅผ ๋ฐ”๊ฟ”๋ณด๊ณ , ๋ฒฝ์ง€๋ฅผ ๋ฐ”๊ฟ”๋ณด๊ณ , ๊ฐ€๊ตฌ๋ฅผ ์˜ฎ๊ฒจ๋ณด๋Š” ๊ฑฐ์˜ˆ์š”. ๋งˆ์Œ์— ๋“ค๋ฉด ์šฐ๋ฆฌ ์ง‘์—๋„ ์ ์šฉํ•˜๊ณ , ๋งˆ์Œ์— ์•ˆ ๋“ค๋ฉด ๋ชจ๋ธํ•˜์šฐ์Šค๋ฅผ ์ฒ ๊ฑฐํ•˜๋ฉด ๋์ด์—์š”.

๋ชจ๋ธํ•˜์šฐ์ŠคGit Worktree
์›๋ณธ ์ง‘์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€์›๋ณธ ์ฝ”๋“œ(main ๋ธŒ๋žœ์น˜)๋Š” ๊ทธ๋Œ€๋กœ
์˜†์— ๋ชจ๋ธํ•˜์šฐ์Šค๋ฅผ ์ง€์Œ์˜†์— ์ƒˆ ์ž‘์—… ํด๋”๋ฅผ ์ƒ์„ฑ
์ธํ…Œ๋ฆฌ์–ด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‹คํ—˜์ฝ”๋“œ๋ฅผ ๋งˆ์Œ๊ป ์ˆ˜์ •/์‹คํ—˜
๋งˆ์Œ์— ๋“ค๋ฉด ์šฐ๋ฆฌ ์ง‘์— ์ ์šฉ๋งˆ์Œ์— ๋“ค๋ฉด merge(ํ•ฉ์น˜๊ธฐ)
๋งˆ์Œ์— ์•ˆ ๋“ค๋ฉด ์ฒ ๊ฑฐ๋งˆ์Œ์— ์•ˆ ๋“ค๋ฉด ํด๋” ์‚ญ์ œ
์šฐ๋ฆฌ ์ง‘์— ์˜ํ–ฅ ์—†์Œ์›๋ณธ ๋ธŒ๋žœ์น˜์— ์˜ํ–ฅ ์—†์Œ

ํ•œ ์ค„ ์š”์•ฝ

Git Worktree = ์›๋ณธ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„ ๊ณต๊ฐ„. ์‹คํ—˜์ด ์„ฑ๊ณตํ•˜๋ฉด ํ•ฉ์น˜๊ณ , ์‹คํŒจํ•˜๋ฉด ์‚ญ์ œํ•˜๋ฉด ๋ผ์š”.

์™œ Worktree๊ฐ€ ํ•„์š”ํ• ๊นŒ?

โ€œ๊ทธ๋ƒฅ ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๋ฉด ๋˜์ง€ ์•Š์•„?โ€๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งž์•„์š”, ๋ธŒ๋žœ์น˜๋„ ์‹คํ—˜์šฉ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ Worktree๋Š” ๋ธŒ๋žœ์น˜๋ณด๋‹ค ํ›จ์”ฌ ํŽธํ•œ ์ ์ด ์žˆ์–ด์š”.

๐Ÿ“‚

ํด๋”๊ฐ€ ๋”ฐ๋กœ ์žˆ์–ด์š”

์ผ๋ฐ˜ ๋ธŒ๋žœ์น˜๋Š” ๊ฐ™์€ ํด๋” ์•ˆ์—์„œ ์ „ํ™˜ํ•ด์•ผ ํ•ด์š”. Worktree๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ํด๋”์— ๋งŒ๋“ค์–ด์ ธ์š”. ์›๋ณธ ํด๋”์™€ ์‹คํ—˜ ํด๋”๋ฅผ ๋™์‹œ์— ์—ด์–ด๋‘˜ ์ˆ˜ ์žˆ์–ด์š”.

โœ…

์›๋ณธ์ด ํ•ญ์ƒ ์•ˆ์ „ํ•ด์š”

์‹คํ—˜ํ•˜๋‹ค ๋ญ”๊ฐ€ ์ž˜๋ชป๋˜์–ด๋„ ์›๋ณธ ํด๋”์—๋Š” ์•„๋ฌด ์˜ํ–ฅ์ด ์—†์–ด์š”. ์‹ฌ๋ฆฌ์  ์•ˆ์ „๊ฐ์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์š”. โ€œ์ผ๋‹จ ํ•ด๋ณด์žโ€๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ์š”.

๐Ÿš€

์ „ํ™˜ ์—†์ด ๋™์‹œ ์ž‘์—…

๋ธŒ๋žœ์น˜๋Š” ํ•˜๋‚˜์”ฉ ์ „ํ™˜ํ•ด์•ผ ํ•˜์ง€๋งŒ, Worktree๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋™์‹œ์— ์—ด ์ˆ˜ ์žˆ์–ด์š”. ๊ธฐ๋Šฅ A ๋งŒ๋“ค๋ฉด์„œ, ๊ธฐ๋Šฅ B๋„ ๋™์‹œ์— ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ—‘

๊น”๋”ํ•œ ์ •๋ฆฌ

์‹คํ—˜์ด ๋๋‚˜๋ฉด ํด๋”๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋์ด์—์š”. ๋ณต์žกํ•œ git ๋ช…๋ น์–ด๊ฐ€ ํ•„์š” ์—†์–ด์š”. ๋งˆ์น˜ ์ž„์‹œ ํด๋”๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค ์ง€์šฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•ด์š”.

๋ธŒ๋žœ์น˜ ์ „ํ™˜ vs Worktree โ€” ๋น„๊ต

ํ•ญ๋ชฉ๋ธŒ๋žœ์น˜ ์ „ํ™˜ (checkout)Worktree
์ž‘์—… ๋ฐฉ์‹๊ฐ™์€ ํด๋”์—์„œ ๋ธŒ๋žœ์น˜ ์ „ํ™˜๋ณ„๋„ ํด๋”์— ๋…๋ฆฝ ์ž‘์—… ๊ณต๊ฐ„
๋™์‹œ ์ž‘์—…ํ•œ ๋ฒˆ์— ํ•˜๋‚˜๋งŒ์—ฌ๋Ÿฌ ๊ฐœ ๋™์‹œ์— ๊ฐ€๋Šฅ
์›๋ณธ ์•ˆ์ „์„ฑ์ „ํ™˜ ์‹œ ํŒŒ์ผ์ด ๋ฐ”๋€œ์›๋ณธ ํด๋”๋Š” ์ „ํ˜€ ์•ˆ ๋ฐ”๋€œ
์ •๋ฆฌ๋ธŒ๋žœ์น˜ ์‚ญ์ œ (git branch -d)ํด๋” ์‚ญ์ œ + git worktree remove
๋ณต์žก๋„git checkout, stash ๋“ฑ ํ•„์š”ํด๋” ์—ด๊ธฐ/๋‹ซ๊ธฐ ์ˆ˜์ค€
์ถ”์ฒœ ์ƒํ™ฉ๋น ๋ฅธ ์ˆ˜์ •์‹คํ—˜, ํฐ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ํŒ€ ์ž‘์—…

์–ธ์ œ Worktree๋ฅผ ์“ฐ๋ฉด ์ข‹์„๊นŒ?

โ€ข ์ƒˆ ๊ธฐ๋Šฅ์„ ์‹คํ—˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
โ€ข ํฐ ๋ณ€๊ฒฝ์„ ํ•˜๋Š”๋ฐ ์›๋ณธ์ด ๋ง๊ฐ€์งˆ๊นŒ ๊ฑฑ์ •๋  ๋•Œ
โ€ข ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ๋•Œ
โ€ข Claude Code์˜ Agent Teams์™€ ํ•จ๊ป˜ ์“ธ ๋•Œ (๋’ค์—์„œ ์„ค๋ช…ํ•ด์š”)

Worktree = ๋ชจ๋ธํ•˜์šฐ์Šค

์›๋ณธ ์ง‘(์ฝ”๋“œ)์€ ๊ทธ๋Œ€๋กœ, ์˜†์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‹คํ—˜ํ•˜์„ธ์š”

Worktree ๋งŒ๋“ค๊ธฐ โ€” /worktree ํ•œ ์ค„์ด๋ฉด ๋

Claude Code์—์„œ๋Š” Worktree๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ •๋ง ์‰ฌ์›Œ์š”. ์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด ํ•˜๋‚˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 1: Claude Code ์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด (๊ฐ€์žฅ ์‰ฌ์›€)

Claude Code์—์„œ ์ž…๋ ฅ
/worktree

์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด Claude Code๊ฐ€ ์•Œ์•„์„œ ์ƒˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ , ์›ŒํฌํŠธ๋ฆฌ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฑฐ๊ธฐ๋กœ ์ด๋™๊นŒ์ง€ ํ•ด์ค˜์š”. ํ•œ ์ค„์ด๋ฉด ๋์ด์—์š”.

๋ฐฉ๋ฒ• 2: ์ง์ ‘ git ๋ช…๋ น์–ด ์‚ฌ์šฉ

์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด ์—†์ด ์ง์ ‘ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, git ๋ช…๋ น์–ด๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ์–ด์š”.

์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ (์ƒˆ ๋ธŒ๋žœ์น˜์™€ ํ•จ๊ป˜)
# ์ƒ์œ„ ํด๋”์— ์ƒˆ ์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ
git worktree add ../my-experiment feat/new-feature

# ์„ค๋ช…:
# ../my-experiment  โ†’ ์›ŒํฌํŠธ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ํด๋” ๊ฒฝ๋กœ
# feat/new-feature  โ†’ ์ƒˆ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„
์›ŒํฌํŠธ๋ฆฌ๋กœ ์ด๋™ํ•ด์„œ ์ž‘์—…
# ์›ŒํฌํŠธ๋ฆฌ ํด๋”๋กœ ์ด๋™
cd ../my-experiment

# ์—ฌ๊ธฐ์„œ ์ž์œ ๋กญ๊ฒŒ ์ž‘์—…!
# ์›๋ณธ ํด๋”์™€ ์™„์ „ํžˆ ๋…๋ฆฝ๋˜์–ด ์žˆ์–ด์š”.

์ „์ฒด ํ๋ฆ„ โ€” 4๋‹จ๊ณ„

1
์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ

/worktree ๋˜๋Š” git worktree add ๋ช…๋ น์–ด๋กœ ์ƒˆ ์ž‘์—… ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด์š”

2
๋งˆ์Œ๊ป ์‹คํ—˜

์›ŒํฌํŠธ๋ฆฌ ํด๋”์—์„œ ์ž์œ ๋กญ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•ด์š”

3
๊ฒฐ๊ณผ ํ™•์ธ ํ›„ ๊ฒฐ์ •

๋งˆ์Œ์— ๋“ค๋ฉด merge(ํ•ฉ์น˜๊ธฐ), ๋งˆ์Œ์— ์•ˆ ๋“ค๋ฉด ์‚ญ์ œ

4
์ •๋ฆฌ

git worktree remove๋กœ ๊น”๋”ํ•˜๊ฒŒ ์›ŒํฌํŠธ๋ฆฌ ์ œ๊ฑฐ

๊ด€๋ฆฌ ๋ช…๋ น์–ด โ€” ์ด๊ฒƒ๋งŒ ์•Œ๋ฉด ๋ผ์š”

๋ช…๋ น์–ด์„ค๋ช…
git worktree listํ˜„์žฌ ์›ŒํฌํŠธ๋ฆฌ ๋ชฉ๋ก ๋ณด๊ธฐ
git worktree add ../ํด๋” ๋ธŒ๋žœ์น˜์ด๋ฆ„์ƒˆ ์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ
git worktree remove ../ํด๋”์›ŒํฌํŠธ๋ฆฌ ์ œ๊ฑฐ
git worktree prune์‚ญ์ œ๋œ ํด๋”์˜ ์›ŒํฌํŠธ๋ฆฌ ์ •๋ฆฌ
์›ŒํฌํŠธ๋ฆฌ ๋ชฉ๋ก ํ™•์ธ
git worktree list

# ์ถœ๋ ฅ ์˜ˆ์‹œ:
# /home/user/my-project       abc1234 [main]
# /home/user/my-experiment    def5678 [feat/new-feature]

์‹คํ—˜์ด ๋งˆ์Œ์— ๋“ค ๋•Œ โ€” merge(ํ•ฉ์น˜๊ธฐ)

์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์›๋ณธ์— ํ•ฉ์น˜๊ธฐ
# 1. ์›ŒํฌํŠธ๋ฆฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹
cd ../my-experiment
git add .
git commit -m "์ƒˆ ๊ธฐ๋Šฅ ์™„์„ฑ"

# 2. ์›๋ณธ ํด๋”๋กœ ๋Œ์•„๊ฐ€์„œ merge
cd ../my-project
git merge feat/new-feature

# 3. ์›ŒํฌํŠธ๋ฆฌ ์ •๋ฆฌ
git worktree remove ../my-experiment
git branch -d feat/new-feature

์‹คํ—˜์ด ๋งˆ์Œ์— ์•ˆ ๋“ค ๋•Œ โ€” ์‚ญ์ œ

์‹คํ—˜ ์‹คํŒจ! ๊น”๋”ํ•˜๊ฒŒ ์‚ญ์ œ
# ์›ŒํฌํŠธ๋ฆฌ ์‚ญ์ œ (ํด๋”๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋จ)
git worktree remove ../my-experiment

# ๋ธŒ๋žœ์น˜๋„ ์‚ญ์ œ (์„ ํƒ)
git branch -D feat/new-feature

# ๋! ์›๋ณธ์€ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋ฐ”๋€Œ์–ด ์žˆ์–ด์š”.

Claude Code๊ฐ€ ๋‹ค ํ•ด์ค˜์š”

์œ„์˜ git ๋ช…๋ น์–ด๋ฅผ ์™ธ์šธ ํ•„์š” ์—†์–ด์š”. Claude Code์—๊ฒŒ โ€œ์›ŒํฌํŠธ๋ฆฌ ๋งŒ๋“ค์–ด์ค˜โ€, โ€œ์‹คํ—˜ ๊ฒฐ๊ณผ ํ•ฉ์ณ์ค˜โ€, โ€œ์›ŒํฌํŠธ๋ฆฌ ์‚ญ์ œํ•ด์ค˜โ€๋ผ๊ณ  ํ•œ๊ตญ์–ด๋กœ ๋งํ•˜๋ฉด ์•Œ์•„์„œ ํ•ด์ค˜์š”.

Agent Teams์™€ ์กฐํ•ฉํ•˜๊ธฐ

Worktree์˜ ์ง„์งœ ํž˜์€ Agent Teams์™€ ํ•จ๊ป˜ ์“ธ ๋•Œ ๋‚˜์™€์š”. Agent Teams๋Š” Claude Code๊ฐ€ ์—ฌ๋Ÿฌ โ€œํŒ€์›(์—์ด์ „ํŠธ)โ€์„ ๋งŒ๋“ค์–ด์„œ ๋™์‹œ์— ์ž‘์—…ํ•˜๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

๋ฌธ์ œ๋Š”, ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ๊ฐ™์€ ํด๋”์—์„œ ๋™์‹œ์— ์ž‘์—…ํ•˜๋ฉด ์„œ๋กœ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ์ถฉ๋Œ์ด ๋‚  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ 3๋ช…์ด ๊ฐ™์€ ๋„๋งˆ ํ•˜๋‚˜์—์„œ ๋™์‹œ์— ์นผ์งˆํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ์œ„ํ—˜ํ•˜์ฃ ?

๊ทธ๋ž˜์„œ Agent Teams๋Š” ๊ฐ ์—์ด์ „ํŠธ์—๊ฒŒ ๋ณ„๋„์˜ ์›ŒํฌํŠธ๋ฆฌ๋ฅผ ์ค˜์š”. ์š”๋ฆฌ์‚ฌ๋งˆ๋‹ค ์ž๊ธฐ ๋„๋งˆ๋ฅผ ๊ฐ–๋Š” ๊ฑฐ์˜ˆ์š”. ๊ฐ์ž ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…ํ•˜๊ณ , ๋‹ค ๋๋‚˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์น˜๋Š” ๋ฐฉ์‹์ด์—์š”.

์˜ˆ์‹œ: ์›น์‚ฌ์ดํŠธ 3๊ฐœ ํŽ˜์ด์ง€๋ฅผ ๋™์‹œ์— ๋งŒ๋“ค๊ธฐ

Worktree ์—†์ด

ํŽ˜์ด์ง€ A ๋งŒ๋“ค๊ธฐ โ†’ ์™„์„ฑ โ†’ ํŽ˜์ด์ง€ B ๋งŒ๋“ค๊ธฐ โ†’ ์™„์„ฑ โ†’ ํŽ˜์ด์ง€ C ๋งŒ๋“ค๊ธฐ. ์ˆœ์ฐจ ์ž‘์—…์ด๋ผ ์‹œ๊ฐ„์ด 3๋ฐฐ ๊ฑธ๋ ค์š”.

Worktree + Agent Teams

์—์ด์ „ํŠธ A(์›ŒํฌํŠธ๋ฆฌ A), ์—์ด์ „ํŠธ B(์›ŒํฌํŠธ๋ฆฌ B), ์—์ด์ „ํŠธ C(์›ŒํฌํŠธ๋ฆฌ C)๊ฐ€ ๋™์‹œ์— ์ž‘์—…. 3๋ฐฐ ๋นจ๋ผ์š”!

Agent Teams + Worktree ์ž‘๋™ ์›๋ฆฌ

1
๋ฉ”์ธ ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…์„ ๋ถ„๋ฐฐ

"ํŽ˜์ด์ง€ 3๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ค˜"๋ผ๊ณ  ์ง€์‹œํ•˜๋ฉด, ๋ฉ”์ธ ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…์„ ๋‚˜๋ˆ ์š”

2
ํŒ€์›๋งˆ๋‹ค ์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ

๊ฐ ํŒ€์› ์—์ด์ „ํŠธ์—๊ฒŒ ๋…๋ฆฝ๋œ ์›ŒํฌํŠธ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์š”

3
๋™์‹œ์— ๋…๋ฆฝ ์ž‘์—…

๊ฐ์ž ์ž๊ธฐ ์›ŒํฌํŠธ๋ฆฌ์—์„œ ์ž‘์—…ํ•ด์š”. ์„œ๋กœ ์ถฉ๋Œํ•  ๊ฑฑ์ •์ด ์—†์–ด์š”

4
๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์น˜๊ธฐ(merge)

๋ชจ๋“  ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฉ”์ธ ์—์ด์ „ํŠธ๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์š”

Agent Teams์—์„œ ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์–ด์š”
์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— 3๊ฐœ ํŽ˜์ด์ง€๋ฅผ ๋™์‹œ์— ๋งŒ๋“ค์–ด์ค˜.

1. ํ™ˆํŽ˜์ด์ง€ - ํžˆ์–ด๋กœ ์„น์…˜ + ์†Œ๊ฐœ + CTA
2. ์„œ๋น„์Šค ํŽ˜์ด์ง€ - ์„œ๋น„์Šค 3๊ฐœ ์นด๋“œํ˜• ๋ ˆ์ด์•„์›ƒ
3. ํŒ€ ์†Œ๊ฐœ ํŽ˜์ด์ง€ - ํŒ€์› ํ”„๋กœํ•„ ๊ทธ๋ฆฌ๋“œ

๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์—…ํ•˜๊ณ , ์™„์„ฑ๋˜๋ฉด mergeํ•ด์ค˜.

์ด๋ ‡๊ฒŒ ์ง€์‹œํ•˜๋ฉด Claude Code๊ฐ€ ์•Œ์•„์„œ ์›ŒํฌํŠธ๋ฆฌ 3๊ฐœ๋ฅผ ๋งŒ๋“ค๊ณ , ์—์ด์ „ํŠธ 3๋ช…์ด ๋™์‹œ์— ์ž‘์—…ํ•œ ๋’ค, ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ์ค˜์š”. ์—ฌ๋Ÿฌ๋ถ„์€ ์ตœ์ข… ๊ฒฐ๊ณผ๋งŒ ํ™•์ธํ•˜๋ฉด ๋ผ์š”.

์ž‘์—… ๋ฐฉ์‹์ˆœ์ฐจ ์ž‘์—…Agent Teams + Worktree
ํŽ˜์ด์ง€ 3๊ฐœ ์ œ์ž‘์•ฝ 30๋ถ„ (10๋ถ„ x 3)์•ฝ 12๋ถ„ (๋™์‹œ ์ž‘์—…)
๋ฒ„๊ทธ ์ˆ˜์ • 5๊ฐœ์•ฝ 25๋ถ„ (5๋ถ„ x 5)์•ฝ 7๋ถ„ (๋™์‹œ ์ž‘์—…)
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์•ฝ 40๋ถ„ (์ˆœ์ฐจ)์•ฝ 15๋ถ„ (๋ณ‘๋ ฌ)

Agent Teams๋Š” Max ๊ตฌ๋… ์ „์šฉ์ด์—์š”

Agent Teams ๊ธฐ๋Šฅ์€ Claude Max ๊ตฌ๋…($100/์›”)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. Pro ๊ตฌ๋…($20/์›”)์—์„œ๋Š” 1๊ฐœ์˜ ์—์ด์ „ํŠธ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์š”. ํ•˜์ง€๋งŒ Worktree ์ž์ฒด๋Š” Pro์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์“ธ ์ˆ˜ ์žˆ์–ด์š”! ์ง์ ‘ git worktree ๋ช…๋ น์–ด๋กœ ๋งŒ๋“ค๋ฉด ๋˜๋‹ˆ๊นŒ์š”.

Worktree + Agent Teams = ๋ณ‘๋ ฌ ์ž‘์—…

๊ฐ ์—์ด์ „ํŠธ๊ฐ€ ๋…๋ฆฝ ๊ณต๊ฐ„์—์„œ ๋™์‹œ์— ์ผํ•˜๊ณ , ๊ฒฐ๊ณผ๋งŒ ํ•ฉ์น˜๋ฉด ๋

์ง์ ‘ ํ•ด๋ณด๊ธฐ

Worktree๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. git์ด ์„ค์น˜๋˜์–ด ์žˆ๊ณ , git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์‹ค์Šต 1: ์›ŒํฌํŠธ๋ฆฌ ๋งŒ๋“ค๊ณ  ์‹คํ—˜ํ•˜๊ธฐ

๊ฐ„๋‹จํ•œ ์‹คํ—˜์šฉ ์›ŒํฌํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.

1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ
# ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์‹คํ–‰
git worktree add ../my-test-experiment test/experiment

# ์ƒ์„ฑ ํ™•์ธ
git worktree list
2๋‹จ๊ณ„: ์›ŒํฌํŠธ๋ฆฌ๋กœ ์ด๋™ํ•ด์„œ ์‹คํ—˜
# ์›ŒํฌํŠธ๋ฆฌ ํด๋”๋กœ ์ด๋™
cd ../my-test-experiment

# ์•„๋ฌด ํŒŒ์ผ์ด๋‚˜ ์ˆ˜์ •ํ•ด๋ณด๊ธฐ
echo "์‹คํ—˜ ์ค‘์ž…๋‹ˆ๋‹ค!" > test-file.txt

# ์ปค๋ฐ‹
git add .
git commit -m "์›ŒํฌํŠธ๋ฆฌ ์‹คํ—˜"
3๋‹จ๊ณ„: ์›๋ณธ ํด๋” ํ™•์ธ
# ์›๋ณธ ํด๋”๋กœ ๋Œ์•„๊ฐ€์„œ ํ™•์ธ
cd ../my-project

# test-file.txt๊ฐ€ ์—†์–ด์š”! ์›๋ณธ์€ ์•ˆ์ „ํ•ด์š”.
ls test-file.txt
# ํŒŒ์ผ ์—†์Œ!

์‹ค์Šต 2: Claude Code๋กœ ์›ŒํฌํŠธ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

Claude Code์—์„œ ํ›จ์”ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

Claude Code์—์„œ ์ž…๋ ฅ
# ๋ฐฉ๋ฒ• 1: ์Šฌ๋ž˜์‹œ ๋ช…๋ น์–ด
/worktree

# ๋ฐฉ๋ฒ• 2: ํ•œ๊ตญ์–ด๋กœ ์ง€์‹œ
์›ŒํฌํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ƒˆ ๊ธฐ๋Šฅ์„ ์‹คํ—˜ํ•ด์ค˜.
ํ™ˆํŽ˜์ด์ง€ ๋””์ž์ธ์„ ํŒŒ๋ž€์ƒ‰ ํ…Œ๋งˆ๋กœ ๋ฐ”๊ฟ”๋ณด๊ณ  ์‹ถ์–ด.
๋งˆ์Œ์— ์•ˆ ๋“ค๋ฉด ์‚ญ์ œํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ๊ณผ๊ฐํ•˜๊ฒŒ ํ•ด์ค˜.

์‹ค์Šต 3: ์‹คํ—˜ ๊ฒฐ๊ณผ ํ•ฉ์น˜๊ธฐ

์‹คํ—˜์ด ๋งˆ์Œ์— ๋“ค๋ฉด ํ•ฉ์น˜๋Š” ๊ฒƒ๋„ Claude Code์—๊ฒŒ ์‹œํ‚ค๋ฉด ๋ผ์š”.

Claude Code์—์„œ ์ž…๋ ฅ
๋ฐฉ๊ธˆ ์›ŒํฌํŠธ๋ฆฌ์—์„œ ๋งŒ๋“  ํŒŒ๋ž€์ƒ‰ ํ…Œ๋งˆ๊ฐ€ ๋งˆ์Œ์— ๋“ค์–ด.
์›๋ณธ ํ”„๋กœ์ ํŠธ์— mergeํ•ด์ค˜.
๊ทธ๋ฆฌ๊ณ  ์›ŒํฌํŠธ๋ฆฌ๋Š” ์ •๋ฆฌํ•ด์ค˜.

ํ™•์ธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

์‹ค์Šต์ด ์•ˆ ๋˜๋ฉด git ์ €์žฅ์†Œ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ผ๋ฐ˜ ํด๋”์—์„œ๋Š” git worktree๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•„์š”. git init์œผ๋กœ git ์ €์žฅ์†Œ๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ฑฐ๋‚˜, ์ด๋ฏธ git์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๋ณด์„ธ์š”.

ํ™œ์šฉ ํŒ + ์ฃผ์˜์‚ฌํ•ญ

Worktree๋ฅผ ์‹ค์ „์—์„œ ์“ธ ๋•Œ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ํŒ๊ณผ ์ฃผ์˜์‚ฌํ•ญ๋“ค์ด์—์š”.

1. git ์ €์žฅ์†Œ์—์„œ๋งŒ ๋™์ž‘ํ•ด์š”

Worktree๋Š” git ์ €์žฅ์†Œ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. git์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜ ํด๋”์—์„œ๋Š” ์“ธ ์ˆ˜ ์—†์–ด์š”. ์•„์ง git์„ ์•ˆ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด, git init์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ Claude Code์—๊ฒŒ โ€œ์ด ํ”„๋กœ์ ํŠธ๋ฅผ git์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค˜โ€๋ผ๊ณ  ๋งํ•˜์„ธ์š”.

2. ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”

์›ŒํฌํŠธ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฑฐ๋ผ์„œ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ด์š”. ๋‹ค๋งŒ git์ด ๋˜‘๋˜‘ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์„œ, ์ „์ฒด ๋ณต์‚ฌ๋ณด๋‹ค๋Š” ํ›จ์”ฌ ์ ์€ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉํ•ด์š”. ๊ทธ๋ž˜๋„ 10๊ฐœ์”ฉ ๋งŒ๋“ค์–ด๋†“์œผ๋ฉด ์šฉ๋Ÿ‰์ด ์Œ“์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๋‹ค ์“ด ์›ŒํฌํŠธ๋ฆฌ๋Š” ๋ฐ”๋กœ ์‚ญ์ œํ•˜์„ธ์š”.

3. ์ด๋ฆ„ ๊ทœ์น™์„ ์ •ํ•ด๋‘๋ฉด ํŽธํ•ด์š”

์›ŒํฌํŠธ๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์Œ“์ด๋ฉด ๋ญ๊ฐ€ ๋ญ”์ง€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์–ด์š”. ํด๋” ์ด๋ฆ„์— ๋ชฉ์ ์„ ๋„ฃ์–ด๋‘๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์š”.

์ด๋ฆ„ ๊ทœ์น™ ์˜ˆ์‹œ
# ์ข‹์€ ์ด๋ฆ„ (๋ชฉ์ ์ด ๋ช…ํ™•)
git worktree add ../mk-login-page feat/login
git worktree add ../mk-bug-fix-123 fix/issue-123
git worktree add ../mk-redesign feat/redesign

# ๋‚˜์œ ์ด๋ฆ„ (๋ญ”์ง€ ๋ชจ๋ฆ„)
git worktree add ../test1 branch1
git worktree add ../temp branch2

4. npm ํ”„๋กœ์ ํŠธ๋Š” install์„ ์žŠ์ง€ ๋งˆ์„ธ์š”

Node.js ํ”„๋กœ์ ํŠธ์˜ ์›ŒํฌํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ฉด, node_modules ํด๋”๊ฐ€ ์—†์–ด์š”. ์›ŒํฌํŠธ๋ฆฌ ํด๋”์—์„œ npm install์„ ๋จผ์ € ์‹คํ–‰ํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ด์š”.

npm ํ”„๋กœ์ ํŠธ ์›ŒํฌํŠธ๋ฆฌ ์‹œ์ž‘
git worktree add ../my-experiment feat/experiment
cd ../my-experiment
npm install   # ์ด๊ฑธ ๋จผ์ €!
npm run dev

5. PR(Pull Request)๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

Worktree์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ GitHub PR๋กœ ์˜ฌ๋ฆฌ๋ฉด ํŒ€์›์˜ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์€ ํ›„์— ํ•ฉ์น  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฒŒ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ํŒจํ„ด์ด์—์š”.

Claude Code์— ์ด๋ ‡๊ฒŒ ๋งํ•˜์„ธ์š”
์›ŒํฌํŠธ๋ฆฌ์—์„œ ๋งŒ๋“  ๊ธฐ๋Šฅ์„ PR๋กœ ์˜ฌ๋ ค์ค˜.
๋ฆฌ๋ทฐ ๋ฐ›๊ณ  mergeํ•˜๊ณ  ์‹ถ์–ด.

6. ๊ฐ™์€ ๋ธŒ๋žœ์น˜๋Š” 2๊ณณ์—์„œ ์—ด ์ˆ˜ ์—†์–ด์š”

ํ•˜๋‚˜์˜ ๋ธŒ๋žœ์น˜๋Š” ๋™์‹œ์— ํ•˜๋‚˜์˜ ์›ŒํฌํŠธ๋ฆฌ์—์„œ๋งŒ ์—ด ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฏธ main์„ ๋ฉ”์ธ ํด๋”์—์„œ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด, ์›ŒํฌํŠธ๋ฆฌ์—์„œ๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”. ์ด๊ฑด git์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋‹ˆ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”.

์ƒํ™ฉํ•ด๊ฒฐ๋ฒ•
์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ ์‹œ ์—๋Ÿฌgit worktree prune ์‹คํ–‰ ํ›„ ์žฌ์‹œ๋„
node_modules๊ฐ€ ์—†์–ด์š”์›ŒํฌํŠธ๋ฆฌ ํด๋”์—์„œ npm install ์‹คํ–‰
merge ์‹œ ์ถฉ๋Œ ๋ฐœ์ƒClaude Code์—๊ฒŒ "์ถฉ๋Œ ํ•ด๊ฒฐํ•ด์ค˜" ์ง€์‹œ
์›ŒํฌํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์š”git worktree list๋กœ ํ™•์ธ ํ›„ ์•ˆ ์“ฐ๋Š” ๊ฒƒ ์‚ญ์ œ
git ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์—๋Ÿฌgit init์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•„์š”

Worktree = ์‹คํŒจํ•ด๋„ ๊ดœ์ฐฎ์€ ์‹คํ—˜ ๊ณต๊ฐ„

์›๋ณธ์€ ํ•ญ์ƒ ์•ˆ์ „ํ•˜๋‹ˆ๊นŒ โ€œ์ผ๋‹จ ํ•ด๋ณด์žโ€๊ฐ€ ๊ฐ€๋Šฅํ•ด์ ธ์š”. ์‹คํ—˜์ด ์ผ์ƒ์ด ๋˜๋ฉด ์„ฑ์žฅ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ ธ์š”.

์‹คํ—˜์„ ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์„ธ์š”

์ฝ”๋”ฉ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด โ€œ์ผ๋‹จ ํ•ด๋ณด๋Š” ๊ฒƒโ€์ด์—์š”. Worktree๊ฐ€ ์žˆ์œผ๋ฉด ์›๋ณธ์ด ๋ง๊ฐ€์งˆ ๊ฑฑ์ •์ด ์—†์œผ๋‹ˆ๊นŒ, ๋” ๊ณผ๊ฐํ•˜๊ฒŒ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์–ด์š”. Claude Code์—๊ฒŒ โ€œ์›ŒํฌํŠธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ์‹คํ—˜ํ•ด์ค˜โ€๋ผ๊ณ  ํ•œ๋งˆ๋””๋งŒ ํ•˜๋ฉด ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”!

์ฐธ๊ณ  ์ž๋ฃŒ