개발현황

크레플의 R&D를 소개합니다.

R&D

개발현황

git hooks 을 활용한 코드 품질 유지 자동화: 신우주 연구원

  • 관리자
  • 2025.07.15

git hooks 을 활용한 코드 품질 유지 자동화

작성자: 신우주

특정 Git 이벤트(commit, push, merge..) 가 발생 했을 때 특정 동작을 수행하도록 스크립트 파일을 설정 할 수 있습니다. 이 스크립트 파일들은. git/hooks/ 디렉터리에 위치합니다. 스크립트 파일은 주로 shell 을 사용하지만 파이썬 등 원하는 언어를 사용할 수 있습니다.

1. git hook 사용 목적은?

  • 코드 품질 유지
    • 커밋 전에 린트 검사 또는 테스트 실행.
  • 정책 강제
    • 공통 규칙을 따르도록 로컬 수준에서 강제.
    • 특정 브랜치 보호
    • 커밋 메시지 형식 체크
  • 배포 자동화 등..

2. 스크립트 파일 목록

아래와 같이 다양한 hook 이 있습니다. 기본적으로 이 스크립트의 이름 뒤에 .sample 이라는 접미사가 붙은 상태로 위치하고 있고 .sample 을 이름에서 지우고 실행 권한을 주면 실행 시점에 해당하는 스크립트 파일이 실행되게 됩니다.

Hook 이름 실행 시점 주 용도
pre-commit git commit 실행 린트 검사, 테스트 실행 등 커밋 차단 가능
prepare-commit-msg 커밋 메시지가 만들어지는 시점 자동 메시지 삽입 등
commit-msg 커밋 메시지 작성 메시지 포맷 검증 등
post-commit 커밋 알림 전송, 로그 기록 등
pre-push git push 직전 푸시 전 테스트/빌드 수행, 푸시 차단 가능
post-receive 원격 저장소에 푸시 완료 후 (서버에서 실행) 배포 자동화, 알림 등
pre-rebase 리베이스 시작 리베이스 제한 등
post-merge 병합 완료 의존성 설치, 파일 복구 등
pre-applypatch git am 명령 실행 패치 검증 등
applypatch-msg git am으로 이메일 패치 적용할 때, 커밋 메시지를 생성하는 시점 커밋 메시지를 검사하거나 자동 수정할 수 있음. 메시지 포맷 검증 목적.
비고: 거의 사용되지 않으며 commit-msg와 유사
fsmonitor-watchman Git이 파일 변경 여부를 감지할 때 (작업 디렉토리 스캔) watchman 도구와 연동하여 파일 시스템 감시 효율을 높이는 목적.
속도 향상을 위해 사용되며 Git 내부 최적화 용도
post-update 서버에서 git push 이후 실행 원격 저장소에서 푸시가 끝난 뒤 후처리:
- 서버에서 배포 자동화,
- 후속 스크립트 실행 가능
pre-applypatch git apply 또는 git am 실행 직전 이메일 패치 적용 전에 검증 또는 중단 조건 설정 가능 (예: 테스트 수행)
pre-receive 원격 저장소에서 push 수신 직전 서버에서 푸시를 거부할 수 있는 강력한 제어 포인트.
예: 테스트 실패, 포맷 불일치, 접근 권한 차단 등
update pre-receive보다 하위 수준에서 동작하며, 브랜치별로 개별 호출됨 어떤 ref(브랜치나 태그)가 업데이트되었는지 확인 가능
예: 특정 브랜치로의 푸시 차단

3. Git hook 적용 사례

커밋 전 코드 품질을 검사를 강제 하는 예시를 보여 드리겠습니다. 아래는 현재 시간을 디지털 숫자로 표현하는 간단한 프로그램입니다. git hook 의 예시를 위해서 일부러 코드를 지저분하게 만들었습니다.

01

(1) .git/hooks/pre-commit.sample 을 열어서 다음과 같이 코드를 수정합니다. 02 `* black 은 코드의 품질을 검사하는 모듈로 별도로 설치가 필요합니다.

(2) pre-commit.sample 파일의 이름을 pre-commit 으로 변경합니다. 03

(3) 실행 권한을 설정합니다. 04

(4) git hook 준비가 완료되었습니다. 이제 변경 사항을 staging 하고 commit 을 시도하면 아래와 같이 경고문을 띄우며 commit 이 실패합니다. 05

4. Git hook의 단점은?

문제점 설명
공유 불가 .git/hooks/ 폴더는 Git에 의해 버전 관리되지 않음 → 팀원 간에 hook 스크립트를 공유할 수 없음
설정 자동화 어려움 Git clone만으로는 hook이 자동 설치되지 않음 → 수동 복사 및 권한 부여 필요

5. GetHooky로 단점을 보완해보자!

Git에는 pre-commit, commit-msg, post-merge 등 다양한 hook이 존재합니다. 하지만 .git/hooks/ 디렉터리는 Git에 포함되지 않기 때문에, 팀원 간 공유가 어렵고 관리가 번거롭습니다.

사용방법

gethooky install 명령으로 .githooks/ 아래 hook 파일들을 감지하고 .git/hooks/에 자동 설치/연결합니다.

프로젝트 구조는 아래와 같습니다. 06

.hookyconfig 07

이점

원하는 디렉터리에 스크립트 파일을 작성하면 버전 관리도 할 수 있고 자동으로 파일을 복사 후 실행 권한까지 설정해주기 때문에 번거로운 과정 없이 git hook을 사용할 수 있습니다.

마치며

포맷 검사, 린트, 커밋 메시지 체크 등을 자동화하고 싶다면 git hook 과 GetHooky로 간단하게 공통 Git hook 환경을 관리해보세요. 감사합니다.