--- 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)]] ## πŸ“Œ ν•œ 쀄 톡찰 (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]], [[Husky]], [[lint-staged]], [[SAST (Static Application Security Testing)]], [[ESLint]], [[Prettier]] - **Projects/Contexts:** [[μ•ˆμ „ν•œ μ†Œν”„νŠΈμ›¨μ–΄ 개발 수λͺ…μ£ΌκΈ°(SSDLC)]], [[ν”„λ‘ νŠΈμ—”λ“œ 및 λͺ¨λ…Έλ ˆν¬(Monorepo) 개발 ν™˜κ²½ μ„€μ •]], [[ν’€ λ¦¬ν€˜μŠ€νŠΈ(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]] ---