์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๋์์ ํ์ ํ ๋ ๋ธ๋์น๋ฅผ ๋ง์๋๋ก ํฉ์น๊ณ ๋ง๋ค๊ณ ๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ ๊ณผ์ ์ด ๋ณต์กํด์ง๊ณ ์ถ์ ์ด ์ด๋ ค์์ง๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด git flow, trunk-based, github flow ๋ฑ ๋ค์ํ ๋ธ๋์น ๋ฐฉ๋ฒ๋ก ๊ฐ์ ๊ฒ ์กด์ฌํ๋ค.
์ด๋ฐ ์ ๋ต์ ์ ์ฉํ๋ฉด ๋ธ๋์น ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ณ ํ์์ด ๋ง์๋ ๊ฐ๋ฐ ์ ์ฐจ๊ฐ ๋งค๋๋ฌ์์ง๋ค.
ํ์ ์ํค๋ ๊ฒ๋ง ํ๋ ์ฝ๋ฉ ๋
ธ์๊ฐ ์๊ธฐ ๊ฟ์ด๋ค! ์ถ์ผ๋ฉด ๋ชฐ๋ผ๋ ๋๊ณ ,
ํ๋ก์ ํธ๋ฅผ ๋ฆฌ๋ํ๊ฑฐ๋ ํ์ฅ์ด๋ผ๋ฉด ํน์ ๊ทธ๋ฐ ๊ฒ๋ค์ ํ๊ณ ์ถ๋ค๋ฉด ์์๋๋ฉด ์ข๋ค.
ํญ์ ์์ ์ ์ธ release๋ฅผ ํด์ผํ๋ค๋ฉด ์ด ์ ๋ต์ด ์ ํฉํ๋ค.
์ฃผ์ ๋ธ๋์น๋ ๋ค์๊ณผ ๊ฐ๋ค:
main ๋ธ๋์นdevelop ๋ธ๋์น (๊ฐ๋ฐ์ฉ)feature ๋ธ๋์น (develop์ ๊ธฐ๋ฅ์ถ๊ฐ์ฉ)hotfix ๋ธ๋์น (main ๋ธ๋์น ๋ฒ๊ทธํด๊ฒฐ์ฉ)release ๋ธ๋์น (develop ๋ธ๋์น๋ฅผ main ๋ธ๋์น์ ํฉ์น๊ธฐ ์ ์ ์ต์ข
ํ
์คํธ์ฉ)๊ฐ์์์ ์ด๋ก ๋ง ํ๋ํ๋ ์ค๋ช ์ ํ๋ฉด ์ฌ๋ฏธ๊ฐ ์๋ค๋ฉฐ ์์๋ฅผ ๋ค์ด์ ์ค๋ช ํ๋ค.
๋์ถฉ ์ง๊ธ๊น์ง ์ฃผ๋จน๊ตฌ๊ตฌ์์ผ๋ก ํ์ ํด์ 0.9๋ฒ์ ๊น์ง ๋์จ ์ํฉ์ด๋ค.
๊ทผ๋ฐ ์ด์ 1.0 ๋ฒ์ ๋ถํฐ๋ ์ ๊ธฐ๋ฅ๋ ๋ง์์ ธ์ ์ ๋๋ก ๊ฐ๋ฐ์ ์งํํ๊ณ ์ถ๋ค.
๊ทธ๋์ git flow๋ฅผ ๋์ ํ๊ธฐ๋ก ํ ๊ฒ์ด๋ค.
๊ธฐ์กด main ๋ธ๋์น์ 0.9๋ฒ์ ์ด ์๋ค๊ณ ์น์.

๊ทผ๋ฐ develop ๋ธ๋์น์๋ค๊ฐ ์ง์ ์ฝ๋๋ฅผ ๋ง pushํด๋ฒ๋ฆฌ๋ฉด ์ํฉ์ด ์ด์ง๋ฌ์์ง ์ ์๋ค.
๊ทธ๋์ ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ feature ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๊ฐ๋ฐํ๋ค.
feature/guild, feature/friend์ ๊ฐ์ด ๋ง๋ค์ด์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค.๊ทธ๋ฐ๋ฐ ์ด์ develop์ ์๋ ์ฝ๋๊ฐ ์ด๋์ ๋ ์์ฑ์ด ๋ ๊ฒ ๊ฐ๋ค.
์ด์ ์ถ์๋ฅผ ํ๊ณ ์ถ์๋ฐ, ์๋จ์๋ต๊ฒ ๋ฐ๋ก main ๋ธ๋์น์ ํฉ์ณ๋ ๋๊ฒ ์ง๋ง
์ฐ๋ฆฌ ์ฝ๋๋ ์๊ฐ๋ณด๋ค ์ฐ์ฝํ๊ธฐ ๋๋ฌธ์ ๋ถ์ํ ๊ฒ์ด ํ์ค์ด๋ค.
๊ทธ๋์ ๊ฒ์์ด ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋ค.

release/1.0 ์ด๋ฐ ์์ผ๋ก ์ด์๊ฒ ์ด๋ฆ์ ์ง๋๋ค.๊ทธ๋ฐ๋ฐ ์ ์ ๋ค์ด ๊ณจ๋ ๋ฌดํ ๋ณต์ฌ ๋ฒ๊ทธ ์ด๋ฐ ๊ฑธ ๋ฐ๊ฒฌํ๋ค๊ณ ์น์.
์ด๋ด ๋ ์๋นํ ๊ธํ๊ธฐ ๋๋ฌธ์ main ๋ธ๋์น์์ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ค์ด์ ๋น ๋ฅด๊ฒ ์์ ํ๋ค

์ด๊ฒ ๋ฐ๋ก hotfix ๋ธ๋์น๋ค.
๋ฌผ๋ก ์ ์ ๋ค์ ์ ๊ฒ์ด๋ ์
๋ฐ์ดํธ ์ด๋ฐ ๊ฑฐ ์ ์ข์ํ๋๊น
์ ๊ฒ ๋ณด์ ๊ฐ์ ๋ฐ์ดํฐ ์ชผ๊ฐ๋ฆฌ๋ค์ ์ฑ๊ฒจ์ค์ ๋ฏผ์ฌ์ ๊ด๋ฆฌํ๋๋ก ํ์.

์ด๋ ๊ฒ git flow๋ ์์ ์ ์ผ๋ก ๋ฒ์ ๋ณ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, CI/CD ๊ฐ์ ๊ฑฐ ํ๋ ๊ณณ์ ๋ณ๋ก ์ ์ ์น ์์ ์ ์๋ค.
(CI/CD๋ CI ๋จ๊ณ์์ ๋น๋๋๊ณ ํ ์คํธ๋ ํ, ๋ฐฐํฌ ์ค๋น ์ํ๊ฐ ํ์ธ๋๋ฉด ๊ฐ๋ฐ์ ํน์ ๊ฒ์ฆํ์ด ์๋์ผ๋ก ๋ฐฐํฌํ๋ ๊ฒ์ด๋ค)
์๋ฌดํผ ๊ทธ๋์ ๋๊ท๋ชจ ํ๋ก์ ํธ, ๋ฆด๋ฆฌ์ฆ ๊ด๋ฆฌ๊ฐ ์ค์ํ ์๋น์ค์ ์ ํฉํ๋ค.
Trunk-based๋ ์ฝ๊ฒ ๋งํ๋ฉด "๋ธ๋์น ํ๋๋ง ์ํ์"๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ธ๋์น ๊ตฌ์ฑ์ ์ดํด๋ณด๋ฉด
main (trunk)feature/* ๋ธ๋์น๋ง ์ ๊น ์์ฑ์ด์ ๋๋ก ์ด์๋๋ค.
๋์ถฉ ์ด์ ๋ฐฉ์์ ๋ ์์ธํ๊ฒ ์ค๋ช ํด๋ณด๋ฉด
๊ธฐ๋ฅ ์ถ๊ฐ๋ ๋ฒ๊ทธ ํฝ์ค๋ main์์ feature ๋ธ๋์น๋ฅผ ๋ฐ์ ๊ฐ๋ฐํ๊ณ ,
๊ฐ๋ฐ์ด ๋๋๋ฉด main์ merge ํ ๋ธ๋์น ์ญ์ ํ๋ฉด ๋๋ค.
main ๋ธ๋์น์ ์ฝ๋๋ฅผ ๋ฐ๋ก ๋ฐฐํฌํ๋ค.
์ด์ ๋๋ก ๋ณด๋ฉด ๋๋ค.

Trunk-based์ ํน์ง์ ๋ธ๋์น๊ฐ main๊ณผ feature๋ฐ์ ์์ด์ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ๊ฐ ์ฝ๊ณ , merge ์ถฉ๋์ด ์ ๋ค.
์ฝ๋๊ฐ ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ์ฌ์ผ ํ๋ฏ๋ก ๋ง์ ํ ์คํธ๋ฅผ ๊ฑฐ์น๊ฑฐ๋ ํ ์คํธ ์๋ํ ๊ฐ์ ๊ฑธ ํด์ผ ํ๊ณ ์ฝ๋๋ฆฌ๋ทฐ๋ ์์ฃผ ํด์ผ ํ๋ค.
| ๊ตฌ๋ถ | git flow | Trunk-based |
|---|---|---|
| ๋ธ๋์น ๊ตฌ์กฐ | main, develop, feature, release, hotfix ๋ฑ | main(trunk), feature๋ง ์ผ์์ ์ผ๋ก |
| ๋ฆด๋ฆฌ์ฆ ๊ด๋ฆฌ | ์ฒด๊ณ์ , ๋จ๊ณ์ | ๋น ๋ฅธ ๋ฐฐํฌ, ํตํฉ |
| ๋ณต์ก์ฑ | ๋ธ๋์น ๋ง์ | ๋จ์ํจ |
| ์ ํฉํ ํ/์ํฉ | ๋๊ท๋ชจ, ์์ ์ฑ ์ค์, ์ฒด๊ณ์ ๊ด๋ฆฌ ํ์ | ์๊ท๋ชจ, ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ |
| ๋จ์ | ๋ธ๋์น ๊ด๋ฆฌ ๋ณต์ก, merge ์ถฉ๋ ๊ฐ๋ฅ | ํ ์คํธ ๋ง์ด, ์์ฃผํด์ผ ํจ |
ํ๋ก์ ํธ ํน์ฑ, ํ ๊ตฌ์ฑ, ๋ฐฐํฌ ๋ฐฉ์์ ๋ฐ๋ผ ์ ๋ต์ ์ ์ฐํ๊ฒ ์ ํํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ด๋์ ๋ ๊ฐ๋ฐ์ด ์ง์ฒ๋๊ฑฐ๋, ํ์ ํ๋ก ์ฝ๋ฉ ์ ์ฌ ์ด๋ฐ ๋ถ๋ค์ด ๊ฐ๋ํ๋ฉด trunk-based ์ด๋ฐ ๊ฒ ๋ ํธํ๋ค. (์ต๊ทผ CI/CD ํ์์ผ๋ก ๊ฐ๋ฐํ๋ ํ๋ค์ ๋ณดํต trunk-based๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค)
์์ ์ฑ์ด ์ค์ํ๊ฑฐ๋ ์์ง ๋ผ๋๊ฐ ํ์คํ์ง ์์ ์ฐ๊ตฌ์ ํ๋ก๊ทธ๋จ์ด๋ฉด git flow์ ๋ต์ด ์ ์ ํ ์ ์๋ค. (๋ฌผ๋ก ์ ํด์ง ๊ฑด ์๋ค)
ํ๋ ๊ฐ๋ฐ์๋ค ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ์ ์ด๋ฐ ๊ฒ ๋๋ค๋ฉด ์ ์ฉํ๊ฒ ์จ๋จน์ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ๋ญ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ํด ์ด๋ฐ ๊ฒ ๋์ฌ ๊ฐ๋ฅ์ฑ๋ ์์ง๋ง ์ผ๋จ ์์๋๋ฉด ์ข์ผ๋ ๊ณต๋ถํด๋ฌ์ ๋์ ๊ฑด ์๋ค๊ณ ์ฌ๊ธด๋ค.