# Git vs GitHub vs GitLab Flow
git-flow์ ์ข
๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋ถ๋ฆฌ๋๋ค.
์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๊ฐ๋จํ ์์๋ณด์
# 1. Git Flow
๊ฐ์ฅ ์ต์ด๋ก ์ ์๋ Workflow ๋ฐฉ์์ด๋ฉฐ, ๋๊ท๋ชจ ํ๋ก์ ํธ ๊ด๋ฆฌ์ ์ ํฉํ ๋ฐฉ์์ผ๋ก ํ๊ฐ๋ฐ๋๋ค.
๊ธฐ๋ณธ ๋ธ๋์น๋ 5๊ฐ์ง๋ค.
- feature โ develop โ release โ hotfix โ master
# Master
๋ฆด๋ฆฌ์ฆ ์ ์ฌ์ฉํ๋ ์ต์ข ๋จ๊ณ ๋ฉ์ธ ๋ธ๋์น
Tag๋ฅผ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
# Develop
๋ค์ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ๊ฐ๋ฐ์ ์งํํ๋ ๋ธ๋์น
์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ด ํ์ํด์ง๋ฉด, ํด๋น ๋ธ๋์น์์ ๋ค์ ๋ธ๋์น(Feature)๋ฅผ ๋ด์ด ๊ฐ๋ฐ์ ์งํํ๊ณ , ์๋ฃ๋ ๊ธฐ๋ฅ์ ๋ค์ Develop ๋ธ๋์น๋ก Mergeํ๋ค.
# Feature
Develop ๋ธ๋์น์์ ๊ธฐ๋ฅ ๊ตฌํ์ ํ ๋ ๋ง๋๋ ๋ธ๋์น
ํ ๊ธฐ๋ฅ ๋จ์๋ง๋ค Feature ๋ธ๋์น๋ฅผ ์์ฑํ๋๊ฒ ์์น์ด๋ค.
# Release
Develop์์ ํ์๋ ๋ธ๋์น
Master ๋ธ๋์น๋ก ํ์ฌ ์ฝ๋๊ฐ Merge ๋ ์ ์๋์ง ํ ์คํธํ๊ณ , ์ด ๊ณผ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๋ ๊ณต๊ฐ์ด๋ค. ํ์ธ ๊ฒฐ๊ณผ ์ด์์ด ์๋ค๋ฉด, ํด๋น ๋ธ๋์น๋ Master์ Mergeํ๋ค.
# Hotfix
Mater๋ธ๋์น์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
๊ฒ์๋ฅผ ํด๋ ๋ฆด๋ฆฌ์ฆ๋ Master ๋ธ๋์น์์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค. ์ด๋ Hotfix ๋ธ๋์น๋ฅผ ๋ด์ด ๋ฒ๊ทธ ์์ ์ ์งํํ๋ค. ๋๋ฒ๊ทธ๊ฐ ์๋ฃ๋๋ฉด Master, Develop ๋ธ๋์น์ Mergeํด์ฃผ๊ณ ๋ธ๋์น๋ฅผ ๋ซ๋๋ค.
git-flow
์์ ๊ฐ์ฅ ์ค์ฌ์ด ๋๋ ๋ธ๋์น๋ master
์ develop
์ด๋ค. (๋ฌด์กฐ๊ฑด ํ์)
์ด๋ฆ์ ๋ณ๊ฒฝํ ์๋ ์์ง๋ง, ํต์์ ์ผ๋ก ์ฌ์ฉํ๋ ์ด๋ฆ์ด๋ฏ๋ก ๊ทธ๋๋ก ์ฌ์ฉํ๋๋ก ํ์
์งํ ๊ณผ์ ์ค์ Merge๋ feature
, release
, hotfix
๋ธ๋์น๋ ๋ซ์์ ์ญ์ ํ๋๋ก ํ๋ค.
์ด์ฒ๋ผ ๊ณํ์ ์ธ ๋ฆด๋ฆฌ์ฆ๋ฅผ ๊ฐ์ง๊ณ ์ค์ผ์ค์ด ์ง์ฌ์ง ๋๊ท๋ชจ ํ๋ก์ ํธ์๋ git-flow๊ฐ ์ ํฉํ๋ค. ํ์ง๋ง ๋๋ถ๋ถ ์ผ๋ฐ์ ์ธ ํ๋ก์ ํธ์์๋ ๋ถํ์ํ ์ ์ฐจ๋ค์ด ๋ง์ ์์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฐ๋ค๋ ์๊ฒฌ๋ ๋ง์ ๋ฐฉ์์ด๋ค.
# 2. GitHub 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์ ํต์ฌ์ ์ธ ๋ถ๋ถ)
# CI (Continuous Integration)
ํ์๊ด๋ฆฌ ํญ๋ชฉ์ ๋ํ ์ ์ ๊ณผ ํ์๊ด๋ฆฌ ๊ตฌ์ฑ ๋ฐฉ์ ๊ฒฐ์
๋น๋/๋ฐฐํฌ ์๋ํ ๋ฐฉ์
๋จ์ํ ์คํธ/ํตํฉํ ์คํธ ๋ฐฉ์
์ด ์ธ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ ์๋ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ
# 3. GitLab Flow
github flow์ ๊ฐ๋จํ ๋ฐฐํฌ ์ด์๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๊ด๋ จ ๋ด์ฉ์ ์ถ๊ฐ๋ก ๋ง๋ถ์ธ flow ๋ฐฉ์
Production ๋ธ๋์น๊ฐ ์กด์ฌํ์ฌ ์ปค๋ฐ ๋ด์ฉ์ ์ผ๋ฐฉ์ ์ผ๋ก Deploy ํ๋ ํํ๋ฅผ ๊ฐ์ถ๊ณ ์๋ค.
Master ๋ธ๋์น์ Production ๋ธ๋์น ์ฌ์ด์ pre-production
๋ธ๋์น๋ฅผ ๋์ด ๊ฐ๋ฐ ๋ด์ฉ์ ๋ฐ๋ก ๋ฐ์ํ์ง ์๊ณ , ์๊ฐ์ ๋๊ณ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํตํ ์ด์ ์, Production ๋ธ๋์น์์ ๋ฆด๋ฆฌ์ฆ๋ ์ฝ๋๊ฐ ํญ์ ํ๋ก์ ํธ์ ์ต์ ๋ฒ์ ์ํ๋ฅผ ์ ์งํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค.
์ฆ, github-flow์ ๋จ์ ์ธ ์์ ์ฑ๊ณผ ๋ฐฐํฌ ์๊ธฐ ์กฐ์ ์ ๋ํ ๋ถ๋ถ์ production์ด๋ผ๋ ์ถ๊ฐ ๋ธ๋์น๋ฅผ ๋์ด ๋ณด๊ฐํ๋ ์ ๋ ฅ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
# ์ ๋ฆฌ
3๊ฐ์ง ๋ฐฉ๋ฒ ์ค ๋ฌด์์ด ๊ฐ์ฅ ๋์ ๋ฐฉ์์ด๋ผ๊ณ ์ ํํ ์ ์๋ค. ํ๋ก์ ํธ, ๊ฐ๋ฐ์, ๋ฆด๋ฆฌ์ฆ ๊ณํ ๋ฑ ์ํฉ์ ๋ฐ๋ผ ์ ํฉํ ๋ฐฉ๋ฒ์ ํํด์ผ ํ๋ค.
๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ธ '์ฐ์ํ ํ์ ๋ค'์ด github-flow์์ git-flow๋ก ์ํฌํ๋ก์ฐ๋ฅผ ๋ณ๊ฒฝํ ๊ฒ ์ฒ๋ผ (ํด๋น ๊ธฐ์ฌ ๋งํฌ (opens new window)) ๋ธ๋์นญ๊ณผ ๋ฐฐํฌ์ ๋ํ ์ ๋ต ์ํฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๋ถ๋ถ์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ ํ์ ์ํฉ์ ๋ง๊ฒ ์ ์ ํ ์ํฌํ๋ก์ฐ๋ฅผ ์ ํํ์ฌ ์์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํ ๊ฒ์ด๋ค.