---
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]]
---
