์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Husky - ์ปค๋ฐ‹/ํ‘ธ์‹œ ์ „ ์ž‘์—… ์‹คํ–‰ํ•˜๊ธฐ

๋ฒผ๋ฆฌ01 2026. 9. 14. 14:19

๐Ÿ“ŒGit Hooks๋ž€?

Git์ด ํŠน์ • ์ด๋ฒคํŠธ(์ปค๋ฐ‹, ํ‘ธ์‹œ ๋“ฑ) ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ.

.git/hooks/ ํด๋”์— ์œ„์น˜ํ•˜์ง€๋งŒ — .git/์€ git์ด ์ถ”์ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŒ€์›๊ณผ ๊ณต์œ  ๋ถˆ๊ฐ€. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒŒ Husky.

 

๐Ÿ“ŒHusky๋ž€?

Git hooks๋ฅผ ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด๋ถ€(.husky/)์— ๋‘๊ณ  ๋ฒ„์ „ ๊ด€๋ฆฌ·ํŒ€ ๊ณต์œ ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

 

๋™์ž‘ ์›๋ฆฌ

  1. npm install ์‹œ prepare ์Šคํฌ๋ฆฝํŠธ๋กœ husky install ์‹คํ–‰
  2. Husky๊ฐ€ git config core.hooksPath .husky๋ฅผ ์„ค์ • — git์ด .git/hooks/ ๋Œ€์‹  .husky/๋ฅผ ๋ณด๊ฒŒ ๋งŒ๋“ฌ
  3. .husky/pre-commit, .husky/pre-push ๋“ฑ์„ ๋งŒ๋“ค๋ฉด git์ด ํ•ด๋‹น ์‹œ์ ์— ์ž๋™ ์‹คํ–‰

 

์„ค์น˜

npm install --save-dev husky
npx husky init   # .husky/ ํด๋” ์ƒ์„ฑ + package.json์— prepare ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

 

 

ํ›… ์ถ”๊ฐ€

echo "npm test" > .husky/pre-commit

 

๐Ÿ“Œ์ฃผ์š” ํ›…: pre-commit vs pre-push

pre-commit

  • ์‹œ์ : git commit ์‹คํ–‰ ์‹œ, ์ปค๋ฐ‹์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ง์ „
  • ์‹คํŒจํ•˜๋ฉด: ์ปค๋ฐ‹ ์ž์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์Œ
  • ์šฉ๋„: ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ๊ฒ€์ฆ — ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ์— ๋Œ€ํ•œ lint·format·ํƒ€์ž… ์ฒดํฌ
  • ์ฃผ์˜: ๋ชจ๋“  ์ปค๋ฐ‹๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฏ€๋กœ ๋А๋ฆฌ๋ฉด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜. ๋ณดํ†ต lint-staged์™€ ์กฐํ•ฉํ•ด ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ๊ฒ€์‚ฌ
# .husky/pre-commit
npx lint-staged

 

pre-push

  • ์‹œ์ : git push ์‹คํ–‰ ์‹œ, ์›๊ฒฉ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์ง์ „
  • ์‹คํŒจํ•˜๋ฉด: ํ‘ธ์‹œ๊ฐ€ ๋ง‰ํž˜ (๋กœ์ปฌ ์ปค๋ฐ‹์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€)
  • ์šฉ๋„: ๋ฌด๊ฑฐ์šด ๊ฒ€์ฆ — ์ „์ฒด ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ๋ณด์•ˆ ์Šค์บ”
  • ์žฅ์ : ์ปค๋ฐ‹์€ ์ž์œ ๋กญ๊ฒŒ ํ•˜๋˜, ์›๊ฒฉ์— ๋ง๊ฐ€์ง„ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฑด ๋ฐฉ์ง€
# .husky/pre-push
npm run build:prod
npm test

 

์ฐจ์ด ๋น„๊ต

  

ํ•ญ๋ชฉ pre-commit pre-push
์ ํ•ฉํ•œ ์ž‘์—… ๊ฐ€๋ฒผ์›€ (lint, format) ๋ฌด๊ฑฐ์›€ (build, test)
์šฐํšŒ git commit --no-verify git push --no-verify

 

์‹ค์ „ ๊ถŒ์žฅ ํŒจํ„ด

  • pre-commit: lint-staged๋กœ ๋ณ€๊ฒฝ ํŒŒ์ผ๋งŒ ๋น ๋ฅด๊ฒŒ ๊ฒ€์‚ฌ (1-2์ดˆ)
  • pre-push: ์ „์ฒด ํ…Œ์ŠคํŠธ·๋นŒ๋“œ (์ˆ˜์‹ญ ์ดˆ~๋ถ„)
  • commit-msg: ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜ ๊ฒ€์ฆ (commitlint)

 

์ฃผ์˜์‚ฌํ•ญ

  • --no-verify๋กœ ์šฐํšŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ CI์—์„œ๋„ ๋™์ผ ๊ฒ€์ฆ์„ ๋Œ๋ ค์•ผ ํ•จ (ํ›…์€ 1์ฐจ ๋ฐฉ์–ด์„ ์ผ ๋ฟ)
  • ํŒ€์›์ด npm install ์•ˆ ํ•˜๋ฉด ํ›… ๋ฏธ์ž‘๋™ — README์— ๋ช…์‹œ ํ•„์š”
  • Windows์—์„œ ์ค„๋ฐ”๊ฟˆ(LF/CRLF) ์ด์Šˆ๋กœ ํ›…์ด ์•ˆ ๋Œ ์ˆ˜ ์žˆ์Œ → .gitattributes๋กœ LF ๊ฐ•์ œ