# [[GitHub Flow|GitHub Flow]] ## ๐Ÿ“Œ Brief Summary GitHub Flow๋Š” ๋ณต์žกํ•œ Git Flow์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€๋ณ๊ณ  ๋‹จ์ˆœํ•œ ๋ธŒ๋žœ์น˜ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๋ฐฉ์‹์€ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(deployable)๋ฅผ ์œ ์ง€ํ•˜๋Š” `main` ๋ธŒ๋žœ์น˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ƒˆ๋กœ์šด ์ž‘์—…์„ ์œ„ํ•ด ์งง์€ ์ฃผ๊ธฐ์˜ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(feature branch)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [3-5]. ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋Š” ๋™๋ฃŒ์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ CI/CD ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•œ ํ›„ ์˜ค์ง Pull Request(PR)๋ฅผ ํ†ตํ•ด์„œ๋งŒ `main`์— ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค [1, 6]. ## ๐Ÿ“– Core Content * **์•ˆ์ •์ ์ธ `main` ๋ธŒ๋žœ์น˜ ์œ ์ง€** GitHub Flow์˜ ํ•ต์‹ฌ์€ `main` (๋˜๋Š” `master`) ๋ธŒ๋žœ์น˜๊ฐ€ ํ•ญ์ƒ ์•ˆ์ •์ ์ด๊ณ  ์–ธ์ œ๋“  ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค [3-5]. ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ `main` ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ์ปค๋ฐ‹(direct commit)ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [1, 6, 7]. * **๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜(Feature Branch) ๊ธฐ๋ฐ˜ ์ž‘์—…** ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฒ„๊ทธ ์ˆ˜์ •, ๋ฌธ์„œ ์ž‘์—… ๋“ฑ์€ `main`์—์„œ ํŒŒ์ƒ๋œ ์งง์€ ์ˆ˜๋ช…(short-lived)์˜ ์ „์šฉ ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3-5]. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ `feature/user-auth` ๋˜๋Š” `bugfix/login-error`์™€ ๊ฐ™์ด ์„ค๋ช…์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐ€๋Šฅํ•˜๋ฉด ํ‹ฐ์ผ“ ID(์˜ˆ: `PROJ-123`)๋ฅผ ํฌํ•จํ•˜์—ฌ ์ถ”์ ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [8, 9]. * **Pull Request (PR) ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ** ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด `main` ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค [6, 10]. ๋ณ‘ํ•ฉ ์ „์—๋Š” ๋ฐ˜๋“œ์‹œ ์ตœ์†Œ 1๋ช… ์ด์ƒ์˜ ํŒ€์›์—๊ฒŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ(Peer Review)๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋ฉฐ, CI/CD ํ™˜๊ฒฝ์—์„œ์˜ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 6, 8]. ์ด๋Š” ํ˜ผ์ž์„œ ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์•ˆ์ „์žฅ์น˜์ž…๋‹ˆ๋‹ค [8]. * **๋ณ‘ํ•ฉ ๊ทœ์น™๊ณผ ์ •๋ฆฌ** ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด PR์„ ๋ณ‘ํ•ฉํ•  ๋•Œ๋Š” 'Squash Merge' ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [6, 7, 11]. ์„ฑ๊ณต์ ์œผ๋กœ ๋ณ‘ํ•ฉ๋œ ์ดํ›„์—๋Š” ๋ถˆํ•„์š”ํ•œ ๋ธŒ๋žœ์น˜๊ฐ€ ์Œ“์ด์ง€ ์•Š๋„๋ก ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ์ฆ‰์‹œ ์‚ญ์ œ(auto-delete)ํ•ฉ๋‹ˆ๋‹ค [6, 8, 11]. * **์›Œํฌํ”Œ๋กœ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Migration)** ํŒ€์ด ๊ธฐ์กด์˜ ๋ณต์žกํ•œ Git Flow์—์„œ GitHub Flow๋กœ ์ „ํ™˜ํ•˜์—ฌ ํ†ตํ•ฉ ์†๋„๋ฅผ ๋†’์ด๊ณ  ๋‹จ์ˆœํ™”ํ•˜๋ ค๋ฉด, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜(release branch) ์ƒ์„ฑ์„ ์ค‘๋‹จํ•˜๊ณ , `develop` ๋ธŒ๋žœ์น˜๋ฅผ `main`์œผ๋กœ ํ†ตํ•ฉํ•œ ๋’ค, `main` ๋ธŒ๋žœ์น˜์—์„œ ์ง์ ‘ ๋ฐฐํฌํ•˜๋„๋ก CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [2]. ๋ฐ˜๋Œ€๋กœ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๋” ๋ณต์žกํ•ด์ง€๋ฉด `develop` ๋ธŒ๋žœ์น˜ ๋“ฑ์„ ์ถ”๊ฐ€ํ•ด Git Flow๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [12]. ## โš–๏ธ Trade-offs & Caveats * **๋ณ‘ํ•ฉ ์ฝ”๋“œ์˜ ์ฆ‰๊ฐ์ ์ธ ๋ฆฌ์Šคํฌ**: `main` ๋ธŒ๋žœ์น˜๊ฐ€ ์œ ์ผํ•œ ๋ฐฐํฌ ๊ธฐ์ค€์ ์ด ๋˜๋ฏ€๋กœ, ๋ฆฌ๋ทฐ๋‚˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋  ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜(์šด์˜) ํ™˜๊ฒฝ์— ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13, 14]. ๋”ฐ๋ผ์„œ ๊ฐ•๋ ฅํ•œ CI/CD ์ž๋™ํ™” ํ™˜๊ฒฝ๊ณผ Branch Protection Rule(๋ณดํ˜ธ ๊ทœ์น™)์ด ํ•„์ˆ˜์ ์œผ๋กœ ๋’ท๋ฐ›์นจ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 6]. * **๋ธŒ๋žœ์น˜ ์ˆ˜๋ช… ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€**: ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ์œ ์ง€(Long-lived)๋˜๋ฉด `main` ๋ธŒ๋žœ์น˜์™€์˜ ์ฐจ์ด๊ฐ€ ๋ฒŒ์–ด์ ธ ์‹ฌ๊ฐํ•œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ(Merge Conflict)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [13, 15]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋งค์ผ ์ž‘์—… ์ „ `main` ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋‹น๊ฒจ์˜ค๊ณ (pull/rebase) ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ทœ์œจ์„ ์—„๊ฒฉํžˆ ์ง€์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค [11, 13]. * **๋Œ€๊ทœ๋ชจ/์ •๊ธฐ ๋ฆด๋ฆฌ์Šค ํ”„๋กœ์ ํŠธ์—์„œ์˜ ํ•œ๊ณ„**: ์ •ํ•ด์ง„ ์ผ์ •์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ๋ฌถ์–ด์„œ ๋ฐฐํฌํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜, ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ๊ณผ๊ฑฐ ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๋ฆด๋ฆฌ์Šค ๋ธŒ๋žœ์น˜๊ฐ€ ์—†๋Š” GitHub Flow๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฌด๊ฒ๋”๋ผ๋„ Git Flow๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 16]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  (๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ)] - Git Flow - ์—ฐ๊ฒฐ ์ด์œ : GitHub Flow์™€ ์ž์ฃผ ๋น„๊ต๋˜๋Š” ๋ถ„๊ธฐ ์ „๋žต์œผ๋กœ, ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋‘ ์ „๋žต ์‚ฌ์ด๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค [2, 12]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `develop`, `release`, `hotfix` ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Git Flow๋ฅผ ์ดํ•ดํ•จ์œผ๋กœ์จ, ์ƒ๋Œ€์ ์œผ๋กœ GitHub Flow๊ฐ€ ์ƒ๋žตํ•œ ๊ตฌ์กฐ์  ๋ณต์žก์„ฑ๊ณผ ๊ทธ์— ๋”ฐ๋ฅธ ์†๋„/๋‹จ์ˆœ์„ฑ์˜ ์ด์ ์„ ๋ช…ํ™•ํžˆ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - Trunk-Based Development - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ๋น ๋ฅด๊ณ  ์ถฉ๋Œ ์—†๋Š” ๋ณ‘ํ•ฉ์„ ์œ„ํ•ด ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ๋Ÿ‰ ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค [3, 16]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ทน๋‹จ์ ์œผ๋กœ ์งง์€ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”์ธ์— ๋นˆ๋ฒˆํžˆ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜๋Š” ์ฒ ํ•™์„ ํ†ตํ•ด CI(์ง€์†์  ํ†ตํ•ฉ)์˜ ๋ณธ์งˆ์„ ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[แ„‘แ…ฎแ†ฏ แ„…แ…ตแ„แ…ฐแ„‰แ…ณแ„แ…ณ (Pull Request)|Pull Request]] - ์—ฐ๊ฒฐ ์ด์œ : GitHub Flow์—์„œ ์ฝ”๋“œ ๋ณ‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํŒ€์› ๊ฐ„์˜ ํ˜‘์—… ๋ฐ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค [8, 10]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ํ’ˆ์งˆ ํ†ต์ œ, ํ”ผ์–ด ๋ฆฌ๋ทฐ(Peer Review)์˜ ์—ญํ•  ๋ฐ CI/CD ํ›…(Hook)์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - [[CI_CD|CI/CD]] - ์—ฐ๊ฒฐ ์ด์œ : `main` ๋ธŒ๋žœ์น˜๋ฅผ ํ•ญ์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํ›„์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ•„์ˆ˜ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค [1, 6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™œ ์ˆ˜๋™ ๋ณ‘ํ•ฉ์ด ์œ„ํ—˜ํ•œ์ง€, PR ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœ๋•์…˜ ๋ ˆ๋ฒจ๊นŒ์ง€ ๋ฐฐํฌ๋˜๋Š”์ง€์˜ ์ „ ๊ณผ์ •์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Deeper Research Questions - Git Flow ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์—์„œ GitHub Flow๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ, ๊ธฐ์กด์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฒด๊ณ„ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์„ ์–ด๋–ป๊ฒŒ ์žฌ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - GitHub Flow ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋Šฅ์ด ๋ฏธ์™„์„ฑ๋œ ์ƒํƒœ๋กœ `main`์— ๋ณ‘ํ•ฉ๋˜์–ด์•ผ ํ•  ๋•Œ, Feature Flag(๊ธฐ๋Šฅ ํ† ๊ธ€)๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ํŒ€ ๊ทœ๋ชจ๊ฐ€ 3~5์ธ์—์„œ 20์ธ ์ด์ƒ์œผ๋กœ ๊ธ‰๊ฒฉํžˆ ์„ฑ์žฅํ•  ๋•Œ, GitHub Flow์˜ ํ•œ๊ณ„์ ์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ ์–ด๋–ค ์‹œ์ ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒ์žฅ๋˜๋Š” Squash Merge ๋ฐฉ์‹์ด ์žฅ๊ธฐ์ ์ธ ๋ฒ„๊ทธ ์ถ”์ ์„ฑ(Traceability) ๊ด€์ ์—์„œ๋Š” ์–ด๋–ค ๋‹จ์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๊ฐ€? - Branch Protection์„ ํ†ตํ•ด '์ตœ์†Œ 1์ธ์˜ ๋ฆฌ๋ทฐ'์™€ 'CI ํ†ต๊ณผ'๋ฅผ ๊ฐ•์ œํ•  ๋•Œ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์  ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ๊ฐœ๋ฐœ์ž๋Š” JIRA ๋“ฑ์—์„œ ํ• ๋‹น๋ฐ›์€ ํ‹ฐ์ผ“ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ `feature/PROJ-123-login` ํ˜•์‹์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋”ฐ๊ณ , ํ•œ ๊ฐ€์ง€ ๋…ผ๋ฆฌ์  ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋‹ด์€ Atomic Commit์„ ์ˆ˜ํ–‰ํ•œ ๋’ค PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - **System Design:** GitHub/GitLab ๋“ฑ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์—์„œ `main` ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด ์ง์ ‘ ํ‘ธ์‹œ(Direct Push)๋ฅผ ์ฐจ๋‹จํ•˜๊ณ , Status Check(ํ…Œ์ŠคํŠธ ํ†ต๊ณผ) ๋ฐ ์ง€์ •๋œ ๋ฆฌ๋ทฐ์–ด์˜ Approve๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ณดํ˜ธ ๊ทœ์น™(Branch Protection)์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. - **Operation / Maintenance:** CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด `main` ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ณ , ์ €์žฅ์†Œ์˜ ๊น”๋”ํ•œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ‘ํ•ฉ๋œ ๋ธŒ๋žœ์น˜๋Š” ์‹œ์Šคํ…œ์—์„œ ์ž๋™ ์‚ญ์ œ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. - **Learning Path:** Git ๋ธŒ๋žœ์น˜ ๊ธฐ์ดˆ ๋ช…๋ น์–ด ์ˆ™์ง€ -> 1๊ธฐ๋Šฅ 1๋ธŒ๋žœ์น˜ ์›์น™ ์‹ค์Šต -> PR ์ž‘์„ฑ ๋ฐ ๋™๋ฃŒ ๋ฆฌ๋ทฐ ๊ฒฝํ—˜ -> ์ž๋™ํ™”๋œ CI/CD์™€์˜ ์—ฐ๋™ ์ดํ•ด์˜ ์ˆœ์„œ๋กœ ํ˜‘์—… ๋Šฅ๋ ฅ์„ ์„ฑ์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **My Project Relevance:** 3~5๋ช…์˜ ์†Œ๊ทœ๋ชจ ํŒ€์—์„œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ๊ณผ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์—, ๋ถˆํ•„์š”ํ•œ ์ ˆ์ฐจ๋ฅผ ์—†์• ๊ณ  ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ํ˜‘์—… ๋ชจ๋ธ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Adjacent Topics - Conventional Commits - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ `feat:`, `fix:`, `chore:` ๋“ฑ์˜ ๊ทœ๊ฒฉ์œผ๋กœ ํ†ต์ผํ•จ์œผ๋กœ์จ, PR ๋‚ด์šฉ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง€์‹์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - Issue Tracking System - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ฝ”๋“œ ๊ตฌํ˜„(GitHub)๊ณผ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜(JIRA, Linear ๋“ฑ)๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์ˆ˜์ค€์„ ๋†’์ด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ(Traceability)์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-04-30*