[GIT] ๐Ÿ“‹ Git์˜ ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์ž

์ฐฝ์Šˆยท2024๋…„ 11์›” 28์ผ
1

Git

๋ชฉ๋ก ๋ณด๊ธฐ
4/6
post-thumbnail

Git ๋ธŒ๋žœ์น˜ ์ „๋žต


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

๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์—†๋‹ค๋ฉด??

  • ์–ด๋–ค ๋ธŒ๋žœ์น˜๊ฐ€ ์ตœ์‹  ๋ธŒ๋žœ์น˜์ง€?
  • ์–ด๋–ค ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ์–ด์™€์„œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜์ง€?
  • ์–ด๋””์— Push๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜์ง€?
  • ํ•ซํ”ฝ์Šค๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ• ๊นŒ?
  • ๋ฐฐํฌ ๋ฒ„์ „์€ ์–ด๋–ค ๊ฑธ ๊ณจ๋ผ์•ผํ•˜์ง€?

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ตœ์†Œํ™” ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ!!!


๐Ÿ“ Git-FLOW ์ „๋žต


feature > develop > release > hotfix > master

์™ผ์ชฝ์ผ ์ˆ˜๋ก ํ•˜์œ„ ๋‹จ๊ณ„ (ํฌ๊ด„์ ์ธ ๊ฐ€์ง€)

master ๊ฐ€์ง€๋ฅผ ๋ณ‘ํ•ฉํ•  ๊ฒฝ์šฐ ๊ทธ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€์ง€๋“ค์˜ commit๋“ค๋„ ๋ณ‘ํ•ฉ ํ•˜๋„๋ก ๊ตฌ์„ฑ ํ•ด์•ผ ํ•จ

  • ํ•ญ์ƒ ์œ ์ง€๋˜๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ master, develop

  • merge๊ฐ€ ๋˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ณด์กฐ ๋ธŒ๋žœ์น˜ feature, release, hotfix


โœ๏ธ Git-Flow ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ)

- masterย : ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ์ œํ’ˆ์œผ๋กœ **"์ถœ์‹œ"**๋˜๋Š” ๋ธŒ๋žœ์น˜ - developย : ๋‹ค์Œ ์ถœ์‹œ ๋ฒ„์ „์„ ๋Œ€๋น„ํ•˜์—ฌ **"๊ฐœ๋ฐœ"**ํ•˜๋Š” ๋ธŒ๋žœ์น˜ - featureย : **"์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ"** ๋ธŒ๋žœ์น˜ย (developย ๋ธŒ๋žœ์น˜์— ๋“ค์–ด๊ฐ„๋‹ค.) - releaseย : **"๋‹ค์Œ ๋ฒ„์ „"** ์ถœ์‹œ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ธŒ๋žœ์น˜ (developย ๋ธŒ๋žœ์น˜๋ฅผย releaseย ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ธด ํ›„ QA, ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ย masterย ๋ธŒ๋žœ์น˜๋กœ ํ•ฉ์นœ๋‹ค.) - hotfixย :ย masterย ๋ธŒ๋žœ์น˜์—์„œ ๋ฐœ์ƒํ•œ **"๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •"**ํ•˜๋Š” ๋ธŒ๋žœ์น˜

feature > develop > release > hotfix > master

๐Ÿ“Ž ๋ฉ”์ธ ๋ธŒ๋žœ์น˜

master develop

  • master ๋ธŒ๋žœ์น˜๋Š” ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋งŒ์„ ๊ด€๋ฆฌ
  • develop ๋ธŒ๋žœ์น˜๋Š” ๋‹ค์Œ์— ๋ฐฐํฌํ•  ๊ฒƒ์„ ๊ฐœ๋ฐœ

develop ๋ธŒ๋žœ์น˜๋Š” ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ, ํ‰์†Œ์— ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Ž ๋ณด์กฐ ๋ธŒ๋žœ์น˜

feature master develop

  • feature branch or topic branch
  • develop์—์„œ ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์™€ ๋‹ค์‹œ develop์œผ๋กœ ํ•ฉ์ณ์ง
  • ์ฃผ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • ์ด๋ฆ„ ์„ค์ •ย : master, develop, release-*, hotfix-*๋ฅผ ์ œ์™ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ด๋ฆ„ ์„ค์ •์ด ๊ฐ€๋Šฅ

develop์—๋Š” ๊ธฐ์กด์— ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฐœ๋ฐœ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ณ  ๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ์ƒˆ๋กœ ๋ณ€๊ฒฝ๋  ๊ฐœ๋ฐœ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ ๋ณด์กดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ค ์™„์„ฑํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€ํ•˜๊ณ , ๋‹ค ์™„์„ฑ๋˜๋ฉด develop ๋ธŒ๋žœ์น˜๋กœ mergeํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ์ข‹์ง€ ๋ชปํ•˜๋ฉด ๋ฒ„๋ฆฌ๋Š” ๋ฐฉํ–ฅ์„ ๊ฐ€์ง„๋‹ค.
์ด๋Š” ๊ฐœ๋ฐœ์ž ์ €์žฅ์†Œ์—๋งŒ ์žˆ๊ณ , origin์— pushํ•˜์ง€๋Š” ์•Š๋„๋ก ํ•œ๋‹ค.

๐Ÿ“Ž ๋ฆด๋ฆฌ์ฆˆ ๋ธŒ๋žœ์น˜

  • release branch
  • ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ตœ์ข…์ ์ธ ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ์˜ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰
  • develop์—์„œ ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์™€ ๋‹ค์‹œ develop, master์œผ๋กœ ํ•ฉ์ณ์ง
  • ์ด๋ฆ„ ์„ค์ •ย : release-*

develop ๋ธŒ๋žœ์น˜์— ๋ฒ„์ „์— ํฌํ•จ๋˜๋Š” ๊ธฐ๋Šฅ์ด merge ๋˜์—ˆ๋‹ค๋ฉด QA๋ฅผ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜์—์„œ๋ถ€ํ„ฐ release ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.ย 
๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ์‹œํ‚ค๊ณ ,ย ์ถœ์‹œ๋œ master ๋ธŒ๋žœ์น˜์— ๋ฒ„์ „ ํƒœ๊ทธ(ex, v1.0, v0.2)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
release ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ์„ ์ ๊ฒ€ํ•˜๋ฉฐ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • ์‚ฌํ•ญ์€ develop ๋ธŒ๋žœ์น˜์—๋„ ์ ์šฉํ•ด์ค˜์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ develop ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด์„œ๋„ merge ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Ž ํ•ซํ”ฝ์Šค ๋ธŒ๋žœ์น˜

  • hotfix branch
  • ๋ฐฐํฌํ•œ ๋ฒ„์ „์—์„œ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์„๋•Œ master ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • master์—์„œ ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์™€ ๋‹ค์‹œ develop, master์œผ๋กœ ํ•ฉ์ณ์ง
  • ์ด๋ฆ„ ์„ค์ •ย : hotfix-*

๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ์‚ฌ๋žŒ์ด ์ผํ•˜๋Š” ๋™์•ˆ์—๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ develop ๋ธŒ๋žœ์น˜์—์„œ ํ•˜๋˜ ์ผ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด ๋•Œ ๋งŒ๋“  hotfix ๋ธŒ๋žœ์น˜์—์„œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ develop ๋ธŒ๋žœ์น˜์—๋„ merge ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.
release ๊ฐ€์ง€๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ํ•ด๋‹น ๊ฐ€์ง€์— hotfix์ •๋ณด๋ฅผ ๋ณ‘ํ•ฉ์‹œ์ผœ ๋‹ค์Œ๋ฒˆ ๋ฐฐํฌ ์‹œ ๋ฐ˜์˜์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
Hotfix๋Š” ๋ณดํ†ต ๋‹ค๊ธ‰ํ•˜๊ฒŒ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋ณดํ†ต ์ œ๊ฑฐํ•˜๋Š” ์ผํšŒ์„ฑ ๊ฐ€์ง€์ด๋‹ค.


๐Ÿ“Œ Git-Flow ํ๋ฆ„

โ˜‘๏ธ master์™€ develop๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ ์ •์ƒ์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘˜ ๋ชจ๋‘๋ฅผ ์šด์šฉํ•ด์•ผ ํ•œ๋‹ค.

โ˜‘๏ธ ๋‚˜๋จธ์ง€ feature, release, hotfix๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ง€์šฐ๋”๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์›ํ•œ๋‹ค๋ฉด ์ง€์›Œ๋’€๋‹ค๊ฐ€ ํ•ด๋‹น ๊ฐ€์ง€๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•  ๋•Œ ๋งŒ๋“ค์–ด์ฃผ์ž.

โ˜‘๏ธ develop์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์ด ์ทจํ•ฉ๋˜๋ฉฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ •๋ง ํ™•์‹คํ•˜๊ฒŒ ๋ณ€๋™์ด ์—†๋‹ค ์‹ถ์„ ๋•Œ master๋กœ ๋ณ‘ํ•ฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

โ˜‘๏ธ ๋ชจ๋“  ๊ฐ€์ง€๋“ค์€ master์˜ ๋ณ€๋™์‚ฌํ•ญ์„ ๊พธ์ค€ํžˆ ์ฃผ์‹œํ•ด์•ผ ํ•œ๋‹ค.

1. ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

  • ๊ฐœ๋ฐœ์ž๋Š”ย developย ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ๋ณธ์ธ์ด ์‹ ๊ทœ ๊ฐœ๋ฐœํ•  ๊ธฐ๋Šฅ์„ ์œ„ํ•œ featureย ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.ย 

  • featureย ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•˜๋ฉดย developย ๋ธŒ๋žœ์น˜์— merge๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

2. ๋ผ์ด๋ธŒ ์„œ๋ฒ„๋กœ ๋ฐฐํฌ

  • feature ๋ธŒ๋žœ์น˜๋“ค์ด ๋ชจ๋‘ develop ๋ธŒ๋žœ์น˜์— merge ๋˜์—ˆ๋‹ค๋ฉด QA๋ฅผ ์œ„ํ•ดย releaseย ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.ย 
  • releaseย ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ํ™•์ธ๋œ๋‹ค๋ฉดย releaseย ๋ธŒ๋žœ์น˜ ๋‚ด์—์„œ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • QA์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด, ๋ฐฐํฌ๋ฅผ ์œ„ํ•ดย releaseย ๋ธŒ๋žœ์น˜๋ฅผย masterย ๋ธŒ๋žœ์น˜ ์ชฝ์œผ๋กœ mergeํ•˜๋ฉฐ, ๋งŒ์ผย releaseย ๋ธŒ๋žœ์น˜ ๋‚ด๋ถ€์—์„œ ์˜ค๋ฅ˜ ์ˆ˜์ •์ด ์ง„ํ–‰๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ดย developย ๋ธŒ๋žœ์น˜ ์ชฝ์—๋„ merge๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

3. ๋ฐฐํฌ ํ›„ ๊ด€๋ฆฌ

  • ๋งŒ์ผ ๋ฐฐํฌ๋œ ๋ผ์ด๋ธŒ ์„œ๋ฒ„(master)์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค๋ฉด,ย hotfixย ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฒ„๊ทธ ํ”ฝ์Šค๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  • ์ข…๋ฃŒ๋œ ๋ฒ„๊ทธ ํ”ฝ์Šค๋ฅผ master์™€ย developย ์–‘ ์ชฝ์— mergeํ•˜์—ฌ ๋™๊ธฐํ™” ์‹œํ‚จ๋‹ค.

๐Ÿ“ GitHub-FLOW ์ „๋žต


GitHub์— ์ ์šฉํ•˜๊ธฐ๋Š” Git-Flow๊ฐ€ ๋ณต์žกํ•˜๋‹ค๋Š” scott Chacon์˜ ํŒ๋‹จ์— ๋”ฐ๋ผ ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด Git ๊ด€๋ฆฌ ๋ฐฉ์‹์ด๋‹ค.

์ž๋™ํ™” ๊ฐœ๋…์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์กด์žฌํ•˜๋ฉฐ ์ž๋™ํ™”๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ณณ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

Git-Flow ๋ฐฉ์‹์— ๋น„ํ•ด ํ๋ฆ„์ด ๋‹จ์ˆœํ•ด์ง€๋ฉฐ ๊ทธ ๊ทœ์น™๋„ ๋‹จ์ˆœํ•ด์กŒ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ master branch์— ๋Œ€ํ•œ ๊ทœ์น™๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ์ •๋ฆฝ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๊ฐ€์ง€๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ํŠน๋ณ„ํ•œ ๊ด€์—ฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉฐ pull / request๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•œ๋‹ค.


โœ๏ธ GitHub-Flow ํŠน์ง•

release branch๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ์—์„œ์˜ ์‚ฌ์šฉ์ด ์œ ์šฉํ•˜๋‹ค.

GitHub ์ž์ฒด์˜ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ๋ฐฐํฌ์˜ ๊ฐœ๋…์ด ์—†๋Š” ์‹œ์Šคํ…œ์œผ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด flow๊ฐ€ ์œ ์šฉํ•˜๋‹ค.

์›น ์„œ๋น„์Šค๋“ค์— ๋ฐฐํฌ์˜ ๊ฐœ๋…์ด ์—†์–ด์ง€๊ณ  ์žˆ๋Š” ์ถ”์„ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ๋„ Git flow์— ๋น„ํ•ด ์‚ฌ์šฉ์ด ์ˆ˜์›”ํ•  ๊ฒƒ์ด๋‹ค.

hotfix์™€ ๊ฐ€์žฅ ์ž‘์€ ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ๊ตฌ๋ถ„์‚ฌํ•ญ๋“ค๋„ ๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „๋ถ€ ์ˆ˜์ •ํ•˜๋Š” ์ผ๋“ค ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ, ์ด ๋Œ€์‹  ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์–ด๋–ค ๊ฒƒ์ด ๋” ๋†’์€์ง€์— ๋Œ€ํ•ด์„œ ๊ตฌ๋ถ„ํ•œ๋‹ค.


๐Ÿ“Œ Github-Flow ํ๋ฆ„

1. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

Github-flow ์ „๋žต์€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฒ„๊ทธ ํ”ฝ์Šค ๋“ฑ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค.

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

  • master ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฉฐ, stable ์ƒํƒœ๋กœ product์— ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜๋‹ค. ์—„๊ฒฉํ•œ role๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ master ๋ธŒ๋žœ์น˜์—์„œ ๋งŒ๋“ ๋‹ค.
  • Git-flow์™€๋Š” ๋‹ค๋ฅด๊ฒŒ feature ๋ธŒ๋žœ์น˜๋‚˜ develop ๋ธŒ๋žœ์น˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ž์„ธํ•˜๊ฒŒ ์–ด๋–ค ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

2. ๊ฐœ๋ฐœ & ์ปค๋ฐ‹ & ํ‘ธ์‰ฌ

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ปค๋ฐ‹์„ ๋‚จ๊ธด๋‹ค.

๋ธŒ๋žœ์น˜์™€ ๊ฐ™์ด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ์˜์กดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ตœ๋Œ€ํ•œ ์ƒ์„ธํ•˜๊ฒŒ ์ ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.
  • ์›๊ฒฉ์ง€ ๋ธŒ๋žœ์น˜๋กœ ์ˆ˜์‹œ๋กœ push ํ•œ๋‹ค.
  • Git-Flow์™€ ์ƒ๋ฐ˜๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ํ•ญ์ƒ ์›๊ฒฉ์ง€์— ์ž์‹ ์ด ํ•˜๊ณ  ์žˆ๋Š” ์ผ๋“ค์„ ์˜ฌ๋ ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
  • ์ด๋Š” ํ•˜๋“œ์›จ์–ด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ์ž‘์—…ํ•˜๋˜ ๋ถ€๋ถ„์ด ์—†์–ด์ง€๋”๋ผ๋„, ์›๊ฒฉ์ง€์— ์žˆ๋Š” ์†Œ์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

3. PR(Pull Request) ์ƒ์„ฑ

ํ”ผ๋“œ๋ฐฑ์ด๋‚˜ ๋„์›€์ด ํ•„์š”ํ•  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ์—๋Š” pull request๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

  • pull request๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋„์™€์ฃผ๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.
  • ์ด๊ฒƒ์„ ์ด์šฉํ•ด ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ๋ฆฌ๋ทฐ๋ฐ›๋Š”๋‹ค.
  • merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ฐ˜์˜์„ ์š”๊ตฌํ•œ๋‹ค.

4. ๋ฆฌ๋ทฐ & ํ† ์˜

Pull-Request๊ฐ€ย masterย ๋ธŒ๋žœ์น˜ ์ชฝ์— ํ•ฉ์ณ์ง„๋‹ค๋ฉด ๊ณง์žฅ ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ„ ์—†์œผ๋ฏ€๋กœ, ์ƒ์„ธํ•œ ๋ฆฌ๋ทฐ์™€ ํ† ์˜๊ฐ€ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

5. ํ…Œ์ŠคํŠธ

๋ฆฌ๋ทฐ์™€ ํ† ์˜๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์„ ๋ผ์ด๋ธŒ ์„œ๋ฒ„(ํ˜น์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ)์— ๋ฐฐํฌํ•ด๋ณธ๋‹ค.

๋ฐฐํฌ์‹œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ณง์žฅ master ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ฐฐํฌํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

6. ์ตœ์ข… Merge

๋ผ์ด๋ธŒ ์„œ๋ฒ„(ํ˜น์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ)์— ๋ฐฐํฌํ–ˆ์Œ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ทธ๋Œ€๋กœย master ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋ฅผ ํ•˜๊ณ , ์ฆ‰์‹œ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ Github-flow ์—์„ ย masterย ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ์‹  ๋ธŒ๋žœ์น˜๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ Merge ์ฆ‰์‹œ ๋ฐฐํฌ๋ฅผ ์‹œํ‚จ๋‹ค.

master๋กœ merge๋˜๊ณ  push ๋˜์—ˆ์„ ๋•Œ๋Š”, ์ฆ‰์‹œ ๋ฐฐํฌ๋˜์–ด์•ผํ•œ๋‹ค.

  • GitHub-flow์˜ ํ•ต์‹ฌ
  • master๋กœ merge๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๋„๋ก ์„ค์ •ํ•ด๋†“๋Š”๋‹ค. (CI / CD)

๐Ÿ“ Git-FLOW vs. GitHub-FLOW

1๊ฐœ์›” ์ด์ƒ์˜ ๊ธด ํ˜ธํก์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐฐํฌ, QA ๋ฐ ํ…Œ์ŠคํŠธ, hotfix ๋“ฑ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋ ฅ์ด ์žˆ๋Š” ํŒ€์ด๋ผ๋ฉด git-flow๊ฐ€ ์ ํ•ฉํ•˜๋‹ค. ์ˆ˜์‹œ๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋˜์–ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด github-flow ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ work-flow๊ฐ€ ์ ํ•ฉํ•˜๋‹ค.

๐Ÿ”Ž ๋ณธ ํฌ์ŠคํŒ…์€ 'Inpa Dev ๐Ÿ‘จโ€๐Ÿ’ป'๋‹˜์˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€