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 의 예시를 위해서 일부러 코드를 지저분하게 만들었습니다.
(1) .git/hooks/pre-commit.sample 을 열어서 다음과 같이 코드를 수정합니다.
`* black 은 코드의 품질을 검사하는 모듈로 별도로 설치가 필요합니다.
(2) pre-commit.sample 파일의 이름을 pre-commit 으로 변경합니다.
(3) 실행 권한을 설정합니다.
(4) git hook 준비가 완료되었습니다. 이제 변경 사항을 staging 하고 commit 을 시도하면 아래와 같이 경고문을 띄우며 commit 이 실패합니다.
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/
에 자동 설치/연결합니다.
프로젝트 구조는 아래와 같습니다.
.hookyconfig
이점
원하는 디렉터리에 스크립트 파일을 작성하면 버전 관리도 할 수 있고 자동으로 파일을 복사 후 실행 권한까지 설정해주기 때문에 번거로운 과정 없이 git hook을 사용할 수 있습니다.
마치며
포맷 검사, 린트, 커밋 메시지 체크 등을 자동화하고 싶다면 git hook 과 GetHooky로 간단하게 공통 Git hook 환경을 관리해보세요. 감사합니다.