
들어가며
프로젝트를 진행하다 보면 코드 컨벤션을 정하고 팀원 모두가 잘 지키기로 약속하지만, 막상 개발하다 보면 깜빡하거나, 다른 스타일로 작성된 코드가 커밋되는 경우가 생긴다. 이런 문제를 예방할 수 있는 방법 중 하나가 바로 Git Hook + Spotlsss이다.
Git Hook이란 ?
Git Hook은 Git이 특정 이벤트(커밋, 푸시 등)를 실행할 때 자동으로 호출되는 스크립트이다. 즉, Git 작업에 자동화된 로직을 추가할 수 있게 해주는 기능이다.
예를 들어 :
- pre-commit : 커밋 전에 코드 포맷팅, 린팅 실행
- commit-msg : 커밋 메시지 포맷 검사
- pre-push : git push 전에 테스트 실행
Spotless란 ?
코드 포맷팅과 스타일링을 자동으로 적용해주는 도구이다. 간단하게 Gradle 플러그인으로 제공된다.
즉, Spotless = 코드 포맷터
Git Hook = 자동 실행 트리거
-> 이 둘을 결합하면 커밋 전에 코드 스타일을 자동으로 정리할 수 있다.
실제 적용 방법
1. build.gradle의 최상단에 존재하는 plugins에 코드를 추가해준다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.4'
id 'io.spring.dependency-management' version '1.1.7'
id 'com.diffplug.spotless' version '6.25.0'
}
2. Spotless 포맷을 설정한다.
build.gradle의 맨 아래 Spotless 관련 설정을 추가한다.
spotless {
java {
googleJavaFormat() // 구글 자바 포맷 스타일 적용
removeUnusedImports() // 사용하지 않는 import 제거
importOrder('java', 'javax', 'org.springframework', '', 'com.kkinikong') // import 순서
trimTrailingWhitespace() // 줄 끝 공백 제거
endWithNewline() // 파일 끝에 빈 줄 추가
indentWithSpaces(4) // 공백 4칸 들여쓰기
}
}
3. pre-comimt Hook 생성
커밋할 때마다 Spotless를 실행하도록 Hook 스크립트를 만든다.
나는 `/scripts/pre-commit` 파일을 새로 만들고 아래 내용을 작성하였다.
#!/bin/sh
echo "Running Spotless before commit..."
./gradlew spotlessApply --daemon
git add .
4. Git Hook 자동 복사 Task 추가
`build.gradle` 에 Hook파일을 `.git/hooks` 디렉토리로 자동 복사하는 Task를 등록한다.
tasks.register('updateGitHooks', Copy) {
from new File(rootProject.rootDir, 'scripts/pre-commit')
into new File(rootProject.rootDir, '.git/hooks')
fileMode = 0775 // 실행 권한 부여
}
tasks.named('compileJava') {
dependsOn 'spotlessApply'
dependsOn 'updateGitHooks'
}
적용 결과
프로젝트를 빌드할 때마다 Git Hook이 자동으로 복사된다. 그리고 커밋할 때 마다 Spotless가 자동으로 실행되어 코드 스타일이 정리된다.
'Tech' 카테고리의 다른 글
| [Github] CodeRabbit을 활용한 PR 코드 리뷰 (2) | 2025.08.05 |
|---|---|
| [Github] 깃허브 이슈, PR 템플릿 등록하기 (6) | 2025.08.03 |
| [Github] Github Labels 커스텀 한 번에 등록하기 (3) | 2025.08.03 |
| [Jira] Husky로 Jira 커밋 메시지 작성하기 (0) | 2025.07.25 |
| [Jira] 지라 첫 사용기 (4) | 2025.07.21 |