๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[์•„ํ‹ฐํด ๋ฆฌ๋ทฐ] Circle CI Blog - Trunk-based vs. feature-based development

by Wonit 2023. 1. 25.

ํ•ด๋‹น ๊ธ€์€ ๊ฐœ๋ฐœ, ๊ธฐ์ˆ ๊ด€๋ จ ์•„ํ‹ฐํด์ด๋‚˜ ๋ธ”๋กœ๊ทธ ๊ธ€ ํ˜น์€ ์œ ํŠœ๋ธŒ ์˜์ƒ์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ›„๊ธฐ๋ฅผ ์ ๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.

๋ฆฌ๋ทฐํ•  ๊ธ€: 'circile ci blog' ์˜ 'Trunk-Based vs Feature-Based development'

 

Trunk-based vs. feature-based development

Learn the difference between trunk-based development and feature branching and why trunk-based is recommended for DevOps.

circleci.com

์ฃผ์ œ์™€ ๊ฐ„๋‹จ ์š”์•ฝ

  • 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 ์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์ด ๊ฐ€๋Šฅํ•จ
      • ๋‹จ์ 
        • trunk based development ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์กฐ์ง์˜ git ์— ๋Œ€ํ•œ ์ดํ•ด๋„์™€ ๊ธฐ์ˆ ๋ ฅ์ด ์„ฑ์ˆ™ํ•ด์•ผํ•จ
          • commit ์ž์ฒด๊ฐ€ ๋ฐฐํฌ์ด๋ฏ€๋กœ
    • feature based development
      • gitflow ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” classic ํ•œ ์ ‘๊ทผ๋ฒ•
      • main ๋ธŒ๋žœ์น˜๋กœ ์ง์ ‘ push ํ•˜์ง€ ์•Š๋Š”๋‹ค
        • feature ๋ผ๋Š” ๋ธŒ๋žœ์น˜ ํ˜น์€ develop ์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด์„œ main ์— merge ๋˜๊ฒŒ ํ•œ๋‹ค
      • code review ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ main ์— feature ํ˜น์€ develop ๋ธŒ๋žœ์น˜๊ฐ€ merge ๋˜๊ธฐ ์ „์— ์ˆ˜ํ–‰ํ•œ๋‹ค
      • ์žฅ์ 
        • ์ˆ˜๋ฐฑ๊ฐ€์ง€์˜ feature ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ
        • ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ feature ๊ฐ€ ๋…๋ฆฝ์ ์ด๋ผ ์„œ๋กœ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Œ
        • ์—ญ์‹œ production ์—๋„ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Œ
      • ๋‹จ์ 
        • ๋‹ค๋Ÿ‰์˜ pr ์ด queued ๋  ์ˆ˜ ์žˆ์Œ
        • ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๊ผผ๊ผผ์ด ๋ณด์ง€ ์•Š๋Š”๋‹ค๋ฉด queue ๊ฐ€ ๋ฐ€๋ฆฌ๊ฒŒ๋จ

๋ฆฌ๋ทฐ์™€ ๋‚˜์˜ ํ•ด์„

 

์ด๋ฒˆ์— ์ƒˆ๋กœ ์ด์งํ•œ ํšŒ์‚ฌ์—์„œ ์ง€ํ–ฅํ•˜๋Š” 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 ์— ๋Œ€ํ•œ ๋…ธํ•˜์šฐ์™€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ฑ์ˆ™๋„์— ์˜ํ–ฅ์„ ๋งŽ์ด ๋ฐ›์„๊ฒƒ ๊ฐ™๋‹ค

 

ํ˜„์žฌ ์กฐ์ง์—์„œ ์ง€ํ–ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๊ณ  ํ•˜๋‹ˆ ์‹ค๋ฌด ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ์— ๋” ๊ธด ๊ธ€๋กœ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค

๋Œ“๊ธ€