[awesome-claude-code] Husky CI ๊ฒ์ฆ ์ํฌํ๋ก์ฐ
์ด ์ปค๋งจ๋๋ ์ ์ฅ์์ CI ๊ฒ์ฌ(lint, ๋น๋, ํ์ ์ฒดํฌ, ํ ์คํธ)๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ๊ณ ๋ฌธ์ ๋ฅผ ์๋ ์์ ํ๋ ๋๊ตฌ์ ๋๋ค.
๐ ์ฐธ๊ณ : ์ด ๋ฌธ์๋ awesome Claude Code ๋ฌธ์์ ์๋ฌธ + ๋ ํผ๋ฐ์ค์ ๋๋ค.
- ์๋ฌธ ๋งํฌ๋ฅผ ๋ฐฉ๋ฌธํ์ ์ ๋ณต์ฌํด์ ์ฌ์ฉํ์ ๋ ๋ฉ๋๋ค
- ์ด ํ์ผ์
.claude/skills/ํ์์ ๋ณต์ฌํ์ฌ ์คํฌ๋ก ๋ฑ๋กํ ์๋ ์์ต๋๋ค(26.03.15 ๊ธฐ์ค)
์์ฝ
์ด ๋ช ๋ น์ ๋ชฉํ๋ ์ ์ฅ์๊ฐ ์ ์ ์๋ ์ํ์ธ์ง ํ์ธํ๊ณ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์์ ํ๋ ๊ฒ์ ๋๋ค.
๋ชฉํ
CI ๊ฒ์ฌ๋ฅผ ์คํํ๊ณ ์ ์ฅ์๊ฐ ์ํธํ ์ํ๊ฐ ๋ ๋๊น์ง ๋ฌธ์ ๋ฅผ ์์ ํ ๋ค์ ํ์ผ์ ์คํ
์ด์ง์ ์ถ๊ฐํฉ๋๋ค. ๋ชจ๋ ๋ช
๋ น์ ์ ์ฅ์ ๋ฃจํธ์์ ์คํ๋ฉ๋๋ค.
0. pnpm i๋ฅผ ์คํํ์ฌ ์ ์ฅ์๊ฐ ์ต์ ์ํ์ธ์ง ํ์ธํฉ๋๋ค
pnpm lint๋ฅผ ์คํํ์ฌ ๋ฆฐํฐ๊ฐ ํต๊ณผํ๋์ง ํ์ธํฉ๋๋คpnpm nx run-many --targets=build:types,build:dist,build:app,generate:docs,dev:run,typecheck๋ฅผ ์คํํ์ฌ ํ์ ๊ณผ ๋น๋๊ฐ ํต๊ณผํ๋์ง ํ์ธํฉ๋๋ค.
ํน์ ๋ช ๋ น์ด ์คํจํ๋ฉด, ๋๋ฒ๊น ํ๋ ๋์ ํด๋น ๋ช ๋ น๋ง ์คํํ์ฌ ํ ํฐ์ ์ ์ฝํ์ธ์pnpm nx run-many --target=test:coverage๋ฅผ ์คํํ์ฌ ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํฉ๋๋ค
์คํ ์ ์ .env ํ์ผ์ด ์์ผ๋ฉด ๋จผ์ ์์ฑํ์ธ์pnpm run sort-package-json์ ์คํํ์ฌ package.json์ด ์ ๋ ฌ๋์ด ์๋์ง ํ์ธํฉ๋๋คpnpm nx run-many --targets=lint:package,lint:deps๋ฅผ ์คํํ์ฌ ํจํค์ง๊ฐ ๋ฆฐํธ๋์ด ์๋์ง ํ์ธํฉ๋๋ค- ์ด์ค ํ์ธ. ์์ ์ฌํญ์ด ์์๋ค๋ฉด ์ด์ ๊ฒ์ฌ๋ฅผ ๋ค์ ์คํํ์ธ์. ์๋ฅผ ๋ค์ด, 3๋จ๊ณ์์ ์์ ํ ๊ฒฝ์ฐ 1๋จ๊ณ, 2๋จ๊ณ, 3๋จ๊ณ๋ฅผ ๋ค์ ์คํํ์ฌ ์ด์ ๋จ๊ณ์์ ๋ฆฌ๊ทธ๋ ์ ์ด ์์๋์ง ์ฌํ์ธํ์ธ์.
git status์git add๋ก ํ์ผ์ ์คํ ์ด์ง์ ์ถ๊ฐํฉ๋๋ค.lib/*ํด๋์ git ์๋ธ๋ชจ๋์ ์ถ๊ฐํ์ง ์๋๋ก ์ฃผ์ํ์ธ์
๋ช
๋ น์ด ์ฑ๊ณตํ ๋๊น์ง ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ์ง ๋ง์ธ์. ์ค๊ฐ์ ํ๋กฌํํธ๊ฐ ์๊ฑฐ๋ ๋๋ฒ๊น
์ด ํ์ํ ์ ์์ง๋ง, ์ ๊ฐ ๋ช
์์ ์ผ๋ก ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ ํ๊ฐ๋ฅผ ์ฃผ์ง ์๋ ํ ํญ์ ๊ณ์ ์งํํ์ธ์.
๋งจ ๋ง์ง๋ง์ ํต๊ณผํ ๋ชจ๋ ๋จ๊ณ ์์ ์ฒดํฌ๋งํฌ ์ด๋ชจ์ง๊ฐ ์๋ ์์
๋ชฉ๋ก์ ์ถ๋ ฅํ์ธ์
๋ฌด์ธ๊ฐ ๊นจ์ก์ ๋์ ํ๋กํ ์ฝ
CI๊ฐ ๊นจ์ง๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ์ธ์
1. ์ ๊นจ์ก๋์ง ์ค๋ช ํ๊ธฐ
- ํ ์คํธ๊ฐ ๊นจ์ก์ ๋ ๋จผ์ ๋ฌด์์ด ๊นจ์ก๋์ง์ ๋ํด ๊น์ด ์๊ฐํ๊ณ ์์ ํ ์ค๋ช ์ ์ ๊ณตํ์ธ์. ๋น์ ์ ๊ฐ์ค์ ๋ท๋ฐ์นจํ๋ ์์ค ์ฝ๋์ ๋ก๊ทธ๋ฅผ ์ธ์ฉํ์ธ์.
- ๊ฐ์ค์ ๋ท๋ฐ์นจํ ์์ค ์ฝ๋๋ ๋ก๊ทธ๊ฐ ์๋ค๋ฉด, ๊น์ด ์๊ฐํ๊ณ ์ฝ๋๋ฒ ์ด์ค์์ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ผ์ธ์.
- ๊ฐ์ค์ ํ์ธํ๊ฑฐ๋ ์ ๊นจ์ก๋์ง ํ์ ํ๋ ๋ฐ ๋์์ด ๋๋ค๋ฉด console.log๋ฅผ ์ถ๊ฐํ์ธ์
- ์ ๊นจ์ก๋์ง ๋ชจ๋ฅด๊ฑฐ๋ ์ปจํ ์คํธ๊ฐ ์ถฉ๋ถํ์ง ์๋ค๋ฉด ๋์์ ์์ฒญํ์ธ์
2. ๋ฌธ์ ์์ ํ๊ธฐ
- ์์ ๋ฐฉ์์ ์ ์ํ์ธ์
- ์ ๊ทธ ์์ ์ ํ๋์ง, ์ ์๋ํ ๊ฒ์ผ๋ก ๋ฏฟ๋์ง ์์ ํ ์ค๋ช ํ์ธ์
- ์์ ์ด ์๋ํ์ง ์์ผ๋ฉด 1๋จ๊ณ๋ก ๋์๊ฐ์ธ์
3. ๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ค๋ฅธ ๊ณณ์๋ ์๋์ง ๊ณ ๋ คํ๊ธฐ
- ๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ค๋ฅธ ๊ณณ์๋ ์กด์ฌํ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ์ฐพ์์ ์์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์์ง ๊น์ด ์๊ฐํ์ธ์
4. ์ ๋ฆฌํ๊ธฐ
์์ ํ์๋ ํญ์ ์ถ๊ฐํ console.log๋ฅผ ์ ๋ฆฌํ์ธ์
ํ
์ผ๋ฐ์ ์ผ๋ก createTevmNode์ ๊ฐ์ ๋๋ถ๋ถ์ ํจ์์ ํ์
์ createTevmNode.js๋ผ๋ ํ์ผ์ ์์ผ๋ฉฐ, TevmNode.ts๋ผ๋ ํ์
๊ณผ createTevmNode.spec.ts๋ผ๋ ํ
์คํธ๊ฐ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ผ๋น ํ๋์ ํญ๋ชฉ์ด ์์ด์ ํ์ผ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
pnpm i
์ด๊ฒ์ด ์คํจํ๋ฉด ๋ฌด์ธ๊ฐ ๋งค์ฐ ์๋ชป๋ ๊ฒ์ด๋ฏ๋ก ์ค๋จํด์ผ ํฉ๋๋ค. ๋จ, ๋ฌธ์ ๊ฐ ์ผํ ๋๋ฝ๊ณผ ๊ฐ์ ๋จ์ํ ๊ตฌ๋ฌธ ์ค๋ฅ์ธ ๊ฒฝ์ฐ๋ ์์ธ์ ๋๋ค.
pnpm lint
์ด๊ฒ์ biome์ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ฆฐํธํฉ๋๋ค
pnpm nx-run-many --targets=build:types,typecheck
2๋จ๊ณ์ ์ด ๋ช
๋ น๋ค์ TypeScript ํ์
์ ๊ฒ์ฌํ๋ฉฐ, ๊นจ์ก์ ๋๋ TypeScript ์ค๋ฅ ๊ด๋ จ ์์ธ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ช
ํํ๋ค๋ฉด ์์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ข์ต๋๋ค.
TypeScript ํ์
์ด ์ ๋ง์ง ์๋์ง์ ๋ํ ์ฆ๊ฑฐ๊ฐ ์ด๋ฏธ ์ปจํ
์คํธ์ ์๊ฑฐ๋ ๋ช
ํํ์ง ์๋ค๋ฉด, ์์ ์ ์๋ํ๊ธฐ ์ ์ ํ์ธ์ ์ํด TypeScript ํ์
์ ์ฐพ์๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฌ๊ธฐ์๋ node_modules์์ ์ฐพ์๋ณด๋ ๊ฒ๋ ํฌํจ๋ฉ๋๋ค. tevm ํจํค์ง๋ผ๋ฉด ์ด ๋ชจ๋
ธ๋ ํฌ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ช ๋ฒ ์ด์ ์คํจํ๋ฉด ๋ฌธ์๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค
ํ ์คํธ ์คํ
ํ ์คํธ๋ฅผ ์คํํ๋ ค๋ฉด test:coverage์ ๋ํ nx ๋ช ๋ น์ ์คํํ์ธ์. ์ผ๋ฐ test ๋ช ๋ น์ ํ์์์๋๋ฏ๋ก ์ ๋ ์คํํ์ง ๋ง์ธ์. ์ด์ ๋ช ๋ น์ด ํจํค์ง๋ฅผ ์คํํ ๊ฒ๊ณผ ๊ฐ์ ์์๋ก ๊ฐ๋ณ ํจํค์ง์์ ํ๋์ฉ ์คํํ์ธ์.
๋๋ฒ๊น ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ํ ๋ฒ์ ํ๋์ ํจํค์ง์ฉ ํ ์คํธ๋ฅผ ์คํํ์ธ์
๋ชจ๋ ํ ์คํธ์ vite๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ข ์ข ์ค๋ ์ท ํ ์คํธ๊ฐ ์คํจํฉ๋๋ค. ์ค๋ ์ท ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ์ค๋ ์ท ๋ณ๊ฒฝ์ด ์ ์์๋ ๊ฒ์ธ์ง์ ๋ํ ๊ฐ์ค์ ๋ช ํํ ์ค๋ช ํด์ผ ํฉ๋๋ค
- ํ ์คํธ๊ฐ ์คํจํ ๋๋ง๋ค ๋ฌด์ธ๊ฐ ๊นจ์ก์ ๋์ ํ๋กํ ์ฝ์ ๋ฐ๋ฅด์ธ์
- ์์๋๋ก ์๋ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ๋ค์ด ์ค์ ๋ก ๊ทธ๋ฌํ์ง console.log๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ ์ ํ ์คํธํ๋ ๊ฒ์ด ์ข ์ข ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค
์ ๋ ์ปค๋ฐํ์ง ๋ง์ธ์
์คํ ์ด์ง์๋ง ์ถ๊ฐํ๊ณ ์ค์ ๋ก ์ปค๋ฐ์ ์ ๋ ํ์ง ๋ง์ธ์
์ค๋ฅ๋ ๋ฐ๋ก ์์ ํ์ธ์
TypeScript ํ์ ๊ณผ ํ ์คํธ๊ฐ ๋ค๋ฅธ ๊ฒ์ด ๊นจ์ก๋์ง ์๋ ค์ค ๊ฒ์ด๋ฏ๋ก, ์์ ํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ธ์. ์ํํ๋ค๊ณ ์ฌ๊ฒจ์ง๋ค๊ณ ์์ ์ ๊ฑด๋๋ธ ํ์๊ฐ ์์ต๋๋ค.
์์ ์ด ์ด๋ฃจ์ด์ก์ ๋
์ด๋ค ๋จ๊ณ์์ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ ์์ ์ด ์์ ๋, ํด๋น ๋จ๊ณ๋ฅผ ๋ง์น ํ ํญ์ ๋ค์์ ์ํํ์ธ์.
pnpm run lint๋ฅผ ์คํํ์ฌ ํ์ผ์ด ํฌ๋งท๋์ด ์๋์ง ํ์ธํฉ๋๋ค- ๋จผ์ ํ์ผ์ ์คํ ์ด์ง์ ์ถ๊ฐํ ์ง ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ด ๋๋ค
- ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ ์ํ๋ ์ค์ ๋ก ์ปค๋ฐ์ ํ์ง ๋ง๊ณ ์ฌ์ฉ์๊ฐ ์ง์ ํ๋๋ก ํฉ๋๋ค