git

⚙️ Git 자동화 완전 가이드 — Git Hooks와 GitHub Actions으로 CI/CD 구축하기

mirabo01 2025. 11. 4. 22:10

이제 당신은 Git을 이용해 브랜치를 만들고, 병합하고, PR 리뷰까지 할 줄 안다.
그렇다면 다음 단계는 **“자동화”**다.

이번 편에서는
Git Hooks — 로컬에서 자동 검증 및 실행
GitHub Actions — 클라우드에서 자동 빌드·배포
두 가지를 활용해 실무 수준의 CI/CD(Continuous Integration / Continuous Deployment) 환경을 구축하는 방법을 완전 정리한다.


💡 1. CI/CD란 무엇인가?

“코드를 자동으로 테스트·빌드·배포해주는 자동화 개발 흐름”

단계 의미 설명

CI (Continuous Integration) 지속적 통합 코드 변경을 자동 테스트 및 병합
CD (Continuous Deployment) 지속적 배포 테스트 통과 시 자동으로 배포 진행

💬 간단히 말하면,

“개발자는 코드를 푸시하고, 시스템은 나머지를 알아서 처리한다.”


🧩 2. Git Hooks — 커밋/푸시 시 자동 실행되는 스크립트

“로컬에서 코드 품질을 자동 점검하거나 커밋 메시지를 강제할 때 사용”

Git은 특정 이벤트 시 자동으로 실행되는 훅(Hook) 파일을 제공한다.
이 파일들은 .git/hooks/ 폴더에 존재하며, bash 스크립트로 동작한다.


🔹 예시 1: pre-commit 훅 — 커밋 전 코드 검사

.git/hooks/pre-commit 파일을 생성하고 👇

#!/bin/sh 
npm run lint 
RESULT=$? 
if [ $RESULT -ne 0 ]; then 
  echo "❌ 코드 스타일 오류! 커밋이 중단됩니다." 
  exit 1 
fi 

✅ 이 스크립트는 ESLint를 실행해 오류가 있을 경우 커밋을 막는다.

💬 “pre-commit은 실수를 막는 첫 번째 방어선이다.”


🔹 예시 2: commit-msg 훅 — 커밋 메시지 포맷 검사

.git/hooks/commit-msg 파일에 👇

#!/bin/sh 
commit_message=$(cat "$1") 
if ! echo "$commit_message" | grep -qE '^(feat|fix|chore|docs|style|refactor|test|ci):'; then 
  echo "❌ 커밋 메시지는 'feat:' 또는 'fix:' 형태로 시작해야 합니다." 
  exit 1 
fi 

✅ 커밋 메시지를 자동 검증하여
팀 컨벤션(feat:, fix: 등)을 강제할 수 있다.


🔹 예시 3: pre-push 훅 — 푸시 전 테스트 실행

#!/bin/sh 
npm test || exit 1 

✅ 푸시 전에 자동으로 테스트를 실행하여
테스트 실패 시 원격 반영을 차단한다.

💡 훅 파일은 기본적으로 .sample 확장자를 가지고 있으므로,
→ 확장자를 지우고 실행 권한을 부여해야 한다:

chmod +x .git/hooks/pre-commit 

🧱 3. Husky로 Git Hooks 관리 자동화

직접 훅 파일을 관리하는 건 번거롭다.
그래서 Node 프로젝트에서는 Husky 패키지를 사용한다 👇

npm install husky --save-dev 
npx husky install 

✅ 설정 예시

npx husky add .husky/pre-commit "npm run lint" 

💬 Husky는 Git Hooks를 더 깔끔하게 관리하고,
협업자 모두 동일한 훅 환경을 사용할 수 있도록 도와준다.


☁️ 4. GitHub Actions — GitHub 기반 자동화 파이프라인

“커밋 또는 PR이 발생하면 자동으로 테스트·빌드·배포를 수행하는 GitHub의 자동화 도구”

GitHub 저장소에 .github/workflows/ci.yml 파일을 추가해 사용한다.


⚙️ 기본 구조

name: CI Pipeline 
 
on: 
  push: 
    branches: [ main ] 
  pull_request: 
    branches: [ main ] 
 
jobs: 
  build: 
    runs-on: ubuntu-latest 
    steps: 
      - name: 코드 체크아웃 
        uses: actions/checkout@v3 
 
      - name: Node.js 설치 
        uses: actions/setup-node@v3 
        with: 
          node-version: 18 
 
      - name: 의존성 설치 
        run: npm install 
 
      - name: 테스트 실행 
        run: npm test 

✅ 이 파일을 저장하면,
GitHub가 자동으로 코드를 감시하고 푸시 시마다 테스트를 실행한다.


🚀 5. GitHub Actions로 배포 자동화하기

예를 들어 Next.js 프로젝트를 AWS EC2에 자동 배포하고 싶다면 👇

name: Deploy to EC2 
 
on: 
  push: 
    branches: [ main ] 
 
jobs: 
  deploy: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Checkout code 
        uses: actions/checkout@v3 
 
      - name: Deploy to EC2 
        uses: appleboy/ssh-action@v0.1.10 
        with: 
          host: ${{ secrets.EC2_HOST }} 
          username: ubuntu 
          key: ${{ secrets.EC2_KEY }} 
          script: | 
            cd /home/ubuntu/app 
            git pull origin main 
            docker compose up -d --build 

✅ GitHub Secrets에 EC2_HOST, EC2_KEY를 등록하면,
푸시할 때마다 자동으로 EC2 서버에 배포가 진행된다.


🧠 6. GitHub Actions 실무 팁

상황 트리거 설명

테스트 자동 실행 on: [push] main 또는 develop 푸시 시 테스트
코드 리뷰 자동화 on: [pull_request] PR 생성 시 코드 린트 수행
빌드/배포 자동화 on: [workflow_dispatch] 수동 트리거 가능
스케줄 작업 on: [schedule] cron 주기 실행 (매일 00시)

💡 GitHub Actions는 사실상 Jenkins, TravisCI 같은 CI 서버를 대체한다.
완전히 무료이며, 깃허브 저장소만 있으면 바로 사용 가능하다.


🔍 7. Git Hooks vs GitHub Actions 비교

구분 Git Hooks GitHub Actions

실행 위치 로컬 (개발자 PC) 클라우드 (GitHub 서버)
트리거 시점 커밋 / 푸시 전 push / PR / 일정 등
주요 용도 코드 검사, 메시지 검증 테스트, 빌드, 배포
관리 방식 수동 또는 Husky .github/workflows 자동 관리
협업 적용 개별 개발자 팀 전체 공용

💬 기억하기:

“Hooks는 예방, Actions는 실행.”


🧩 8. 실무형 Git 자동화 시나리오

1️⃣ 개발자가 커밋 시 → Husky로 ESLint 검사
2️⃣ push 시 → GitHub Actions로 테스트 자동 실행
3️⃣ PR 생성 시 → 자동 리뷰·코드 스타일 검사
4️⃣ main 병합 시 → AWS EC2 자동 배포

결과적으로,
수동 배포 없는 완전 자동화 파이프라인 완성 👏


⚡ 9. 자동화 구축 시 주의사항

  • ⚠️ 민감 정보는 절대 커밋 금지
    → GitHub Secrets 활용 (secrets.DB_URL 등)
  • ⚙️ 서버 접근 시 SSH Key 사용
    → 비밀번호 로그인 금지
  • 🔒 CI/CD 실패 시 즉시 Slack 알림 연동
    → actions/notify-slack@v2 같은 Action 활용

🧭 10. 마무리 — “Git을 넘어서, 시스템을 자동화하라”

Git은 더 이상 단순한 버전 관리 도구가 아니다.
이제는 테스트, 빌드, 배포까지 연결되는 개발 자동화 플랫폼이다.

💬 “GitHub Actions는 단순한 기능이 아니라,
개발자의 시간을 되돌려주는 엔진이다.”

당신이 코드를 푸시하는 순간,
테스트가 돌고, 서버가 빌드되고, 배포가 끝난다.
이게 바로 현대 개발의 표준, CI/CD다.