[๐Ÿค–] Git ๋ธŒ๋žœ์น˜ ์ „๋žต: Git Flow vs GitHub Flow, ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ์„ ํƒํ•˜๊ณ  ์šด์˜ํ• ๊นŒ์š”?

๊ฐœ๋ฐœํŒ€์˜ ํšจ์œจ์ ์ธ ํ˜‘์—…์„ ์œ„ํ•œ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ๊ณ ๋ฏผํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”? Git Flow์™€ GitHub Flow์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์žฅ๋‹จ์ , ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ํŒ€์— ๋งž๋Š” ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ์‹ค์งˆ์ ์ธ ํŒ๊นŒ์ง€ '๋ธ”๋ฃจ'๊ฐ€ ์•Œ๋ ค๋“œ๋ ค์š”.

18๋ถ„
๋‹จ์–ด: 1,480๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.
๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

Git Flow์™€ GitHub Flow, ๋‘ ๊ฐ€์ง€ ๋Œ€ํ‘œ์ ์ธ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์˜ ํ•ต์‹ฌ์„ ํŒŒ์•…ํ•˜๊ณ , ์šฐ๋ฆฌ ํŒ€์˜ ๊ฐœ๋ฐœ ๋ฌธํ™”์™€ ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋งž๋Š” ์ตœ์ ์˜ ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด ๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, 10๋…„ ์ด์ƒ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ๊ฐœ๋ฐœ ํ˜„์žฅ์„ ๋ˆ„๋ฒผ์˜จ ์‹œ๋‹ˆ์–ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€, ๋ธ”๋ฃจ์˜ˆ์š”. ์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์‹ค์งˆ์ ์ธ ์„ฑ์žฅ์— ๋„์›€์ด ๋˜๋Š” ๊นŠ์ด ์žˆ๋Š” ๊ธฐ์ˆ  ์ด์•ผ๊ธฐ๋“ค์„ ๊ณต์œ ํ•ด ๋“œ๋ฆฌ๊ณ  ์‹ถ์–ด์š”.

์˜ค๋Š˜์€ ๊ฐœ๋ฐœํŒ€์˜ ํ˜‘์—… ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ 'Git ๋ธŒ๋žœ์น˜ ์ „๋žต'์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”. ํŠนํžˆ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์ „๋žต, Git Flow์™€ GitHub Flow๋ฅผ ๋น„๊ต ๋ถ„์„ํ•˜๊ณ , ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์–ด๋–ค ์ „๋žต์ด ๋” ํšจ๊ณผ์ ์ธ์ง€ ์‹ฌ๋„ ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”.

๐Ÿค” ์™œ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์ค‘์š”ํ• ๊นŒ์š”?

0๏ธโƒฃ ๋ฌด์งˆ์„œํ•œ ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ์˜ ๋ฌธ์ œ์ 

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

  • ์žฆ์€ ์ถฉ๋Œ (Merge Conflicts): ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•  ๋•Œ ์ถฉ๋Œ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•ด์„œ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ €ํ•˜๋ผ์š”.
  • ์ฝ”๋“œ ํ’ˆ์งˆ ์ €ํ•˜: ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์–ด๋А ๋ธŒ๋žœ์น˜์— ์žˆ๊ณ , ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ์˜ˆ์ •์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ์„œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ํ…Œ์ŠคํŠธ ๊ณผ์ •์ด ๋ณต์žกํ•ด์ง€๊ณ , ๊ฒฐ๊ตญ ์ฝ”๋“œ ํ’ˆ์งˆ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.
  • ๋ฐฐํฌ์˜ ์–ด๋ ค์›€: ์•ˆ์ •์ ์ธ ๋ฒ„์ „์„ ์‹๋ณ„ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์ด ๋ณต์žกํ•ด์ง€๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋  ์œ„ํ—˜์ด ์ปค์ ธ์š”.
  • ๋ถˆ๋ถ„๋ช…ํ•œ ํžˆ์Šคํ† ๋ฆฌ: Git ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ ธ์„œ ํŠน์ • ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ์ด๋‚˜ ๋ฒ„๊ทธ์˜ ์›์ธ์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ ธ์š”.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ณ , ํŒ€์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ช…ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์ด ํ•„์š”ํ•œ ๊ฑฐ์˜ˆ์š”.

โš™๏ธ ๋‘ ๊ฐ€์ง€ ๋Œ€ํ‘œ ์ „๋žต: Git Flow vs GitHub Flow

์ด์ œ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ธŒ๋žœ์น˜ ์ „๋žต, Git Flow์™€ GitHub Flow์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊ฒŒ์š”. ๊ฐ ์ „๋žต์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ํŠน์ง•, ๊ทธ๋ฆฌ๊ณ  ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•ด ๋ณด๋ฉด์„œ ์šฐ๋ฆฌ ํŒ€์— ์–ด๋–ค ์ „๋žต์ด ๋” ์ ํ•ฉํ• ์ง€ ๊ณ ๋ฏผํ•ด ๋ด์š”.

1๏ธโƒฃ Git Flow: ์ฒด๊ณ„์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ „๋žต

Git Flow๋Š” 2010๋…„ Vincent Driessen์ด ์ œ์•ˆํ•œ ๋ธŒ๋žœ์น˜ ๋ชจ๋ธ๋กœ, ๋ณต์žกํ•˜์ง€๋งŒ ๋งค์šฐ ์ฒด๊ณ„์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”. ์ฃผ๋กœ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์ œํ’ˆ์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ์ฃผ๊ธฐ๊ฐ€ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ด์š”.

๐Ÿ“Œ ํ•ต์‹ฌ ๋ธŒ๋žœ์น˜

Git Flow๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ '๋ฉ”์ธ ๋ธŒ๋žœ์น˜'์™€ ์„ธ ๊ฐ€์ง€ '๋ณด์กฐ ๋ธŒ๋žœ์น˜'๋ฅผ ์‚ฌ์šฉํ•ด์š”.

  • ๋ฉ”์ธ ๋ธŒ๋žœ์น˜
    • main (๋˜๋Š” master): ์ œํ’ˆ์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ˆ์š”. ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ด์š”.
    • develop: ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ˆ์š”. ๋ชจ๋“  ๊ฐœ๋ฐœ ์ž‘์—…์€ ์ด ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘๋ผ์š”.
  • ๋ณด์กฐ ๋ธŒ๋žœ์น˜
    • feature/: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ develop ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ˆ์š”. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ develop์œผ๋กœ ๋ณ‘ํ•ฉ๋ผ์š”.
    • release/: ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ˆ์š”. ๋ฒ„๊ทธ ์ˆ˜์ •, ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ๋“ฑ ๋ฆด๋ฆฌ์ฆˆ ์ง์ „์˜ ์ž‘์—…๋“ค์„ ์—ฌ๊ธฐ์„œ ์ง„ํ–‰ํ•˜๊ณ , main๊ณผ develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋ผ์š”.
    • hotfix/: main ๋ธŒ๋žœ์น˜์— ๋ฐœ์ƒํ•œ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ๋•Œ main ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๊ธฐํ•˜๋Š” ๋ธŒ๋žœ์น˜์˜ˆ์š”. ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜๋ฉด main๊ณผ develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ๋ผ์š”.

๐Ÿš€ Git Flow ์›Œํฌํ”Œ๋กœ์šฐ ์˜ˆ์‹œ

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์„ Git ๋ช…๋ น์–ด๋กœ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

์œ ์šฉํ•œ ํŒ

Git Flow๋Š” ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— CLI ๋„๊ตฌ(git-flow-avh ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

# 0. develop ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” (์ตœ์ดˆ 1ํšŒ) git branch develop git push -u origin develop # 1. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์‹œ์ž‘ git checkout develop git pull origin develop # ์ตœ์‹  develop ๋ธŒ๋žœ์น˜๋กœ ์—…๋ฐ์ดํŠธ git checkout -b feature/my-awesome-feature # 2. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ์ปค๋ฐ‹ # ... ์ฝ”๋“œ ์ž‘์„ฑ ... git add . git commit -m "feat: Add my awesome feature" # 3. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ (Pull Request๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ) git checkout develop git pull origin develop # ๋ณ‘ํ•ฉ ์ „ develop ์ตœ์‹ ํ™” git merge --no-ff feature/my-awesome-feature # --no-ff (no fast-forward)๋กœ ๋ณ‘ํ•ฉ ์ปค๋ฐ‹ ๋‚จ๊ธฐ๊ธฐ git push origin develop # 4. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ git branch -d feature/my-awesome-feature git push origin --delete feature/my-awesome-feature

๐Ÿ‘ Git Flow์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋‹ด: ๊ฐ ๋ธŒ๋žœ์น˜์˜ ์—ญํ• ์ด ๋ช…ํ™•ํ•ด์„œ ๊ฐœ๋ฐœ, ๋ฆด๋ฆฌ์ฆˆ, ๊ธด๊ธ‰ ์ˆ˜์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฒด๊ณ„์ ์ด์—์š”.
    • ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์ฆˆ: main ๋ธŒ๋žœ์น˜๊ฐ€ ํ•ญ์ƒ ์•ˆ์ •์ ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ๋ฐฐํฌ์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์š”.
    • ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ์šฉ์ด: ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด feature ๋ธŒ๋žœ์น˜์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ์–ด์„œ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ์— ์œ ๋ฆฌํ•ด์š”.
  • ๋‹จ์ 
    • ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ: ๋ธŒ๋žœ์น˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ๊ณ  ์ „ํ™˜์ด ์žฆ์•„์„œ ํ•™์Šต ๊ณก์„ ์ด ๋†’๊ณ , ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • ์ง€์†์ ์ธ ๋ฐฐํฌ์— ๋ถ€์ ํ•ฉ: ๋ฆด๋ฆฌ์ฆˆ ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์€ ๋‹จ๊ณ„๊ฐ€ ์žˆ์–ด์„œ ์ง€์†์ ์ธ ํ†ตํ•ฉ/๋ฐฐํฌ(CI/CD) ํ™˜๊ฒฝ์—๋Š” ๋‹ค์†Œ ๋ฌด๊ฑฐ์šธ ์ˆ˜ ์žˆ์–ด์š”.

2๏ธโƒฃ GitHub Flow: ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅธ ์ง€์†์  ๋ฐฐํฌ ์ „๋žต

GitHub Flow๋Š” GitHub์—์„œ ์ œ์•ˆํ•˜๊ณ  ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜ ๋ชจ๋ธ๋กœ, Git Flow๋ณด๋‹ค ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๊ณ  ์œ ์—ฐํ•ด์š”. ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI)๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ(CD)๋ฅผ ์ง€ํ–ฅํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋งค์šฐ ์ ํ•ฉํ•ด์š”.

๐Ÿ“Œ ํ•ต์‹ฌ ๋ธŒ๋žœ์น˜

GitHub Flow๋Š” ๋‹จ ํ•˜๋‚˜์˜ '๋ฉ”์ธ ๋ธŒ๋žœ์น˜'๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์šด์˜๋ผ์š”.

  • main (๋˜๋Š” master): ์ œํ’ˆ์˜ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์œ ์ผํ•œ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์˜ˆ์š”. ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ์ด๋ฉฐ, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ด์š”.

๐Ÿš€ GitHub Flow ์›Œํฌํ”Œ๋กœ์šฐ ์˜ˆ์‹œ

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ GitHub Flow ๋ฐฉ์‹์œผ๋กœ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

# 1. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์‹œ์ž‘ git checkout main git pull origin main # ์ตœ์‹  main ๋ธŒ๋žœ์น˜๋กœ ์—…๋ฐ์ดํŠธ git checkout -b feature/my-new-feature # 2. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ์ปค๋ฐ‹ (์ž‘๊ณ  ์ž์ฃผ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”) # ... ์ฝ”๋“œ ์ž‘์„ฑ ... git add . git commit -m "feat: Implement my new feature part 1" # ... ์ถ”๊ฐ€ ์ฝ”๋“œ ์ž‘์„ฑ ... git commit -m "feat: Implement my new feature part 2" # 3. Pull Request ์ƒ์„ฑ ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ # (์›๊ฒฉ ์ €์žฅ์†Œ์— push ํ›„ Pull Request ์ƒ์„ฑ) git push origin feature/my-new-feature # Pull Request๊ฐ€ ์Šน์ธ๋˜๋ฉด main ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ # 4. main ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ ํ›„ ๋ฐฐํฌ (์ž๋™ํ™”๋œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ) # (Pull Request ๋ณ‘ํ•ฉ ์‹œ feature ๋ธŒ๋žœ์น˜ ์ž๋™ ์‚ญ์ œ ์˜ต์…˜ ์‚ฌ์šฉ ๊ถŒ์žฅ)
์œ ์šฉํ•œ ํŒ

GitHub Flow์—์„œ๋Š” Pull Request(PR)๊ฐ€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ๋ฐฐํฌ ํŠธ๋ฆฌ๊ฑฐ์˜ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ด์š”. PR์ด ์Šน์ธ๋˜์–ด main ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ๋˜๋ฉด ๋ฐ”๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋„๋ก CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์—์š”.

๐Ÿ‘ GitHub Flow์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ : ๋ธŒ๋žœ์น˜ ๊ทœ์น™์ด ๋งค์šฐ ๋‹จ์ˆœํ•ด์„œ ํ•™์Šต์ด ์‰ฝ๊ณ , ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์–ด์š”.
    • ๋น ๋ฅธ ๋ฐฐํฌ: main ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ๋˜๋ฉด ๋ฐ”๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด ์ง€์†์ ์ธ ํ†ตํ•ฉ/๋ฐฐํฌ(CI/CD)์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด์š”.
    • ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ: ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ์• ์ž์ผ(Agile) ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ์ž˜ ๋งž์•„์š”.
  • ๋‹จ์ 
    • ๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€: ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์ œํ’ˆ์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, main ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜๋กœ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์–ด์š”.
    • ์•ˆ์ •์„ฑ ๋ฌธ์ œ: main ๋ธŒ๋žœ์น˜๊ฐ€ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—ฌ์•ผ ํ•˜๋ฏ€๋กœ, ์—„๊ฒฉํ•œ ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋’ท๋ฐ›์นจ๋˜์ง€ ์•Š์œผ๋ฉด ์•ˆ์ •์„ฑ์ด ์ €ํ•˜๋  ์œ„ํ—˜์ด ์žˆ์–ด์š”.
    • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ฅธ ํ•œ๊ณ„: ๋งค์šฐ ํฌ๊ณ  ๋ณต์žกํ•˜๋ฉฐ ์—„๊ฒฉํ•œ ๋ฆด๋ฆฌ์ฆˆ ์ •์ฑ…์„ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ์—๋Š” Git Flow๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

3๏ธโƒฃ GitLab Flow (๊ฐ„๋žต ์†Œ๊ฐœ)

GitLab Flow๋Š” Git Flow์™€ GitHub Flow์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ ํ˜•ํƒœ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. main ๋ธŒ๋žœ์น˜ ์™ธ์— production, pre-production ๋“ฑ ํ™˜๊ฒฝ๋ณ„ ๋ธŒ๋žœ์น˜๋ฅผ ๋‘์–ด ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋ฉด์„œ๋„, GitHub Flow์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ์‹œ์ž‘ํ•˜์—ฌ Pull Request(Merge Request)๋ฅผ ํ†ตํ•ด main์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์š”. ๋ณต์žกํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ๋ฅผ ๋™์‹œ์— ๊ณ ๋ คํ•  ๋•Œ ์ข‹์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿค ์šฐ๋ฆฌ ํŒ€์— ๋งž๋Š” Git ๋ธŒ๋žœ์น˜ ์ „๋žต ์„ ํƒํ•˜๊ธฐ

์–ด๋–ค ์ „๋žต์ด "์ตœ๊ณ "๋ผ๊ณ  ๋‹จ์ •ํ•˜๊ธฐ๋Š” ์–ด๋ ค์›Œ์š”. ํŒ€์˜ ํŠน์„ฑ๊ณผ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ „๋žต์„ ์„ ํƒํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ๋ณ€ํ˜•ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”.

0๏ธโƒฃ ๊ณ ๋ คํ•ด์•ผ ํ•  ์š”์†Œ๋“ค

  • ํ”„๋กœ์ ํŠธ ์œ ํ˜• ๋ฐ ๊ทœ๋ชจ: ์›น ์„œ๋น„์Šค, ๋ชจ๋ฐ”์ผ ์•ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์˜จํ”„๋ ˆ๋ฏธ์Šค ์†”๋ฃจ์…˜ ๋“ฑ ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ฒฉ๊ณผ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ์ „๋žต์ด ๋‹ฌ๋ผ์ ธ์š”.
  • ๋ฐฐํฌ ์ฃผ๊ธฐ ๋ฐ ๋ฐฉ์‹: ๋งค์ผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐฐํฌํ•˜๋Š” ์ง€์†์  ๋ฐฐํฌ(CD) ํ™˜๊ฒฝ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๋ช‡ ์ฃผ/๋ช‡ ๋‹ฌ์— ํ•œ ๋ฒˆ ์ •๊ธฐ์ ์œผ๋กœ ๋ฐฐํฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์ค‘์š”ํ•ด์š”.
  • ํŒ€ ๊ทœ๋ชจ ๋ฐ ๊ฐœ๋ฐœ ๋ฌธํ™”: ํŒ€์›๋“ค์˜ Git ์ˆ™๋ จ๋„, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”, ์• ์ž์ผ(Agile) ๊ฐœ๋ฐœ ๋ฐฉ์‹ ์„ ํ˜ธ๋„ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ด์š”.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ: ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์ œํ’ˆ์„ ๋™์‹œ์— ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „๋งŒ ์œ ์ง€ํ•˜๋ฉด ๋˜๋Š”์ง€ ํŒ๋‹จํ•ด์•ผ ํ•ด์š”.
์ •๋ณด

์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋น„์Šค๋‚˜ SaaS์ฒ˜๋Ÿผ ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ๋Š” GitHub Flow๋‚˜ GitLab Flow๊ฐ€ ๋” ์ ํ•ฉํ•˜๊ณ , ์šด์˜์ฒด์ œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์˜จํ”„๋ ˆ๋ฏธ์Šค ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ์•ˆ์ •์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ๋Š” Git Flow๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

1๏ธโƒฃ ์ „๋žต ๋„์ž… ๋ฐ ์šด์˜ ํŒ

์–ด๋–ค ์ „๋žต์„ ์„ ํƒํ•˜๋“ , ์„ฑ๊ณต์ ์ธ ์šด์˜์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ์ด ์žˆ์–ด์š”.

  • ๋ช…ํ™•ํ•œ ๊ทœ์น™ ์ •์˜: ํŒ€ ์ „์ฒด๊ฐ€ ํ•ฉ์˜ํ•œ ๋ธŒ๋žœ์น˜ ์ „๋žต ๊ทœ์น™์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ๊ณต์œ ํ•ด์•ผ ํ•ด์š”. (์˜ˆ: ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜, Pull Request ๊ฐ€์ด๋“œ๋ผ์ธ ๋“ฑ)
  • ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ™œ์„ฑํ™”: Pull Request๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๊ณ , ๋ธŒ๋žœ์น˜ ์ „๋žต์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์˜ˆ์š”.
  • ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ: ๋ณ‘ํ•ฉ ์ „์— ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋˜๋„๋ก CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์„œ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•ด์š”.
  • ์ž‘๊ณ  ์žฆ์€ ์ปค๋ฐ‹: ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘์€ ๋‹จ์œ„๋กœ ์ž์ฃผ ์ปค๋ฐ‹ํ•˜๊ณ , ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋„ ์งง๊ฒŒ ์œ ์ง€ํ•ด์„œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์˜ ์œ„ํ—˜์„ ์ค„์ด๊ณ  ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์•ผ ํ•ด์š”.
  • ์œ ์—ฐํ•œ ์ ์šฉ: ์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ์ „๋žต์„ ๊ณ ์ง‘ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ํŒ€์˜ ์ƒํ™ฉ์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ์ „๋žต์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ฐœ์ „์‹œ์ผœ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”.

๐Ÿ“ ์ •๋ฆฌํ•˜๋ฉฐ

์˜ค๋Š˜์€ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์˜ ์ค‘์š”์„ฑ๋ถ€ํ„ฐ Git Flow์™€ GitHub Flow์˜ ํŠน์ง•, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ํŒ€์— ๋งž๋Š” ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ดค์–ด์š”.

Git ๋ธŒ๋žœ์น˜ ์ „๋žต์€ ๋‹จ์ˆœํžˆ Git ๋ช…๋ น์–ด๋ฅผ ์•„๋Š” ๊ฒƒ์„ ๋„˜์–ด, ํŒ€์˜ ํ˜‘์—… ๋ฐฉ์‹๊ณผ ๊ฐœ๋ฐœ ๋ฌธํ™”๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์˜ˆ์š”. ์ •๋‹ต์€ ์—†์ง€๋งŒ, ํŒ€์›๋“ค๊ณผ ์ถฉ๋ถ„ํžˆ ๋…ผ์˜ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ ์˜ ์ „๋žต์„ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ํŒ€์˜ ์„ฑ์žฅ์„ ์ด๋„๋Š” ๋ฐ‘๊ฑฐ๋ฆ„์ด ๋  ๊ฑฐ์˜ˆ์š”.

์ด ๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒ€์ด ๋” ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ž‘์€ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ์š”. ๋‹ค์Œ์—๋„ ์‹ค๋ฌด์— ๋„์›€์ด ๋˜๋Š” ์œ ์ตํ•œ ์ •๋ณด๋กœ ์ฐพ์•„์˜ฌ๊ฒŒ์š”!

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ