--- id: P-REINFORCE-AUTO-9068BA category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Husky" --- # [[Husky]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > HuskyλŠ” 개발 ν”„λ‘œμ νŠΈμ—μ„œ Git ν›…(Git hooks)을 μ‰½κ²Œ μ„€μ •, 관리 및 νŒ€μ›λ“€κ³Ό κ³΅μœ ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ„κ΅¬μž…λ‹ˆλ‹€ [1]. 기본적으둜 버전 관리 λŒ€μƒμ΄ μ•„λ‹Œ Git ν›…μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜μ—¬ `.husky/`와 같은 좔적 κ°€λŠ₯ν•œ 디렉토리λ₯Ό 톡해 ν›… 슀크립트λ₯Ό κ΄€λ¦¬ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€ [1, 2]. 주둜 `lint-staged`와 κ²°ν•©ν•˜μ—¬ μ»€λ°‹μ΄λ‚˜ ν‘Έμ‹œ 전에 μžλ™μœΌλ‘œ μ½”λ“œ λ¦°νŒ…(linting) 및 ν¬λ§·νŒ…μ„ μˆ˜ν–‰ν•˜μ—¬ μ½”λ“œ ν’ˆμ§ˆμ„ κ°•μ œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€ [3, 4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **Git ν›…μ˜ ν•œκ³„ 극볡 및 ꡬ동 원리:** Git의 κΈ°λ³Έ 훅은 `.git/hooks/` 디렉토리에 μ €μž₯λ˜μ–΄ 버전 관리 도ꡬ에 μ˜ν•΄ μΆ”μ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이둜 인해 μƒˆλ‘œμš΄ νŒ€μ›μ΄ ν”„λ‘œμ νŠΈλ₯Ό 클둠할 λ•Œ 훅이 μžλ™μœΌλ‘œ μ„€μ •λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€ [1]. HuskyλŠ” Git의 `core.hooksPath` 속성을 μ‚¬μš©ν•˜μ—¬ 좔적 κ°€λŠ₯ν•œ 디렉토리(예: `.husky/`)에 μ‹€μ œ ν›… 파일(μ…Έ 슀크립트)을 μƒμ„±ν•˜κ³  κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ 이 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€ [1, 2]. * **μ„€μΉ˜ 및 μžλ™ν™” μ„€μ •:** `npx husky init` (λ˜λŠ” `husky-init`) λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— `.husky` 폴더가 μƒμ„±λ˜κ³  `package.json`에 `prepare` μŠ€ν¬λ¦½νŠΈκ°€ μΆ”κ°€λ©λ‹ˆλ‹€ [5-7]. 이 `prepare` μŠ€ν¬λ¦½νŠΈλŠ” νŒ€μ›λ“€μ΄ λ‘œμ»¬μ—μ„œ `npm install`을 μ‹€ν–‰ν•  λ•Œ Husky 훅이 μžλ™μœΌλ‘œ μ„€μΉ˜λ˜λ„λ‘ 보μž₯ν•˜μ—¬ λͺ¨λ“  νŒ€μ›μ΄ λ™μΌν•œ 검사 ν™˜κ²½μ„ κ°–μΆ”κ²Œ ν•©λ‹ˆλ‹€ [5-7]. * **lint-stagedμ™€μ˜ κ²°ν•©:** 전체 ν”„λ‘œμ νŠΈ μ½”λ“œλ₯Ό 맀번 κ²€μ‚¬ν•˜λŠ” 것은 λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ˜λ―€λ‘œ, Husky의 `pre-commit` ν›… λ‚΄λΆ€μ—μ„œ `lint-staged`λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식이 ν˜„λŒ€μ μΈ ν‘œμ€€ μ„€μ •μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€ [1, 8, 9]. 이 쑰합을 톡해 컀밋을 μœ„ν•΄ μŠ€ν…Œμ΄μ§•λœ(staged) νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ ESLintλ‚˜ Prettierλ₯Ό μ‹€ν–‰ν•¨μœΌλ‘œμ¨ 1~2초 내에 검사λ₯Ό μ™„λ£Œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 9]. * **검사 우회(Bypass) 및 ν™˜κ²½ μ„€μ •:** 개발 κ³Όμ •μ—μ„œ λ―Έμ™„μ„± μ½”λ“œλ₯Ό 컀밋해야 ν•˜λŠ” λ“± ν›… 싀행을 κ±΄λ„ˆλ›°μ–΄μ•Ό ν•  λ•ŒλŠ” Git의 κΈ°λ³Έ κΈ°λŠ₯인 `--no-verify` ν”Œλž˜κ·Έ(예: `git commit --no-verify`)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. λ˜ν•œ CI μ„œλ²„λ‚˜ ν”„λ‘œλ•μ…˜ ν™˜κ²½ λ“± ν›… μ„€μΉ˜ 및 싀행이 ν•„μš” μ—†λŠ” 경우, `HUSKY=0` ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ Huskyλ₯Ό μ™„μ „νžˆ λΉ„ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [12]. * **μ˜ˆμ™Έ 상황 및 νŠΈλŸ¬λΈ”μŠˆνŒ…:** * **GUI 및 버전 κ΄€λ¦¬μž 이슈:** SourceTreeλ‚˜ VS Code 같은 Git GUI λ„κ΅¬λ‚˜ Node 버전 κ΄€λ¦¬μž(nvm, fnm λ“±)λ₯Ό μ‚¬μš©ν•  λ•Œ `PATH`κ°€ μ œλŒ€λ‘œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ•„ ν›…μ—μ„œ λͺ…λ Ήμ–΄λ₯Ό 찾을 수 μ—†λŠ” 였λ₯˜(`command not found`)κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. HuskyλŠ” 각 훅을 μ‹€ν–‰ν•˜κΈ° 전에 `~/.config/husky/init.sh`λ₯Ό μ†Œμ‹±(source)ν•˜μ—¬ 이 문제λ₯Ό μš°νšŒν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€ [13, 14]. * **μ„œλΈŒλͺ¨λ“ˆ 및 쀑첩 νŒ¨ν‚€μ§€:** λͺ¨λ…Έλ ˆν¬λ‚˜ μ„œλΈŒλͺ¨λ“ˆ(Submodules) κ΅¬μ‘°μ—μ„œλŠ” μ΅œμƒμœ„ λ£¨νŠΈκ°€ μ•„λ‹Œ ν•˜μœ„ 디렉토리에 νŒ¨ν‚€μ§€κ°€ μœ„μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Git은 기본적으둜 리포지토리 λ£¨νŠΈμ—μ„œ 훅을 μ‹€ν–‰ν•˜λ―€λ‘œ, 이런 경우 `prepare` 슀크립트 λ‚΄μ—μ„œ 경둜λ₯Ό μ΄λ™ν•˜κ±°λ‚˜(cd) μ„œλΈŒλͺ¨λ“ˆμ˜ μ»¨ν…μŠ€νŠΈ 내에 Huskyλ₯Ό κ°œλ³„μ μœΌλ‘œ μ„€μΉ˜ν•˜μ—¬ λ™μž‘ν•˜λ„λ‘ ꡬ성해야 ν•©λ‹ˆλ‹€ [14, 15]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Git Hooks]], [[lint-staged]], [[ESLint]], [[Prettier]] - **Projects/Contexts:** [[CI/CD Pipeline]], [[Monorepo]], [[Submodules]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄, λ§Žμ€ κ°œλ°œμžκ°€ Husky와 `lint-staged`λ₯Ό ν˜Όλ™ν•˜μ—¬ ν•˜λ‚˜μ˜ λ©μ–΄λ¦¬λ‘œ μƒκ°ν•˜κ³€ ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 두 λ„κ΅¬λŠ” λͺ…ν™•νžˆ κ΅¬λΆ„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. HuskyλŠ” λ‹¨μˆœνžˆ Git의 κΈ°λ³Έ 훅을 κ΄€λ¦¬ν•˜κ³  μ—°κ²°ν•˜λŠ” 'λ°°μ„ (hook wiring)' 역할을 ν•  뿐 μž‘μ—… μ‹€ν–‰κΈ°(task runner)κ°€ μ•„λ‹ˆλ©°, μ‹€μ œ λ³€κ²½λœ 파일 λ‹¨μœ„λ‘œ μž‘μ—…μ„ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ ν•˜λŠ” 것은 `lint-staged`의 μ—­ν• μž…λ‹ˆλ‹€ [2, 4, 16]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/Husky.md]] ---