๐พ macOS + Husky๋ก Java ์๋ ํฌ๋งทํ ์ค์ ํ๊ธฐ (google-java-format)
์ปค๋ฐํ ๋๋ง๋ค ์ฝ๋ ์คํ์ผ ๋ง์ถ๋ ๊ฒ ์๊ทผํ ๋ฒ๊ฑฐ๋กญ๋๋ผ๊ตฌ์ ใ
ใ
๊ทธ๋์ Husky์ google-java-format์ ์ฐ๋ํด์ ์ปค๋ฐ ์ ์ ์๋์ผ๋ก ํฌ๋งทํ
๋๊ฒ ์ธํ
ํด๋ดค์ต๋๋ค ๐
โน๏ธ ์ฌ์ ์๊ตฌ ์ฌํญ
google-java-format์ Java ๊ธฐ๋ฐ ๋๊ตฌ๋ผ JDK ์์ผ๋ฉด ์คํ ์์ฒด๊ฐ ์ ๋ฉ๋๋ค.
์์ ์ ์ JDK๊ฐ ์ค์น๋์ด ์๋์ง ๋จผ์ ํ์ธํด ์ฃผ์ธ์!
๐ ํ๋ก์ ํธ ์ด๊ธฐํ
ํ๋ก์ ํธ ๋ฃจํธ์์ ์๋ ๋ช ๋ น์ ์คํํฉ๋๋ค.
npm init -y
์คํํ๋ฉด package.json์ด ์์ฑ๋ฉ๋๋ค.
Husky๋ npm ํจํค์ง๋ก ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์
package.json์ด ์์ผ๋ฉด ์ค์น๊ฐ ์ ๋ฉ๋๋ค.
๐ถ Husky ์ค์น
1๏ธโฃ Git Hook์ ์ฝ๊ฒ ๊ด๋ฆฌํด ์ฃผ๋ Husky๋ฅผ ์ค์นํฉ๋๋ค.
npm install --save-dev husky
2๏ธโฃ ์ค์น๊ฐ ๋๋ฌ๋ค๋ฉด Husky๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
npx husky init
3๏ธโฃ ์คํํ๋ฉด .husky ํด๋์ ๊ธฐ๋ณธ Hook ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
.husky/
โโโ pre-commit
4๏ธโฃ package.json์๋ ์๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค.
"scripts": {
"prepare": "husky"
}
prepare์คํฌ๋ฆฝํธ ๋๋ถ์ ํ์์ดnpm install๋ง ํด๋ Husky๊ฐ ์๋์ผ๋ก ํ์ฑํ๋ฉ๋๋ค.
ํ ํ๋ก์ ํธ์์ ์ฐ๋ฉด ๋ฐ๋ก ์ธํ ์ ํด๋ ๋ผ์ ์ง์ง ํธํด์ ๐
โน๏ธ Hook์ด๋?
Hook์ ํ๋ก๊ทธ๋จ์ด ์ด๋ค ์์ ์ ์งํํ๋ ํน์ ์๊ฐ์ ๋ผ์ด๋ค์ด ์ถ๊ฐ ์์ ์ ์คํํ๋ ์ฅ์น์ ๋๋ค.Git์์๋ commit์ด๋ push ๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ "์ ๊น! ์ด ์์ ํ๊ธฐ ์ ์ ์ด๊ฒ๋ ๊ฐ์ด ์คํํ์" ๋ผ๊ณ ์์ ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
โ Husky ์ค์น ํ์ธ
์๋ ๋ช ๋ น์ผ๋ก ์ค์น๊ฐ ์ ๋๋ก ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค.
npm list husky
๐ฅ ์ถ๋ ฅ ์์
husky@9.x.x
๋ฒ์ ์ด ํ์๋๋ฉด ์ ์์ ์ผ๋ก ์ค์น๋ ๊ฒ๋๋ค
โฉ google-java-format ์ฌ์ฉ ์ค๋น
google-java-format์ Google Java Style Guide ๊ธฐ์ค์ผ๋ก Java ์ฝ๋๋ฅผ ์๋ ์ ๋ฆฌํด ์ฃผ๋ ํฌ๋งทํฐ์ ๋๋ค.
์๋๋ JAR ํ์ผ๋ก ์คํํ๋ CLI ๋๊ตฌ์ธ๋ฐ,
Husky ๊ฐ์ Node ๊ธฐ๋ฐ ๋๊ตฌ์ ์ฐ๋ํ๊ธฐ ํธํ๋๋ก npm ํจํค์ง๋ ๋ฐ๋ก ์ ๊ณตํ๊ณ ์์ด์.
์ด ๊ธ์์๋ npm ํจํค์ง ๋ฐฉ์์ผ๋ก ์งํํฉ๋๋ค.
goole-java-format์ ์ค์นํฉ๋๋ค
npm install --save-dev google-java-format
โน๏ธ ์ฝ๋ ์คํ์ผ์ ์ง์ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด?
google-java-format์ ์ค์ ํ์ผ ์์ด Google Java Style์ ๊ทธ๋๋ก ์ ์ฉํฉ๋๋ค.๋ค์ฌ์ฐ๊ธฐ๋ ์ค ๊ธธ์ด ๊ฐ์ ์ธ๋ถ ์คํ์ผ์ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
์คํ์ผ์ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ถ๋ค๋ฉด clang-format์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
.clang-format ์ค์ ํ์ผ๋ก ๋ค์ํ ์ต์
์ ์ง์ ์กฐ์ ํ ์ ์์ด์.
๐ clang-format ์ฌ์ฉ๋ฒ ๋ณด๊ธฐ
๐ช Husky Pre-Commit Hook ์ค์
์ด์ ์ปค๋ฐ ์ ์ Java ํ์ผ์ ์๋์ผ๋ก ํฌ๋งทํ ํ๋ Hook์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค โจ
1๏ธโฃ .husky ํด๋ ์์ฑ
mkdir -p .husky
Husky ์ด๊ธฐํ ๋ ์ด๋ฏธ ์์ฑ๋์ ์๋ ์์ต๋๋ค.
-p์ต์ ์ ์ฐ๋ฉด ํด๋๊ฐ ์ด๋ฏธ ์์ด๋ ์ค๋ฅ ์์ด ๋์ด๊ฐ๋๊น ๊ทธ๋ฅ ์คํํด๋ ๋ฉ๋๋ค.
2๏ธโฃ pre-commit ํ์ผ ์์ฑ
touch .husky/pre-commit
ํ์ผ์ ์ด๊ณ ์๋ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค.
#!/bin/bash
echo "๐งน Running google-java-format..."
git diff --cached --name-only --diff-filter=ACM | grep '\.java$' | while IFS= read -r file; do
echo "Formatting $file"
./node_modules/.bin/google-java-format --replace "$file"
git add "$file"
done
์ ์ฅ ํ ์คํ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
chmod +x .husky/pre-commit
๐ฏ ์ ๊ณผ์ ํ๋ฒ์ ์คํํ๊ธฐ
๋งค๋ฒ ํ๋์ฉ ์น๊ธฐ ๊ท์ฐฎ๋ค๋ฉด ์๋ ๋ช ๋ น์ผ๋ก ํ ๋ฒ์ ๋๋ผ ์ ์์ต๋๋ค.
mkdir -p .husky
cat > .husky/pre-commit <<'EOF'
#!/bin/bash
echo "๐งน Running google-java-format..."
git diff --cached --name-only --diff-filter=ACM | grep '\.java$' | while IFS= read -r file; do
echo "Formatting $file"
./node_modules/.bin/google-java-format --replace "$file"
git add "$file"
done
EOF
chmod +x .husky/pre-commit
๐ ๋์ ํ ์คํธ
์ด์ ์ค์ ๋ก ์ปค๋ฐํด์ ์ ๋์ํ๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
git add .
git commit -m "test(husky): verify java formatting hook"
๐ฅ ์ ์ ๋์ ์์
๐งน Running google-java-format...
Formatting src/main/java/Test.java
Java ํ์ผ์ด ์๋์ผ๋ก ํฌ๋งทํ ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค ๐
๐งพ .gitignore
node_modules/๐ ํ๋ก์ ํธ ๊ตฌ์กฐ ์์
java-project/
โโโ .husky/
โ โโโ pre-commit
โโโ src/
โ โโโ main/java/
โโโ .gitignore
โโโ package.json
โโโ README.md
๐ ๋ง๋ฌด๋ฆฌ
์ฒ์ ์ธํ
ํ ๋๋ ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค.
ํ์ง๋ง ํ ๋ฒ๋ง ํด๋๋ฉด ์ปค๋ฐํ ๋๋ง๋ค ์ฝ๋ ์คํ์ผ์ด ์๋์ผ๋ก ์ ๋ฆฌ๋๋๊น ๊ทธ ์ดํ๋ก๋ ์ ๊ฒฝ ์ ์จ๋ ๋ฉ๋๋ค.
์ฝ๋ ๋ฆฌ๋ทฐํ ๋ ์คํ์ผ ์๊ธฐ ์ ๋์ค๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๊ฐ์ด์น ์์ด์ ๐
'Dev Tool > Git & Github' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Git Commit Message(AngularJS) (0) | 2026.03.10 |
|---|---|
| Husky๋ก Java ์๋ ํฌ๋งทํ ์ค์ ํ๊ธฐ (clang-format) (0) | 2026.03.09 |
| GitHub์ ์ฒซ push ๋ก๊ทธ์ธ ์๋ฌ ํด๊ฒฐ๋ฒ (MacOS) (0) | 2025.05.09 |