git-flow์ ์ข
๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋ถ๋ฆฌ๋๋ค.
์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๊ฐ๋จํ ์์๋ณด์
๊ฐ์ฅ ์ต์ด๋ก ์ ์๋ Workflow ๋ฐฉ์์ด๋ฉฐ, ๋๊ท๋ชจ ํ๋ก์ ํธ ๊ด๋ฆฌ์ ์ ํฉํ ๋ฐฉ์์ผ๋ก ํ๊ฐ๋ฐ๋๋ค.
๊ธฐ๋ณธ ๋ธ๋์น๋ 5๊ฐ์ง๋ค.
- feature โ develop โ release โ hotfix โ master
๋ฆด๋ฆฌ์ฆ ์ ์ฌ์ฉํ๋ ์ต์ข ๋จ๊ณ ๋ฉ์ธ ๋ธ๋์น
Tag๋ฅผ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
๋ค์ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ๊ฐ๋ฐ์ ์งํํ๋ ๋ธ๋์น
์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ด ํ์ํด์ง๋ฉด, ํด๋น ๋ธ๋์น์์ ๋ค์ ๋ธ๋์น(Feature)๋ฅผ ๋ด์ด ๊ฐ๋ฐ์ ์งํํ๊ณ , ์๋ฃ๋ ๊ธฐ๋ฅ์ ๋ค์ Develop ๋ธ๋์น๋ก Mergeํ๋ค.
Develop ๋ธ๋์น์์ ๊ธฐ๋ฅ ๊ตฌํ์ ํ ๋ ๋ง๋๋ ๋ธ๋์น
ํ ๊ธฐ๋ฅ ๋จ์๋ง๋ค Feature ๋ธ๋์น๋ฅผ ์์ฑํ๋๊ฒ ์์น์ด๋ค.
Develop์์ ํ์๋ ๋ธ๋์น
Master ๋ธ๋์น๋ก ํ์ฌ ์ฝ๋๊ฐ Merge ๋ ์ ์๋์ง ํ ์คํธํ๊ณ , ์ด ๊ณผ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๋ ๊ณต๊ฐ์ด๋ค. ํ์ธ ๊ฒฐ๊ณผ ์ด์์ด ์๋ค๋ฉด, ํด๋น ๋ธ๋์น๋ Master์ Mergeํ๋ค.
Mater๋ธ๋์น์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
๊ฒ์๋ฅผ ํด๋ ๋ฆด๋ฆฌ์ฆ๋ Master ๋ธ๋์น์์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค. ์ด๋ Hotfix ๋ธ๋์น๋ฅผ ๋ด์ด ๋ฒ๊ทธ ์์ ์ ์งํํ๋ค. ๋๋ฒ๊ทธ๊ฐ ์๋ฃ๋๋ฉด Master, Develop ๋ธ๋์น์ Mergeํด์ฃผ๊ณ ๋ธ๋์น๋ฅผ ๋ซ๋๋ค.
git-flow
์์ ๊ฐ์ฅ ์ค์ฌ์ด ๋๋ ๋ธ๋์น๋ master
์ develop
์ด๋ค. (๋ฌด์กฐ๊ฑด ํ์)
์ด๋ฆ์ ๋ณ๊ฒฝํ ์๋ ์์ง๋ง, ํต์์ ์ผ๋ก ์ฌ์ฉํ๋ ์ด๋ฆ์ด๋ฏ๋ก ๊ทธ๋๋ก ์ฌ์ฉํ๋๋ก ํ์
์งํ ๊ณผ์ ์ค์ Merge๋ feature
, release
, hotfix
๋ธ๋์น๋ ๋ซ์์ ์ญ์ ํ๋๋ก ํ๋ค.
์ด์ฒ๋ผ ๊ณํ์ ์ธ ๋ฆด๋ฆฌ์ฆ๋ฅผ ๊ฐ์ง๊ณ ์ค์ผ์ค์ด ์ง์ฌ์ง ๋๊ท๋ชจ ํ๋ก์ ํธ์๋ git-flow๊ฐ ์ ํฉํ๋ค. ํ์ง๋ง ๋๋ถ๋ถ ์ผ๋ฐ์ ์ธ ํ๋ก์ ํธ์์๋ ๋ถํ์ํ ์ ์ฐจ๋ค์ด ๋ง์ ์์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฐ๋ค๋ ์๊ฒฌ๋ ๋ง์ ๋ฐฉ์์ด๋ค.
git-flow๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋์จ ํ๋์ ๋ฐฉ์
ํ๋ฆ์ด ๋จ์ํ ๋งํผ, ์ญํ ๋ ๋จ์ํ๋ค. git flow์ hotfix
๋ feature
๋ธ๋์น๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ , pull request๋ฅผ ๊ถ์ฅํ๋ค.
Master ๋ธ๋์น๊ฐ ๋ฆด๋ฆฌ์ฆ์ ์์ด ์ ๋์ ์ญํ ์ ํ๋ค.
Master ๋ธ๋์น๋ ํญ์ ์ต์ ์ผ๋ก ์ ์งํ๋ฉฐ, Stableํ ์ํ๋ก product์ ๋ฐฐํฌ๋๋ ๋ธ๋์น๋ค.
๋ฐ๋ผ์ Merge ์ ์ ์ถฉ๋ถํ ํ ์คํธ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค. (๋ธ๋์น๋ฅผ pushํ๊ณ Jenkins๋ก ํ ์คํธ)
์๋ก์ด ๋ธ๋์น๋ ํญ์ Master
๋ธ๋์น์์ ๋ง๋ค๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ๋ ๋ฒ๊ทธ ํด๊ฒฐ์ ์ํ ๋ธ๋์น๋ ํด๋น ์ญํ ์ ๋ํ ์ด๋ฆ์ ๋ช
ํํ๊ฒ ์ง์ด์ฃผ๊ณ , ์ปค๋ฐ ๋ฉ์์ง ๋ํ ์๊ธฐ ์ฝ๋๋ก ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ Merge ์ ์๋ pull request
๋ฅผ ํตํด ๊ณต์ ํ์ฌ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ค. ์ด๋ฅผ ํตํด ํผ๋๋ฐฑ์ ๋ฐ๊ณ , Merge ์ค๋น๊ฐ ์๋ฃ๋๋ฉด Master ๋ธ๋์น๋ก ์์ฒญํ๊ฒ ๋๋ค.
์ด Merge๋ ๋ฐ๋ก product์ ๋ฐ์๋๋ฏ๋ก ์ถฉ๋ถํ ๋ ผ์๊ฐ ํ์ํ๋ฉฐ CI๋ ํ์์ ์ด๋ค.
Merge๊ฐ ์๋ฃ๋๋ฉด, push๋ฅผ ์งํํ๊ณ ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ค. (GitHub-flow์ ํต์ฌ์ ์ธ ๋ถ๋ถ)
-
ํ์๊ด๋ฆฌ ํญ๋ชฉ์ ๋ํ ์ ์ ๊ณผ ํ์๊ด๋ฆฌ ๊ตฌ์ฑ ๋ฐฉ์ ๊ฒฐ์
-
๋น๋/๋ฐฐํฌ ์๋ํ ๋ฐฉ์
-
๋จ์ํ ์คํธ/ํตํฉํ ์คํธ ๋ฐฉ์
์ด ์ธ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ ์๋ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ
github flow์ ๊ฐ๋จํ ๋ฐฐํฌ ์ด์๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๊ด๋ จ ๋ด์ฉ์ ์ถ๊ฐ๋ก ๋ง๋ถ์ธ flow ๋ฐฉ์
Production ๋ธ๋์น๊ฐ ์กด์ฌํ์ฌ ์ปค๋ฐ ๋ด์ฉ์ ์ผ๋ฐฉ์ ์ผ๋ก Deploy ํ๋ ํํ๋ฅผ ๊ฐ์ถ๊ณ ์๋ค.
Master ๋ธ๋์น์ Production ๋ธ๋์น ์ฌ์ด์ pre-production
๋ธ๋์น๋ฅผ ๋์ด ๊ฐ๋ฐ ๋ด์ฉ์ ๋ฐ๋ก ๋ฐ์ํ์ง ์๊ณ , ์๊ฐ์ ๋๊ณ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํตํ ์ด์ ์, Production ๋ธ๋์น์์ ๋ฆด๋ฆฌ์ฆ๋ ์ฝ๋๊ฐ ํญ์ ํ๋ก์ ํธ์ ์ต์ ๋ฒ์ ์ํ๋ฅผ ์ ์งํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค.
์ฆ, github-flow์ ๋จ์ ์ธ ์์ ์ฑ๊ณผ ๋ฐฐํฌ ์๊ธฐ ์กฐ์ ์ ๋ํ ๋ถ๋ถ์ production์ด๋ผ๋ ์ถ๊ฐ ๋ธ๋์น๋ฅผ ๋์ด ๋ณด๊ฐํ๋ ์ ๋ ฅ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
3๊ฐ์ง ๋ฐฉ๋ฒ ์ค ๋ฌด์์ด ๊ฐ์ฅ ๋์ ๋ฐฉ์์ด๋ผ๊ณ ์ ํํ ์ ์๋ค. ํ๋ก์ ํธ, ๊ฐ๋ฐ์, ๋ฆด๋ฆฌ์ฆ ๊ณํ ๋ฑ ์ํฉ์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ๋ฒ์ ํํด์ผ ํ๋ค.
๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ธ '์ฐ์ํ ํ์ ๋ค'์ด github-flow์์ git-flow๋ก ์ํฌํ๋ก์ฐ๋ฅผ ๋ณ๊ฒฝํ ๊ฒ ์ฒ๋ผ (ํด๋น ๊ธฐ์ฌ ๋งํฌ) ๋ธ๋์นญ๊ณผ ๋ฐฐํฌ์ ๋ํ ์ ๋ต ์ํฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๋ถ๋ถ์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ ํ์ ์ํฉ์ ๋ง๊ฒ ์ ์ ํ ์ํฌํ๋ก์ฐ๋ฅผ ์ ํํ์ฌ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํ ๊ฒ์ด๋ค.