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 ๊ท์น ์ ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์ปค๋ฐํด๋ณด์.
์๋์ผ๋ก lint๊ฐ ์คํ๋๊ณ , commit์ด ์ด๋ค์ง์ง ์์ ๊ฒ์ ํ์ธํ ์ ์๋ค! ํ์ผ์ staging ์ํ์ ๋จธ๋ฌด๋ฅด๊ฒ ๋๋ค. staging๋ ์ฌ๋ฌ ํ์ผ๋ค ์ค ํ ํ์ผ์๋ผ๋ ์ค๋ฅ๊ฐ ์์ผ๋ฉด commit์ด ํ์ฉ๋์ง ์๋๋ค.
commitlint๋ ํ์ธํด๋ณด์. ๋ฌธ์ ์๋ ์๋ฌด ํ์ผ์ ์ถ๊ฐํ๊ณ , ์๋ชป๋ ๋ฉ์์ง๋ก ์ปค๋ฐ์ ํด๋ณด์.
commit์ ํ์ฉํ์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ ๋ฆฌ
- Git hook์ด๋ git ํด๋์ ํน์ ์ด๋ฒคํธ ๋ฐ์ ์ ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
- lint-staged, commitlint๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด Git hook์ ์ฝ๊ฒ ์ค์ ํ ์ ์๋ค.