[Git] Spotless + Pre-Commit로 Git Hooks 활용하기

2025. 7. 21. 17:46·Tech

들어가며 

프로젝트를 진행하다 보면 코드 컨벤션을 정하고 팀원 모두가 잘 지키기로 약속하지만, 막상 개발하다 보면 깜빡하거나, 다른 스타일로 작성된 코드가 커밋되는 경우가 생긴다. 이런 문제를 예방할 수 있는 방법 중 하나가 바로 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
'Tech' 카테고리의 다른 글
  • [Github] 깃허브 이슈, PR 템플릿 등록하기
  • [Github] Github Labels 커스텀 한 번에 등록하기
  • [Jira] Husky로 Jira 커밋 메시지 작성하기
  • [Jira] 지라 첫 사용기
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    springboot
    자바
    MongoDB
    docker
    CoolSMS
    redis
    git
    도커
    github
    java
    깃
    OS
    레디스
    Network
    코드레빗
    AI
    몽고디비
    운영체제
    coderabbit
    Spring
    지라
    jira
    TDD
    promtail
    파인튜닝
    스프링
    STT
    네트워크
    스프링부트
    깃허브
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Git] Spotless + Pre-Commit로 Git Hooks 활용하기

티스토리툴바