⚙️ Git 자동화 완전 가이드 — Git Hooks와 GitHub Actions으로 CI/CD 구축하기
이제 당신은 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다.