์žฌ๋ฐŒ๊ฒŒ ํ•ฉ์‹œ๋‹ค

๊ธฐ๋กํ•˜๊ธฐ, ๊ฐ€์‹œํ™”ํ•˜๊ธฐ

git ๋งˆ์Šคํ„ฐ

Husky๋กœ Git hooks ์ž๋™ํ™”ํ•˜๊ธฐ(+ lint-staged, commitlint)

์€๋˜๋”” 2022. 10. 18. 01:27

Git hooks๋ž€?

ํŠน์ • git ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ๋™์ž‘์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ

์˜ˆ) commit ์‹œ์— ์ž๋™์œผ๋กœ lint๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ

 

Husky๋ž€?

์†์‰ฌ์šด Git Hook ์ ์šฉ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

Husky์™€ Github Actions์˜ ์ฐจ์ด

Husky: ๋กœ์ปฌ์—์„œ ํŠน์ • git ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰

Github Actions: ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ ˆํผ์ง€ํ† ๋ฆฌ์— ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ์ž‘์—…๋“ค์„ ์‹คํ–‰. CI/CD๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค.

 

์ด ๊ตฌ๋ถ„์ด ์ •ํ™•ํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์šฐ์„  ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค.

 

์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Git hooks ์ข…๋ฅ˜

ํ”„๋กœ์ ํŠธ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Git hooks ์ข…๋ฅ˜๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค!

cd .git/hooks
ls

 

lint-staged, commitlint ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ด์šฉํ•˜๋ฉด git hook์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

  • lint-staged
    staging ์ƒํƒœ์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ lint๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” pre-commit git hook์„ ์„ค์ •ํ•ด์•ผ ํ•˜๊ณ , eslint๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • commitlint
    commit ๋ฉ”์‹œ์ง€์˜ lint๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. commit-msg git hook์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜์„ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ commitlint๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค. 

 

์ ์šฉ ํ™•์ธํ•˜๊ธฐ

lint-staged๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. ํ™•์ธ์„ ์œ„ํ•ด ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ eslint ๊ทœ์น™ ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ปค๋ฐ‹ํ•ด๋ณด์ž. 

๋ณ€์ˆ˜ a๊ฐ€ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค(unused vars)

์ž๋™์œผ๋กœ lint๊ฐ€ ์‹คํ–‰๋˜๊ณ , commit์ด ์ด๋ค„์ง€์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค! ํŒŒ์ผ์€ staging ์ƒํƒœ์— ๋จธ๋ฌด๋ฅด๊ฒŒ ๋œ๋‹ค. staging๋œ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค ์ค‘ ํ•œ ํŒŒ์ผ์—๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด commit์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

commitlint๋„ ํ™•์ธํ•ด๋ณด์ž. ๋ฌธ์ œ ์—†๋Š” ์•„๋ฌด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ž˜๋ชป๋œ ๋ฉ”์‹œ์ง€๋กœ ์ปค๋ฐ‹์„ ํ•ด๋ณด์ž.

์•„๋ฌด ์ฝ”๋“œ
์ž˜๋ชป๋œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€

commit์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋ฆฌ

  • Git hook์ด๋ž€ git ํด๋”์— ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํŠน์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • lint-staged, commitlint๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Git hook์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.