--- id: P-REINFORCE-AUTO-C861C6 category: "10_Wiki/๐Ÿ’ก Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - CI_CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ Git ํ›…(Hooks)" --- # [[CI_CD แ„‘แ…กแ„‹แ…ตแ„‘แ…ณแ„…แ…กแ„‹แ…ตแ†ซ แ„แ…ฉแ†ผแ„’แ…กแ†ธ แ„†แ…ตแ†พ Git แ„’แ…ฎแ†จ(Hooks)|CI_CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ Git ํ›…(Hooks)]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ Git ํ›…(Hooks)์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ €์žฅ์†Œ์— ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ๋ฐฐํฌ๋˜๊ธฐ ์ „์— ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ๋ณด์•ˆ์„ ์ž๋™์œผ๋กœ ๊ฒ€์ฆํ•˜๋Š” ํ•„์ˆ˜ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” Husky์™€ lint-staged ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ Git ํ›…์„ ํ†ตํ•ด ์ปค๋ฐ‹ ์ „ ๋‹จ๊ณ„์—์„œ ์ •์  ๋ถ„์„๊ณผ ํฌ๋งคํŒ…์„ ๊ฐ•์ œํ•˜์—ฌ 1์ฐจ์ ์ธ ๊ฒฐํ•จ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์„œ๋ฒ„์™€ ์—ฐ๋™๋˜์–ด ์šฐํšŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ, ๋ณด์•ˆ ์Šค์บ”(SAST), ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ๋ฅผ ๊ฑฐ์ณ ์ตœ์ข…์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ  ์ผ๊ด€๋œ ์ฝ”๋“œ๋งŒ ๋ฐฐํฌ๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **Git ํ›…(Hooks)์˜ ๊ฐœ๋… ๋ฐ ํ•œ๊ณ„ ํ•ด๊ฒฐ:** Git ํ›…์€ `pre-commit`, `commit-msg`, `pre-push`, `post-merge` ๋“ฑ Git ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํŠน์ • ์‹œ์ ์— ์‹คํ–‰๋˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค [1]. ๊ธฐ๋ณธ์ ์œผ๋กœ Git ํ›…์€ `.git/hooks/` ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•˜์—ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ(๋ฒ„์ „ ์ปจํŠธ๋กค) ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜๋ฏ€๋กœ, ํŒ€์› ๊ฐ„์˜ ๊ณต์œ ๋‚˜ CI ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐ•์ œ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **Husky**์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ›… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”์  ๊ฐ€๋Šฅํ•œ ๋””๋ ‰ํ† ๋ฆฌ(์˜ˆ: `.husky/`)์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋ชจ๋“  ํŒ€์›๊ณผ ํ™˜๊ฒฝ์— ๋™์ผํ•œ Git ํ›…์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2-4]. * **lint-staged๋ฅผ ํ†ตํ•œ ๊ฒ€์‚ฌ ํšจ์œจํ™”:** ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์— ๋Œ€ํ•ด ๋งค๋ฒˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `pre-commit` ํ›… ๋‚ด์—์„œ **lint-staged** ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [2, 5]. lint-staged๋Š” ์ปค๋ฐ‹์„ ์œ„ํ•ด Git์˜ 'staged' ์ƒํƒœ์— ์˜ฌ๋ผ๊ฐ„(์ฆ‰, ๋ณ€๊ฒฝ๋œ) ํŒŒ์ผ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ESLint๋‚˜ Prettier ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค [2, 6]. ์ด๋กœ์จ ๊ฒ€์‚ฌ ์‹œ๊ฐ„์„ ์ˆ˜ ์ดˆ ๋‚ด๋กœ ๋‹จ์ถ•ํ•˜๋ฉด์„œ๋„ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋‚˜ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์œ„๋ฐ˜ ํŒŒ์ผ์ด ์ปค๋ฐ‹๋˜๋Š” ๊ฒƒ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2, 7]. * **์•ˆ์ „๋ง(Safety Net)์œผ๋กœ์„œ์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ:** ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์„ค์ •๋œ Git ํ›…์€ `--no-verify` ๋“ฑ์˜ ์˜ต์…˜์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜๋กœ ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒ(Bypass)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 9]. ๋”ฐ๋ผ์„œ ๋กœ์ปฌ ํ›…์€ ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ์„ ์œ„ํ•œ ๋น ๋ฅธ ๋„๊ตฌ๋กœ ํ™œ์šฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ตœ์ข…์ ์ธ ๊ถŒํ•œ๊ณผ ์•ˆ์ „๋ง์€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด ๋‹ด๋‹นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [9, 10]. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ๋Š” ํ›…์„ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ์—์„œ ์ „์ฒด ๋ฆฐํŒ…, ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํ–‰, ํƒ€์ž… ๊ฒ€์‚ฌ, ๋นŒ๋“œ ๊ฒ€์ฆ ๋“ฑ์„ ์ฒ ์ €ํ•˜๊ฒŒ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค [10-12]. * **์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ(SAST) ๋ฐ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์—ฐ๋™:** ์ฝ”๋“œ ์Šค์บ” ๋„๊ตฌ(์˜ˆ: Snyk, SonarQube, Corgea, Veracode ๋“ฑ)๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR) ์›Œํฌํ”Œ๋กœ์šฐ์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [13-15]. PR์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ํ‘ธ์‹œ๋˜๋ฉด ์ž๋™์œผ๋กœ ์Šค์บ”์ด ํŠธ๋ฆฌ๊ฑฐ๋˜์–ด ์ทจ์•ฝ์ ์ด๋‚˜ ๋…ผ๋ฆฌ์  ๊ฒฐํ•จ์„ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค(Shift-Left) [15, 16]. ๋ฐœ๊ฒฌ๋œ ๋ฌธ์ œ์˜ ์‹ฌ๊ฐ๋„(Severity)์— ๋”ฐ๋ผ ๋นŒ๋“œ๋ฅผ ์‹คํŒจํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ PR ๋ณ‘ํ•ฉ์„ ์ฐจ๋‹จํ•˜๋Š” 'ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ(Quality Gates)'๋ฅผ ์„ค์ •ํ•จ์œผ๋กœ์จ, ๋ณด์•ˆ ์œ„ํ—˜๊ณผ ๊ฒฐํ•จ์ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์—์„œ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [17-19]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Git Hooks|Git Hooks]], [[Husky|Husky]], [[lint-staged|lint-staged]], [[SAST (Static Application Security Testing)|SAST (Static Application Security Testing)]], [[ESLint|ESLint]], [[Prettier|Prettier]] - **Projects/Contexts:** [[แ„‹แ…กแ†ซแ„Œแ…ฅแ†ซแ„’แ…กแ†ซ แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅ แ„€แ…ขแ„‡แ…กแ†ฏ แ„‰แ…ฎแ„†แ…งแ†ผแ„Œแ…ฎแ„€แ…ต(SSDLC)|์•ˆ์ „ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ˆ˜๋ช…์ฃผ๊ธฐ(SSDLC)]], [[แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„†แ…ตแ†พ แ„†แ…ฉแ„‚แ…ฉแ„…แ…ฆแ„‘แ…ฉ(Monorepo) แ„€แ…ขแ„‡แ…กแ†ฏ แ„’แ…ชแ†ซแ„€แ…งแ†ผ แ„‰แ…ฅแ†ฏแ„Œแ…ฅแ†ผ|ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •]], [[แ„‘แ…ฎแ†ฏ แ„…แ…ตแ„แ…ฐแ„‰แ…ณแ„แ…ณ(PR) แ„€แ…ตแ„‡แ…กแ†ซ แ„‡แ…ฉแ„‹แ…กแ†ซ แ„€แ…ฅแ†ทแ„แ…ฉ|ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR) ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ฒ€ํ† ]] - **Contradictions/Notes:** ๋กœ์ปฌ Git ํ›…(pre-commit ๋“ฑ)์€ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์—ฌ CI ์‹คํŒจ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž„์˜๋กœ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ˆ๋Œ€ CI/CD ๊ฒ€์ฆ์„ ๋Œ€์ฒดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค [9, 10]. ๋˜ํ•œ, lint-staged๋Š” ๋ณ€๊ฒฝ๋œ ํŠน์ • ํŒŒ์ผ์—๋งŒ ๊ตญํ•œ๋œ ์ž‘์—…(์˜ˆ: ํฌ๋งคํŒ…, ๋ฆฐํŒ…)์—๋Š” ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋„๊ตฌ(์˜ˆ: ์ „์ฒด ํƒ€์ž… ์ฒดํฌ)์˜ ๋ž˜ํผ(wrapper)๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค [6, 20]. --- *Last updated: 2026-04-18* - Raw Source: 00_Raw/2026-04-20/CI_CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋ฐ Git ํ›…(Hooks).md ---