# [[Git Workflow for Frontend Teams]] ## ๐Ÿ“Œ Brief Summary ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์„ ์œ„ํ•œ Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ˜‘์—…์„ ์ด‰์ง„ํ•˜๋ฉฐ ์•ˆ์ •์ ์ธ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‹ค [1-3]. ์ฃผ์š” ์ „๋žต์œผ๋กœ๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch), ๊นƒํ—ˆ๋ธŒ ํ”Œ๋กœ์šฐ(GitHub Flow), ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜(Trunk-based) ๊ฐœ๋ฐœ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์ด๋“ค์€ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜, ๋ช…ํ™•ํ•œ ๋ช…๋ช… ๊ทœ์น™ ๋ฐ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜, ๋™๋ฃŒ ๋ฆฌ๋ทฐ๊ฐ€ ํฌํ•จ๋œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ๊ณตํ†ต์œผ๋กœ ๊ฐ•์กฐํ•œ๋‹ค [2, 4, 5]. ์ž˜ ๊ตฌํ˜„๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ž ์žฌ์ ์ธ ํ˜ผ๋ž€์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ณ ํ’ˆ์งˆ ์—…๋ฐ์ดํŠธ์˜ ํ๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค [2]. ## ๐Ÿ“– Core Content * **๋ธŒ๋žœ์นญ ์ „๋žต (Branching Strategies)**: 2~5๋ช… ๊ทœ๋ชจ์˜ ์†Œ๊ทœ๋ชจ ํŒ€์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฐ Git Flow ๋Œ€์‹  ์‹ฌํ”Œํ•œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch) ์›Œํฌํ”Œ๋กœ์šฐ๋‚˜ ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์„ ์ฃผ๋กœ ์ฑ„ํƒํ•œ๋‹ค [6-8]. ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•ˆ์ •์ ์ธ `main` ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, `main`์œผ๋กœ์˜ ์ง์ ‘์ ์ธ ์ปค๋ฐ‹์€ ์—„๊ฒฉํžˆ ์ œํ•œ๋œ๋‹ค [9, 10]. * **๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ ๋ฐ ๋ช…๋ช… ๊ทœ์น™ (Branch Management & Naming)**: ๋ธŒ๋žœ์น˜๋Š” ์ˆ˜๋ช…์ด ์งง์•„์•ผ ํ•˜๊ณ , ๋‹จ์ผ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์—๋งŒ ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ณ‘ํ•ฉ ํ›„์—๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์–ด์•ผ ํ•œ๋‹ค [9, 11]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์„œ์ˆ ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ถ”์ ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ด์Šˆ/ํ‹ฐ์ผ“ ID(์˜ˆ: `feature/PROJ-123-user-auth`, `bugfix/GH-456-login-fix`)๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค [12, 13]. * **์ปค๋ฐ‹ ๊ทœ์น™ (Commits)**: ๊ฐ ์ปค๋ฐ‹์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•˜๋Š” ์›์ž์  ์ปค๋ฐ‹(Atomic Commits) ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค [14]. ๊ฐ€๋…์„ฑ ๋†’์€ ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€์™€ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด `feat:`, `fix:`, `docs:`, `refactor:`, `chore:` ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” 'Conventional Commits' ํฌ๋งท์„ ๋”ฐ๋ฅธ๋‹ค [11, 15, 16]. * **ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋ฐ ๋ณ‘ํ•ฉ (PR & Merging)**: ์ฒ ์ €ํ•œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด PR์€ ๊ฐ€๊ธ‰์  ์ž‘์€ ํฌ๊ธฐ(์˜ˆ: 200์ค„ ์ดํ•˜)๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค [9]. ๋ณ‘ํ•ฉ ์ „์—๋Š” ์ตœ์†Œ ํ•œ ๋ช…์˜ ๋™๋ฃŒ ๋ฆฌ๋ทฐ์–ด ์Šน์ธ๊ณผ CI/CD ํ…Œ์ŠคํŠธ ํ†ต๊ณผ๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋œ๋‹ค [9, 10]. ๊น”๋”ํ•œ `main` ๋ธŒ๋žœ์น˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์ด ๋„๋ฆฌ ๊ถŒ์žฅ๋œ๋‹ค [9, 17]. ๋˜ํ•œ, Storybook์ด๋‚˜ Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ํšŒ๊ท€(Visual regression) ๊ฒ€ํ† ๋ฅผ PR ๊ณผ์ •์— ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค [18]. * **์ถฉ๋Œ ๋ฐฉ์ง€ (Conflict Prevention)**: ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ๋ˆ„์ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์ฃผ ๊ฐ€์ ธ์™€(pull/rebase) ์ž์‹ ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ , ์ถฉ๋Œ์„ ์ ์ง„์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค [7, 17]. ## โš–๏ธ Trade-offs & Caveats * **ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ vs Git Flow**: ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์€ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ํ†ตํ•ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์ง€๋งŒ, ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI)์„ ์™„๋ฒฝํžˆ ๊ตฌ์ถ•ํ•œ ๊ฒฝํ—˜ ๋งŽ์€ ํŒ€์—๊ฒŒ ์ ํ•ฉํ•˜๋‹ค [8]. ๋ฐ˜๋ฉด, Git Flow๋Š” ์ •๊ธฐ์ ์ธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋„์ž…ํ•˜๊ธฐ์—๋Š” ๋ณต์žก์„ฑ๊ณผ ์ ˆ์ฐจ์  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์„œ ์ง„ํ–‰ ์†๋„๋ฅผ ๋Šฆ์ถ”๋Š” ๋ถ€์ž‘์šฉ(Trade-off)์ด ์žˆ๋‹ค [6, 8]. * **๋ธŒ๋žœ์น˜ ์ˆ˜๋ช… (Branch Lifespan)**: ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์˜ค๋ž˜ ์œ ์ง€๋ ์ˆ˜๋ก ๋ณ‘ํ•ฉ ์ถฉ๋Œ์˜ ์œ„ํ—˜์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง„๋‹ค. ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด ๋นˆ๋ฒˆํ•œ PR ์ƒ์„ฑ๊ณผ ์ฝ”๋“œ ๋™๊ธฐํ™”๋กœ ์ธํ•œ ๋ฌธ๋งฅ ์ „ํ™˜(Context switching) ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ ํŒŒ๊ดด์ ์ธ ์ถฉ๋Œ๊ณผ ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์„ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€๊ฐ€ ์žˆ๋‹ค [7, 19]. * **์—„๊ฒฉํ•œ ๊ทœ์น™ vs ์œ ์—ฐ์„ฑ**: ๋ชจ๋“  ๋ธŒ๋žœ์น˜์™€ ์ปค๋ฐ‹์— ํ‹ฐ์ผ“ ID๋ฅผ ๊ฐ•์ œํ•˜๊ณ  Conventional Commits๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ทœ์œจ์„ ์š”๊ตฌํ•˜์ง€๋งŒ, ์ด๋ฅผ ๊ฐ„๊ณผํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ์˜ ๋งฅ๋ฝ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์˜ ์ถ”์ ์„ฑ(Traceability)์„ ์™„์ „ํžˆ ์ƒ์‹คํ•˜๊ฒŒ ๋˜๋Š” ํ•œ๊ณ„์ ์ด ์กด์žฌํ•œ๋‹ค [20]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Trunk-Based Development]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฌด๊ฑฐ์šด Git Flow์— ๋Œ€๋น„๋˜๋Š” ๊ฒฝ๋Ÿ‰ํ™” ์ „๋žต์˜ ๋Œ€ํ‘œ์  ์‚ฌ๋ก€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๋ฅผ ์ž์ฃผ, ์ž‘๊ฒŒ ๋ฐ€์–ด ๋„ฃ์Œ์œผ๋กœ์จ ๋Œ€๊ทœ๋ชจ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ณ  ๋น ๋ฅธ ์ฝ”๋“œ ํ†ตํ•ฉ์„ ์ด๋ฃจ๋Š” ์›๋ฆฌ. - [[Git Flow]] - ์—ฐ๊ฒฐ ์ด์œ : ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜ ๋“ฑ์„ ๋‘๋Š” ์ „ํ†ต์ ์ด๊ณ  ๋ณต์žกํ•œ ๋ธŒ๋žœ์นญ ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [6, 8, 21]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ˆœํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋„˜์–ด ํŠน์ • ์Šค์ผ€์ค„๊ณผ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ๋ณต์žกํ•œ ๋ฐฐํฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์š”๊ตฌ๋˜๋Š” ๊ตฌ์กฐ์  ์ ‘๊ทผ. - [[GitHub Flow]] - ์—ฐ๊ฒฐ ์ด์œ : ์•ˆ์ •์ ์ธ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์™€ PR ๊ธฐ๋ฐ˜์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์ค‘์ ์ธ ์ „๋žต์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [5, 22]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ถ”๊ฐ€์ ์ธ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜(develop ๋“ฑ) ์—†์ด ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ `main`์œผ๋กœ ๋ณ‘ํ•ฉ๋˜๋Š” ์ง€์†์  ๋ฐฐํฌ์˜ ํ๋ฆ„. #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[Conventional Commits]] - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋กœ์ ํŠธ์˜ ์ปค๋ฐ‹ ์ด๋ ฅ์„ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ํ‘œ์ค€ํ™”๋œ ํฌ๋งท์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [11, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ผ๊ด€๋œ ์ปค๋ฐ‹ ํ˜•์‹์ด ์–ด๋–ป๊ฒŒ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ ์ž๋™ํ™” ๋ฐ ์ฝ”๋“œ ํžˆ์Šคํ† ๋ฆฌ ์Šค์บ๋‹์œผ๋กœ ์ด์–ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜. - [[Pull Requests (PR)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋กœ ํ†ตํ•ฉ๋˜๊ธฐ ์ „ ๊ฒ€์ฆ์„ ๊ฑฐ์น˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [14, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒ€ ๋‚ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ(CI) ํ™•์ธ ๋“ฑ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality Gate)๋กœ์„œ์˜ ์ž‘๋™ ๋ฐฉ์‹. - [[Visual Regression Testing]] - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์˜ ํŠน์„ฑ์ƒ PR ๋‹จ๊ณ„์—์„œ UI ์‹œ๊ฐ์  ๊ฒ€์ฆ ๋„๊ตฌ ์—ฐ๋™์ด ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [18]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Chromatic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด CSS, ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ PR ๋‹จ๊ณ„์—์„œ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•. ### Deeper Research Questions - ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature-branch) ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ํŠธ๋ ํฌ ๊ธฐ๋ฐ˜(Trunk-based) ๊ฐœ๋ฐœ๋กœ ์›ํ™œํ•˜๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒ€์€ ์–ด๋–ค ๋‹จ๊ณ„์  ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๊ฐ€? - ์งง์€ ์ˆ˜๋ช…์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ž๋™ ๋ณ‘ํ•ฉ(Auto-merge)ํ•˜๋„๋ก ์ง€์›ํ•˜๋ ค๋ฉด CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ์Šคํ† ๋ฆฌ๋ถ ๋ฐ Chromatic์„ ํ™œ์šฉํ•œ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Visual Regression Testing) ๋„๊ตฌ๋ฅผ PR ๋ฆฌ๋ทฐ ์ฃผ๊ธฐ์— ๋ณ‘๋ชฉ ํ˜„์ƒ ์—†์ด ์ตœ์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - ์—ฌ๋Ÿฌ ์ปค๋ฐ‹์ด ํ•˜๋‚˜๋กœ ์••์ถ•๋˜๋Š” ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash Merge)์„ ์‚ฌ์šฉํ•  ๋•Œ, ํŠน์ • ์„ธ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์‚ฌ(Audit)ํ•˜๊ฑฐ๋‚˜ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„์ ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ(Feature Flags)๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•  ๋•Œ ํ‹ฐ์ผ“ ID๊ฐ€ ํฌํ•จ๋œ ์งง์€ ์ˆ˜๋ช…์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ์›์ž์  ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์žฆ์€ `pull`์„ ํ†ตํ•ด `main`๊ณผ์˜ ์ถฉ๋Œ์„ ์„ ์ œ์ ์œผ๋กœ ์˜ˆ๋ฐฉํ•œ๋‹ค. - **System Design:** GitHub, GitLab ๋“ฑ์˜ ์ €์žฅ์†Œ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™(Branch protection)์„ ์„ค์ •ํ•˜์—ฌ ์ง์ ‘ ์ปค๋ฐ‹์„ ์ฐจ๋‹จํ•˜๊ณ , ๋ณ‘ํ•ฉ ์ „ ์ตœ์†Œ 1๋ช…์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ CI ํ†ต๊ณผ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. - **Operation / Maintenance:** PR ๋ณ‘ํ•ฉ(Merge) ์‹œ ์ž๋™์œผ๋กœ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ์‚ญ์ œ๋˜๋„๋ก ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๊ณ , ์Šค์ฟผ์‹œ ๋ณ‘ํ•ฉ(Squash merge)์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ปค๋ฐ‹ ํŠธ๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. - **Learning Path:** ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ ์ž…๋ฌธ์ž๋Š” ๋ณต์žกํ•œ Git Flow ๋Œ€์‹ , `main` ๋ธŒ๋žœ์น˜์™€ ๋‹จ์ผ `feature` ๋ธŒ๋žœ์น˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ถ€ํ„ฐ ํ•™์Šตํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. - **My Project Relevance:** ํŒ€ ๋‚ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์—ํ‹ฐ์ผ“์„ ์ •๋ฆฝํ•˜๊ณ , JIRA ๋“ฑ ์ด์Šˆ ํŠธ๋ž˜์ปค์˜ ํ‹ฐ์ผ“ ๋ฒˆํ˜ธ๋ฅผ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ์—ฐ๋™ํ•˜๋ฉฐ, Storybook์„ PR ๊ฒ€ํ†  ๊ณผ์ •์— ์—ฐ๋™ํ•˜์—ฌ UI ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๋Š” ๊ทœ์น™์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ### Adjacent Topics - [[Continuous Integration / Continuous Deployment (CI/CD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: PR ์ƒ์„ฑ, ์ปค๋ฐ‹ ํ‘ธ์‹œ์™€ ๊ฐ™์€ Git ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๊ฐœ๋ฐœ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๋‹จ์ถ•ํ•˜๋Š”์ง€ ์กฐ์‚ฌ. - [[Storybook & Component-Driven Development]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ฒฉ๋ฆฌ๋œ ์ปดํฌ๋„ŒํŠธ ํ™˜๊ฒฝ์ด ์–ด๋–ป๊ฒŒ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Git)๊ณผ ์—ฐ๋™๋˜์–ด PR ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ์‹œ๊ฐ์  ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์  ์‚ฌ๋ก€ ํƒ๊ตฌ. --- *Last updated: 2026-04-30*