--- id: [[P-Reinforce|P-Reinforce]]-AUTO-26C070 category: "10_Wiki/๐Ÿ’ก Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Git Pre-commit ํ›…์„ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”" --- # [[Git Pre-commit แ„’แ…ฎแ†จแ„‹แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ†ซ แ„€แ…ขแ„‡แ…กแ†ฏ แ„‹แ…ฏแ„แ…ณแ„‘แ…ณแ†ฏแ„…แ…ฉแ„‹แ…ฎ แ„Œแ…กแ„ƒแ…ฉแ†ผแ„’แ…ช|Git Pre-commit ํ›…์„ ํ™œ์šฉํ•œ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Git Pre-commit ํ›…์€ ์ปค๋ฐ‹์ด ์ฝ”๋“œ ์ €์žฅ์†Œ์— ๊ธฐ๋ก๋˜๊ธฐ ์ง์ „์— ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค [1]. ๊ฐœ๋ฐœ ํŒ€์€ ์ฃผ๋กœ [[Husky|Husky]]์™€ [[lint-staged|lint-staged]] ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์—ฌ, ์ปค๋ฐ‹ ๋Œ€์ƒ ํŒŒ์ผ(staged files)์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฆฐํŠธ(Lint) ๊ฒ€์‚ฌ์™€ ์ฝ”๋“œ ํฌ๋งทํŒ…์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค [2, 3]. ์ด๋ฅผ ํ†ตํ•ด ๋ฌธ๋ฒ•์  ๊ฒฐํ•จ์ด ์žˆ๊ฑฐ๋‚˜ ํŒ€์˜ ์ปจ๋ฒค์…˜์— ๋งž์ง€ ์•Š๋Š” ์ฝ”๋“œ๊ฐ€ ์ €์žฅ์†Œ์— ์œ ์ž…๋˜๋Š” ๊ฒƒ์„ ์‚ฌ์ „์— ์ฐจ๋‹จํ•˜๊ณ , ์ผ๊ด€๋œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค [3, 4]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **Git ํ›…๊ณผ Pre-commit์˜ ์—ญํ• :** Git ํ›…์€ ์ปค๋ฐ‹ ์ƒ์„ฑ ์ „(`pre-commit`), ํ‘ธ์‹œ ์ „(`pre-push`) ๋“ฑ Git ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํŠน์ • ์ด๋ฒคํŠธ ์‹œ์ ์— ์‹คํ–‰๋˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค [1]. ๊ทธ์ค‘์—์„œ๋„ `pre-commit` ํ›…์€ ์ฝ”๋“œ๊ฐ€ ์ฝ”๋“œ ์ €์žฅ์†Œ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์˜ ์ตœํ›„์˜ ๋ฐฉ์–ด์„  ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋น ๋ฅธ ํฌ๋งทํŒ…์ด๋‚˜ ๋ฆฐํŒ…์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค [1, 5]. * **Husky๋ฅผ ํ†ตํ•œ ํ›… ๊ด€๋ฆฌ:** ๊ธฐ๋ณธ์ ์œผ๋กœ Git ํ›…์€ `.git/hooks/` ํด๋”์— ๋กœ์ปฌ๋กœ ์กด์žฌํ•˜๊ณ  ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํŒ€์›์ด๋‚˜ CI ํ™˜๊ฒฝ์— ์ž๋™์œผ๋กœ ๊ณต์œ ๋˜์ง€ ์•Š๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค [2]. Husky๋Š” ํ›… ์Šคํฌ๋ฆฝํŠธ๋ฅผ `.husky/`์™€ ๊ฐ™์ด ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , Git์˜ `core.hooksPath`๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค [2, 6]. `package.json`์˜ `prepare` ์Šคํฌ๋ฆฝํŠธ ์„ค์ •์„ ํ†ตํ•ด ํŒ€์›์ด `npm install`์„ ์‹คํ–‰ํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ›…์ด ์—ฐ๋™๋˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [7, 8]. * **lint-staged๋ฅผ ํ†ตํ•œ ์„ฑ๋Šฅ ๋ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”:** ์ปค๋ฐ‹์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ˆ˜๋งŽ์€ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ ์ „์ฒด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด [[ESLint|ESLint]]๋‚˜ [[Prettier|Prettier]]๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ์ €ํ•˜์‹œํ‚จ๋‹ค [2, 5]. `lint-staged`๋Š” ์˜ค์ง ๋ณ€๊ฒฝ๋˜์–ด Git์˜ ์Šคํ…Œ์ด์ง• ์˜์—ญ(staged files)์— ์˜ฌ๋ผ๊ฐ„ ํŒŒ์ผ๋“ค๋งŒ ํ•„ํ„ฐ๋งํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ผ์šฐํ„ฐ ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ, ๊ฒ€์‚ฌ ์‹œ๊ฐ„์„ ๋‹จ ๋ช‡ ์ดˆ ์ด๋‚ด๋กœ ๋Œ€ํญ ์ค„์—ฌ์ค€๋‹ค [2, 9, 10]. * **์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ํ†ตํ•ฉ ๋™์ž‘ ๋ฐฉ์‹:** `pre-commit` ํ›…์—์„œ `lint-staged`๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด, ์ปค๋ฐ‹์„ ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ESLint๋ฅผ ํ†ตํ•œ ์˜ค๋ฅ˜ ๊ฒ€์ถœ(๋ฐ `--fix`๋ฅผ ํ†ตํ•œ ์ž๋™ ์ˆ˜์ •)๊ณผ Prettier๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง„๋‹ค [7, 11]. `lint-staged`๋Š” ํฌ๋งทํŒ…์œผ๋กœ ์ธํ•ด ์ˆ˜์ •๋œ ํŒŒ์ผ๋“ค์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•  ํ•„์š” ์—†์ด ์•Œ์•„์„œ ๋‹ค์‹œ ์Šคํ…Œ์ด์ง• ์ฒ˜๋ฆฌํ•œ๋‹ค [7, 10]. ๋งŒ์•ฝ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋‚˜ ๊ทœ์น™ ์œ„๋ฐ˜์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉฐ ์ปค๋ฐ‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฆ‰์‹œ ์ค‘๋‹จ๋œ๋‹ค [12]. * **๋กœ์ปฌ ์ž๋™ํ™”์™€ CI(์ง€์†์  ํ†ตํ•ฉ)์˜ ๊ด€๊ณ„:** ๊ฐœ๋ฐœ์ž๋Š” ๊ธ‰ํ•˜๊ฑฐ๋‚˜ ํ›…์ด ๊ณ ์žฅ ๋‚œ ๊ฒฝ์šฐ `--no-verify` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `HUSKY=0` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋กœ์ปฌ ํ›… ์‹คํ–‰์„ ์šฐํšŒ(Bypass)ํ•  ์ˆ˜ ์žˆ๋‹ค [13-15]. ๋”ฐ๋ผ์„œ Git ํ›…์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์ผ ๋ฟ์ด๋ฉฐ, ์ตœ์ข…์ ์ธ ์ฝ”๋“œ ๊ฐ•์ œ ์ง‘ํ–‰๊ณผ ์™„๋ฒฝํ•œ ๋ณด์žฅ์„ ์œ„ํ•ด์„œ๋Š” CI ์„œ๋ฒ„์—์„œ ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์‚ฌ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ณ‘ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค [14, 16, 17]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Husky|Husky]], lint-staged, ESLint, [[Prettier|Prettier]], [[Continuous Integration (CI)|Continuous Integration (CI]] - **Projects/Contexts:** [[แ„แ…ตแ†ท แ„ƒแ…กแ†ซแ„‹แ…ฑ แ„แ…ฉแ„ƒแ…ณ แ„‘แ…ฎแ†ทแ„Œแ…ตแ†ฏ แ„†แ…ตแ†พ แ„แ…ฅแ†ซแ„‡แ…ฆแ†ซแ„‰แ…งแ†ซ แ„‹แ…ฒแ„Œแ…ต|ํŒ€ ๋‹จ์œ„ ์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ์ปจ๋ฒค์…˜ ์œ ์ง€]], ๋Œ€๊ทœ๋ชจ ๋ชจ๋…ธ๋ ˆํฌ(Turborepo) ํ™˜๊ฒฝ์—์„œ์˜ ๋ฆฐํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ - **Contradictions/Notes:** `lint-staged`๋Š” ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋„๊ตฌ(์˜ˆ: ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋Š” `ng lint`๋‚˜ TypeScript์˜ `tsc --noEmit` ๋“ฑ)๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ์šฉ๋„๋กœ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹จ์ผ ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [18-20]. ๋˜ํ•œ, ์„ค์ • ์‹œ ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๊ฐ€ ๋™์ผํ•œ ํŒŒ์ผ์„ ๋™์‹œ์— ์ˆ˜์ •ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ๊ฒฝ์Ÿ ์กฐ๊ฑด(Race condition)์ด ๋ฐœ์ƒํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ช…๋ น์–ด ๋ฐฐ์—ด(Array)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค [21]. --- *Last updated: 2026-04-18* ---