WEB

Husky

프로일기꾼 2024. 8. 21. 09:33

husky에 대해 조사하며 정리한 내용

husky는 팀 내에서 정한 규칙을 자동으로 공유하고, 사용자에게 일련의 행동을 규제하여 human error를 줄이는데 도움이 되는 툴이라 요약 가능할 것 같다.



개발을 진행하다 보면 커밋 컨벤션 위배, master br에 직접 push, 코딩 스타일 위배 등 다양한 고해의 바다를 만나게 된다.

이러한 상황에서 git을 사용하는 팀 내에서 정한 정책을 강제할 때 Git Hooks를 활용하여 쉽고 간단하게 정책을 강제할 수 있다.

Git Hooks란?

  • git과 관련된 어떠한 이벤트가 발생했을 때, 특정 스크립트를 실행할 수 있도록 하는 기능
  • 크게 클라이언트 훅, 서버 훅으로 나뉜다.
  • 클라이언트 훅은 커밋, merge가 발생하거나 push가 발생하기 전 클라이언트에서 실행하는 훅이며 서버 훅은 git repository로 push가 발생했을 때 서버에서 실행하는 훅이다.
    • husky는 클라이언트 훅이다.
    • cf) 만약 git repository 서버를 관리할 권한이 있다면 서버 훅을 활용하는 게 더 유용할 수 있음. git repository 서버에 있는 모든 프로젝트에 대해 push 정책을 설정할 수 있기 때문이다.



클라이언트 훅
  • 커밋 워크플로 훅, 이메일 워크플로 훅, 그리고 기타 훅으로 분류할 수 있다.
  • 커밋 워크플로 훅git commit 명령으로 커밋을 할 때 실행하는 훅
  • 이메일 워크플로 훅git am 명령으로 이메일을 통해 patch 파일을 적용할 때 실행하는 훅
  • 기타 훅은 rebase, merge, push와 같은 이벤트를 실행할 때 실행하는 훅



Git Hooks를 적용하려면?

  • Git Hooks.git/hooks 디렉토리 안에 저장한다.

  • hook은 실행 가능한 스크립트이며, 설정하고자 하는 훅 이름을 확장자 없이 파일명으로 지정하면 Git Hooks를 적용할 수 있다.

  • eg) pre-commit 훅을 적용하여 commit 직전에 'Hello to the moon :)'를 출력하고 싶은 경우

  • commit 정책 정의

      // .git/hooks/pre-commit 
      #!/bin/sh 
      echo 'Hello to the moon :)' 
      exit 0 # Exit 코드가 0이 아니면 커밋이 취소됨



Git Hooks를 공유하려면? (추후 디테일하게 첨부)

  • Git Hooks를 설정하는 스크립트 공유
  • Git Template을 활용
  • husky 사용



husky

  • 커밋 컨벤션 위배, master br에 직접 push, 코딩 스타일 위배 등 다양한 정책을 사용자에게 강제할 수 있는데 도움을 준다.
  • Git hooks를 보다 쉽게 적용할 수 있는 npm 모듈이다.



husky 사용법

  • husky 설치

    • npm install --save-dev husky
  • commit 정책 정의

    • .huskyrc파일에 정의하고자 하는 훅과 실행할 명령어를 지정

    • cf) 정책은 package.json에도 정의 가능.

      // .huskyrc 
      { 
        "hooks": { 
          "pre-commit": "echo 'Hell to the moon :)'" 
        }
      }

=> 이게 husky를 사용하는데 있어서 전부이다. 작업자가 의존 모듈을 설치하는 것만으로도 husky가 적용된다. 이를 통해 설치 스크립트를 실행하지 않거나 옵션을 빠뜨려서 Git Hooks를 적용하지 못하는 상황은 발생하지 않는다.



husky 동작 방식 (추후 첨부)





cf) 참조 아티클 - https://library.gabia.com/contents/8492/

'WEB' 카테고리의 다른 글

Github & Bitbucket  (0) 2024.08.21
ESLint & Prettier  (0) 2024.08.21
bundler  (0) 2024.08.21
프론트엔드 배포 가능한 환경 목록  (0) 2024.08.20
GNB, LNB, FNB  (0) 2022.11.28