--- id: P-REINFORCE-AUTO-D0626D category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - lint-staged" --- # [[lint-staged]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > `lint-staged`λŠ” Git의 컀밋 μ „ 단계(pre-commit)μ—μ„œ μŠ€ν…Œμ΄μ§•λœ(staged) νŒŒμΌλ“€μ— λŒ€ν•΄μ„œλ§Œ λ¦°ν„°(Linter)λ‚˜ 포맀터(Formatter) λ“±μ˜ νŠΉμ • λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€ [1, 2]. 전체 μ½”λ“œλ² μ΄μŠ€ λŒ€μ‹  λ³€κ²½λœ 파일만 κ²€μ‚¬ν•˜λ―€λ‘œ μ‹€ν–‰ μ‹œκ°„μ„ λŒ€ν­ λ‹¨μΆ•μ‹œμΌœ μ€λ‹ˆλ‹€ [2, 3]. 주둜 Husky와 같은 Git ν›…(Hook) 관리 도ꡬ와 ν•¨κ»˜ μ‚¬μš©λ˜μ–΄, 컀밋 전에 μ½”λ“œμ˜ ν’ˆμ§ˆμ„ κ²€μ‚¬ν•˜κ³  문제λ₯Ό μžλ™μœΌλ‘œ μˆ˜μ •ν•˜μ—¬ 였λ₯˜ μ—†λŠ” κΉ”λ”ν•œ μ½”λ“œλ§Œ μ €μž₯μ†Œμ— λ°˜μ˜λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€ [4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **핡심 κΈ°λŠ₯ 및 μž‘λ™ 방식:** * `lint-staged`의 μ£Όμš” 역할은 μŠ€ν…Œμ΄μ§•λœ 파일 집합을 가져와 μ§€μ •λœ glob νŒ¨ν„΄κ³Ό λŒ€μ‘°ν•œ ν›„, μΌμΉ˜ν•˜λŠ” νŒŒμΌμ— λŒ€ν•΄μ„œλ§Œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [6]. * 기본적으둜 μˆ˜μ •λœ 파일의 μ ˆλŒ€ 경둜λ₯Ό μž‘μ—…(task)에 μ „λ‹¬ν•˜λ©°, μž‘μ—…μ„ 병렬(concurrently)둜 μ‹€ν–‰ν•©λ‹ˆλ‹€ [7, 8]. * μ½”λ“œλ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄ μž‘μ—…μ„ μ‹€ν–‰ν•˜κΈ° μ „ λ°±μ—… μŠ€νƒœμ‹œ(stash)λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€ [9]. μž‘μ—…(예: μžλ™ μˆ˜μ •)이 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄ μˆ˜μ •λœ λ‚΄μš©μ„ μžλ™μœΌλ‘œ λ‹€μ‹œ μŠ€ν…Œμ΄μ§•(re-stages) μ²˜λ¦¬ν•˜λ―€λ‘œ, λͺ…령어에 `git add`λ₯Ό μˆ˜λ™μœΌλ‘œ μΆ”κ°€ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€ [9, 10]. * **μ„€μ • 및 파일 λ§€μΉ­:** * `package.json`, `.lintstagedrc`, λ˜λŠ” μ „μš© μžλ°”μŠ€ν¬λ¦½νŠΈ μ„€μ • 파일(`.js`, `.mjs`, `.cjs` λ“±)을 톡해 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11]. * glob λ§€μΉ­μ—λŠ” `micromatch`λ₯Ό μ‚¬μš©ν•˜λ©°, μŠ¬λž˜μ‹œκ°€ μ—†λŠ” νŒ¨ν„΄μ€ μœ„μΉ˜μ— 상관없이 파일λͺ…κ³Ό 맀칭되고 μŠ¬λž˜μ‹œκ°€ ν¬ν•¨λœ νŒ¨ν„΄μ€ 경둜 맀칭이 μ μš©λ©λ‹ˆλ‹€ [7]. * 단일 파일 μ„ΈνŠΈμ— λŒ€ν•΄ μ—¬λŸ¬ λͺ…λ Ήμ–΄(예: `eslint --fix` μ‹€ν–‰ ν›„ `prettier --write` μ‹€ν–‰)λ₯Ό 순차적으둜 μ‹€ν–‰ν•˜λ €λ©΄ μ„€μ •μ—μ„œ λ°°μ—΄(array) ꡬ문을 μ‚¬μš©ν•˜μ—¬, μ—¬λŸ¬ λͺ…λ Ήμ–΄κ°€ λ™μ‹œμ— λ™μΌν•œ νŒŒμΌμ„ μˆ˜μ •ν•˜μ—¬ λ°œμƒν•˜λŠ” 경쟁 μƒνƒœ(Race condition)λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 12]. * **κ³ κΈ‰ μ„€μ • 및 λͺ¨λ…Έλ ˆν¬(Monorepo) 적용:** * κΈ°λ³Έ glob-to-command 맀핑이 μΆ©λΆ„ν•˜μ§€ μ•Šμ€ 경우, λ™μ μœΌλ‘œ λͺ…λ Ήμ–΄λ₯Ό κ΅¬μ„±ν•˜κ±°λ‚˜ 파일 λͺ©λ‘μ„ 필터링할 수 μžˆλŠ” ν•¨μˆ˜ 기반(Function-based) 섀정을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [13]. * λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ— λŒ€ν•œ 곡식적인 ꢌμž₯ 사항은 μ €μž₯μ†Œ λ£¨νŠΈμ— `lint-staged`λ₯Ό μ„€μΉ˜ν•˜κ³ , κ·œμΉ™μ΄ λ‹€λ₯΄κ²Œ μ μš©λ˜μ–΄μ•Ό ν•˜λŠ” νŒ¨ν‚€μ§€λ§ˆλ‹€ λ³„λ„μ˜ μ„€μ • νŒŒμΌμ„ λ‘λŠ” κ²ƒμž…λ‹ˆλ‹€ [14]. `lint-staged`λŠ” μŠ€ν…Œμ΄μ§•λœ 파일과 κ°€μž₯ κ°€κΉŒμš΄ μ„€μ • νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ λ…λ¦½μ μœΌλ‘œ 격리된 κ·œμΉ™μ„ μ μš©ν•©λ‹ˆλ‹€ [14]. * Turborepo와 같은 ν™˜κ²½μ—μ„œλŠ” 루트의 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜(orchestration) 섀정을 톡해, νŠΉμ • 파일 νŒ¨ν„΄μ„ 각 νŒ¨ν‚€μ§€μ˜ λ¦°νŒ… κ·œμΉ™κ³Ό λ§€ν•‘ν•˜μ—¬ μž‘μ—… νš¨μœ¨μ„ 높이고 캐싱 κΈ°λŠ₯을 κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [15-17]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Husky]], [[ESLint]], [[Prettier]], [[Git Hooks]] - **Projects/Contexts:** [[CI/CD νŒŒμ΄ν”„λΌμΈ μžλ™ν™”]], [[λͺ¨λ…Έλ ˆν¬(Monorepo) μ•„ν‚€ν…μ²˜ μ„€μ •]], [[Turborepo ν™˜κ²½ ꡬ성]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ `lint-staged`의 λͺ…λ Ήμ–΄ λͺ©λ‘μ— `git add`λ₯Ό μˆ˜λ™μœΌλ‘œ ν¬ν•¨ν•˜λŠ” 것은 ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€. v10 μ΄ν›„λΆ€ν„°λŠ” μ—¬λŸ¬ μž‘μ—…μ΄ λ™μΌν•œ νŒŒμΌμ„ νŽΈμ§‘ν•  λ•Œ λ°œμƒν•˜λŠ” 경쟁 μƒνƒœλ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 도ꡬ μžμ²΄κ°€ μˆ˜μ • 사항을 μžλ™μœΌλ‘œ μŠ€ν…Œμ΄μ§• μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [9, 18]. λ˜ν•œ, 전체 ν”„λ‘œμ νŠΈλ₯Ό κ²€μ‚¬ν•˜λ„λ‘ μ„€κ³„λœ 도ꡬ(예: `ng lint` λ˜λŠ” `tsc --noEmit`)λ₯Ό `lint-staged`λ₯Ό 톡해 μ‹€ν–‰ν•˜λŠ” 것은 ꡬ쑰적으둜 λ§žμ§€ μ•ŠμœΌλ©° μ§€μ–‘ν•΄μ•Ό ν•œλ‹€κ³  λͺ…μ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ [13, 18]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/lint-staged.md]] ---