IT & 웹개발

GitHub Actions를 활용한 CI/CD 자동화

kkwako 2025. 3. 28. 11:18

1. GitHub Actions란? – CI/CD 자동화 개념

GitHub Actions는 GitHub 저장소에서 CI/CD(Continuous Integration / Continuous Deployment)를 자동화할 수 있는 강력한 도구입니다. 개발자가 코드를 푸시하거나 PR(Pull Request)을 생성하면 자동으로 빌드, 테스트, 배포 등의 작업을 실행할 수 있습니다.

전통적인 CI/CD 도구(Jenkins, Travis CI 등)와 달리, GitHub Actions는 GitHub와 완벽하게 통합되어 있으며, YAML 기반의 간단한 구성만으로 자동화 파이프라인을 구축할 수 있습니다.

이번 글에서는 GitHub Actions의 기본 개념과 사용 방법, 그리고 실전에서 활용할 수 있는 CI/CD 워크플로우 예제를 소개하겠습니다.

2. GitHub Actions의 기본 구조 및 개념

GitHub Actions는 YAML 파일을 사용하여 워크플로우(Workflow)를 정의하며, 주요 개념은 다음과 같습니다.

개념설명
Workflow 자동화 작업의 전체 과정으로, .github/workflows/에 YAML 파일로 저장됨
Event 워크플로우를 실행하는 트리거(예: push, pull_request, schedule)
Job 하나 이상의 작업 단위이며, 병렬 또는 순차적으로 실행 가능
Step Job 내에서 실행되는 개별 작업(스크립트 실행, 명령어 실행 등)
Runner GitHub Actions의 워크플로우를 실행하는 환경(기본적으로 Ubuntu, Windows, macOS 지원)

예제 YAML 파일 구조는 다음과 같습니다.

yaml
복사편집
name: CI/CD Workflow on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: 코드 체크아웃 uses: actions/checkout@v4 - name: Node.js 설정 uses: actions/setup-node@v4 with: node-version: 18 - name: 의존성 설치 빌드 run: | npm install npm run build

이 워크플로우는 main 브랜치에 코드가 푸시될 때 실행되며,

  1. 저장소 코드를 체크아웃하고
  2. Node.js 환경을 설정한 후
  3. 의존성을 설치하고 프로젝트를 빌드합니다.

GitHub Actions를 활용한 CI/CD 자동화

 

3. GitHub Actions를 활용한 CI/CD 자동화

CI/CD는 크게 **Continuous Integration(지속적 통합)**과 **Continuous Deployment(지속적 배포)**로 나뉘며, GitHub Actions를 활용하면 자동화할 수 있습니다.

(1) CI(지속적 통합) – 코드 테스트 자동화

CI는 코드가 푸시될 때 자동으로 빌드 및 테스트를 수행하여 코드의 안정성을 보장합니다.

다음은 Node.js 프로젝트의 테스트 자동화 예제입니다.

yaml
복사편집
name: CI Test on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - name: 코드 체크아웃 uses: actions/checkout@v4 - name: Node.js 환경 설정 uses: actions/setup-node@v4 with: node-version: 18 - name: 의존성 설치 run: npm install - name: 유닛 테스트 실행 run: npm test

이 워크플로우는 코드가 푸시되거나 PR이 생성될 때 실행되며,

  1. 코드를 체크아웃한 후
  2. Node.js 환경을 설정하고
  3. 의존성을 설치한 뒤
  4. 자동으로 유닛 테스트를 실행합니다.

(2) CD(지속적 배포) – 자동 배포 파이프라인

CD는 코드가 특정 브랜치에 머지되면 자동으로 배포하는 과정입니다.
다음은 Vercel에 배포하는 예제입니다.

yaml
복사편집
name: Deploy to Vercel on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: 코드 체크아웃 uses: actions/checkout@v4 - name: Vercel 배포 run: | npm install -g vercel vercel --token ${{ secrets.VERCEL_TOKEN }} --prod

이 워크플로우는 main 브랜치에 코드가 푸시되면, Vercel을 사용하여 자동 배포를 수행합니다.

  • secrets.VERCEL_TOKEN은 Vercel 인증 토큰이며, GitHub Secrets에 저장하여 보안성을 유지합니다.

(3) Docker 컨테이너 배포 자동화

GitHub Actions를 사용하면 Docker 컨테이너를 빌드하고, Docker Hub 또는 AWS ECR과 같은 컨테이너 레지스트리에 자동으로 푸시할 수도 있습니다.

yaml
복사편집
name: Docker Build & Push on: push: branches: - main jobs: docker: runs-on: ubuntu-latest steps: - name: 코드 체크아웃 uses: actions/checkout@v4 - name: Docker 로그인 run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Docker 이미지 빌드 run: docker build -t myapp:latest . - name: Docker Hub에 푸시 run: docker tag myapp:latest mydockerhub/myapp:latest && docker push mydockerhub/myapp:latest

이 워크플로우는

  1. main 브랜치가 업데이트될 때 실행되며
  2. Docker 이미지를 빌드하고
  3. Docker Hub에 자동으로 푸시합니다.

4. GitHub Actions 활용 시 주의할 점

GitHub Actions를 사용할 때 주의해야 할 몇 가지 사항이 있습니다.

  • 보안 설정: 배포 시 secrets를 활용하여 API 키 및 민감한 정보를 보호해야 합니다.
  • 빌드 최적화: 캐시(Cache)를 활용하면 워크플로우 실행 속도를 향상시킬 수 있습니다.
  • yaml
    복사편집
    - name: npm 캐시 설정 uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: ${{ runner.os }}-node-
  • 실행 비용 관리: GitHub Actions는 퍼블릭 저장소에서는 무료이지만, 프라이빗 저장소에서는 실행 시간이 제한되므로 주의해야 합니다.

5. 결론

GitHub Actions는 CI/CD를 자동화하는 강력한 도구로,

  • 코드 푸시 시 자동 빌드 및 테스트
  • 특정 브랜치 병합 시 자동 배포
  • Docker 이미지 빌드 및 컨테이너 레지스트리 푸시
    등 다양한 활용이 가능합니다.

직관적인 YAML 기반 설정으로 복잡한 CI/CD 파이프라인을 간편하게 구축할 수 있으며, GitHub와의 깊은 연동 덕분에 설정이 쉽고 유지보수도 용이합니다.

개발자의 생산성을 높이고, 안정적인 배포 환경을 구축하려면 GitHub Actions를 적극 활용해 보세요!