[์ํฐํด ๋ฆฌ๋ทฐ] Circle CI Blog - Trunk-based vs. feature-based development
ํด๋น ๊ธ์ ๊ฐ๋ฐ, ๊ธฐ์ ๊ด๋ จ ์ํฐํด์ด๋ ๋ธ๋ก๊ทธ ๊ธ ํน์ ์ ํ๋ธ ์์์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฑฐ๋ ํ๊ธฐ๋ฅผ ์ ๋ ๊ธ์ ๋๋ค.
๋ฆฌ๋ทฐํ ๊ธ: 'circile ci blog' ์ 'Trunk-Based vs Feature-Based development'
์ฃผ์ ์ ๊ฐ๋จ ์์ฝ
- trunk based development ๊ณผ feature based development
- trunk based development
- ๋น์ฅ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ trunk ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋จ์ผ ๋ธ๋์น๋ง ์ ์ง์ํจ๋ค
- ๊ฐ๋ฐ์๋ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด์ main ํน์ trunk ๋ผ๋ ๋ธ๋์น์ ๋ฐ๋ก push ํ ์ ์๋ค
- ํ์์ ๋ฐ๋ผ์ ์ค๋๊ฑธ๋ฆฌ๋ ์์ ์ด๋ผ๋ฉด ์๋ก์ด ๋ธ๋์น๋ฅผ ๋ฐ๋ ์ข๋ค, ๊ทธ๋ฆฌ๊ณ merge ํ๋ค
- trunk/main ๋ธ๋์น๋ ํญ์ production ready
- commit ์ ๊ณ์ํด์ push ํจ
- ์ฅ์
- well with cicd, ๋น ๋ฅธ ci/cd ๊ฐ ๊ฐ๋ฅํด์ง
- commit ์ ๊ณ์ํด์ main ์ push ํ๋ค๋ฉด ์ง์ ํ ci ๊ฐ ๊ฐ๋ฅํด์ง
- refactoring ์ ๋ํ ๋น ๋ฅธ ํผ๋๋ฐฑ์ด ๊ฐ๋ฅํจ
- well with cicd, ๋น ๋ฅธ ci/cd ๊ฐ ๊ฐ๋ฅํด์ง
- ๋จ์
- trunk based development ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์กฐ์ง์ git ์ ๋ํ ์ดํด๋์ ๊ธฐ์ ๋ ฅ์ด ์ฑ์ํด์ผํจ
- commit ์์ฒด๊ฐ ๋ฐฐํฌ์ด๋ฏ๋ก
- trunk based development ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์กฐ์ง์ git ์ ๋ํ ์ดํด๋์ ๊ธฐ์ ๋ ฅ์ด ์ฑ์ํด์ผํจ
- feature based development
- gitflow ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ classic ํ ์ ๊ทผ๋ฒ
- main ๋ธ๋์น๋ก ์ง์ push ํ์ง ์๋๋ค
- feature ๋ผ๋ ๋ธ๋์น ํน์ develop ์ด๋ผ๋ ๋ธ๋์น๋ฅผ ํตํด์ main ์ merge ๋๊ฒ ํ๋ค
- code review ๋ ์ผ๋ฐ์ ์ผ๋ก main ์ feature ํน์ develop ๋ธ๋์น๊ฐ merge ๋๊ธฐ ์ ์ ์ํํ๋ค
- ์ฅ์
- ์๋ฐฑ๊ฐ์ง์ feature ๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์์
- ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ feature ๊ฐ ๋ ๋ฆฝ์ ์ด๋ผ ์๋ก ์ํฅ์ ๋ผ์น์ง ์์
- ์ญ์ production ์๋ ์ํฅ์ ๋ผ์น์ง ์์
- ๋จ์
- ๋ค๋์ pr ์ด queued ๋ ์ ์์
- ๋ฆฌ๋ทฐ์ด๊ฐ ๊ผผ๊ผผ์ด ๋ณด์ง ์๋๋ค๋ฉด queue ๊ฐ ๋ฐ๋ฆฌ๊ฒ๋จ
- trunk based development
๋ฆฌ๋ทฐ์ ๋์ ํด์
์ด๋ฒ์ ์๋ก ์ด์งํ ํ์ฌ์์ ์งํฅํ๋ git strategy ๊ฐ ๋ฐ๋ก trunk based development ์๋ค
trunk based development ๋ฅผ ํ ๋จ์ด๋ก ์ค๋ช ํ์๋ฉด commit ๋ณ๋ก ๋ฐฐํฌ ๊ฐ ๋ ๊ฒ ๊ฐ๋ค
์ฐ์ ์ด ๊ธ์ ๋ณด๊ณ ๊ฒฉํ๊ฒ ๋์ํ๋ ๋ถ๋ถ์ ๋ฐ๋ก refactoring ์ ๋ํ ๋น ๋ฅธ ํผ๋๋ฐฑ์ด๋ค
์ผ์ ์ ๊ฑฐ๋ํ ๋ ๊ฑฐ์ ์์คํ ์ refactoring ์ ์ํํ ์ ์ด ์๋ค. ์๋ก์ด feature ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ refactoring ์ด ์์ผ๋ฉด ๋ถ๊ฐ๋ฅํ ์ํฉ์ด์๊ณ ์ฌ์ง์ด ํด๋น ๋ ๊ฑฐ์๋ ํ ์คํธ์ฝ๋๊ฐ ์ ๋ฌดํ๋ค.
์ด๋ฌํ ์ํฉ์์ ํ์์ ๊ณ ์ํ ์ ํ์ ๋ฐ๋ก small step ์ด์๋ค
small step ์ ํตํ commit ๊ณผ ์ฆ์ ๋ฐฐํฌ, ๊ทธ๋ฆฌ๊ณ ํญ์ ์ค๋น๋ rollback ์ด ๊ทธ ํด๋ต์ด์๋๋ฐ, trunk based development ๋ฅผ ๋ณด๋ฉฐ ๋ฑ small step ์ด ๋ ์ฌ๋๋ค.
ํ์ง๋ง ๋ฐ๋๋ก ์ด๋ฐ ์๊ฐ๋ ๋ ๋ค
ํ์ค์ ์ผ๋ก ๊ฐ๋ฅํ ๊น?
์ฐ์ commit ๋ณ๋ก ๋ฐฐํฌ ์ธ์ดํด์ด ๋๋ค๋ ์ด์ผ๊ธฐ๋ ๊ต์ฅํ ํจ์จ์ ์๊ณผ ๋์์ ์ํํ๋ค.
commit ์ ๋ํ ์ถฉ๋ถํ review ๊ฐ ์ด๋ค์ง์ง ์๋๋ค๋ฉด ๊ณ์๋๋ ์ฅ์ ๋ฅผ ๋ง์ฃผํ ์ง๋ ๋ชจ๋ฅธ๋ค. (๊ทธ๋์ ๋ commit ์ ์ ๊ฒฝ์ ์ฐ๊ณ ๋ฐฉ์ด์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ค๋?)
๊ทธ๋์ ํด๋น ๋ฐฉ๋ฒ๋ก ์ ํ์ git ์ ๋ํ ๋ ธํ์ฐ์ ์ฝ๋์ ๋ํ ์ฑ์๋์ ์ํฅ์ ๋ง์ด ๋ฐ์๊ฒ ๊ฐ๋ค
ํ์ฌ ์กฐ์ง์์ ์งํฅํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ผ๊ณ ํ๋ ์ค๋ฌด ์ ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ๋ค์์ ๋ ๊ธด ๊ธ๋ก ์ฐพ์๋ณผ ์ ์์๊ฒ ๊ฐ๋ค