[Git] 자동 배포 도구 GitHub Actions 사용 방법과 Heroku와의 비교

728x90
반응형

GitHub Actions

새로운 기능을 개발하고자 하면 개발, 코드 테스트, 빌드, 원격 저장소에 반영, 배포하는 일련의 과정을 거쳐야 한다.
이러한 일련의 작업 과정을 자동화하는 다양한 도구 중 하나가 Github Actions이다.
Github는 GitHub Actions라는 도구를 제공해서 해당 과정의 자동화를 돕는다.

https://docs.github.com/ko/actions

 

GitHub Actions 설명서 - GitHub Docs

GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다. CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완

docs.github.com

 

1. 개요

GitHub Actions는 소프트웨어 개발에서 코드 개발, 테스트, 빌드, 배포까지의 일련 작업을 자동화할 수 있는 도구이다.
GitHub의 고유 기능으로서, 특정 이벤트가 발생하면 사전 정의된 명령어를 자동으로 실행할 수 있어 개발자의 반복 작업을 줄이고, 코드 품질과 배포 속도를 높이는 데 도움을 준다.

  • 이벤트 기반 동작: GitHub Actions는 이벤트 기반으로 작동한다. 즉, Push, Pull Request와 같은 이벤트가 발생할 때마다 해당 작업을 자동으로 실행한다.
  • Workflow 구조: GitHub Actions에서 실행되는 작업은 Workflow라는 단위로 관리된다. Workflow는 YAML 파일로 정의되며, .github/workflows 디렉토리에 저장된다.

구성 요소

  • Jobs: 각 Job은 단일 환경에서 실행할 명령어 집합이다.
  • Steps: Job 내에서 실행되는 명령어의 개별 단계이다.
  • Actions: 실제 명령어 자체로, GitHub에서 제공하는 공식 액션이나 커뮤니티가 만든 액션을 활용할 수 있다.

2. 작성 예시

아래 예시는 특정 브랜치에 Push 또는 Pull Request가 발생할 때 실행되는 GitHub Actions 워크플로의 예시이다.

# 워크플로 이름
name: CI Pipeline

# 이벤트 설정: push와 pull_request 이벤트가 트리거되면 작동
on:
  push:
    branches: [main, dev]	# 브랜치 이름 나열
  pull_request:
    branches: [main, dev]	# 브랜치 이름 나열

# 수행할 내용 정의
jobs:
  build:
    runs-on: ubuntu-latest  # Ubuntu 환경에서 실행

    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v2  # GitHub에서 제공하는 checkout 액션 사용

      - name: 환경 설정 (예: Node.js 셋업)
        uses: actions/setup-node@v2  # Node.js 셋업
        with:
          node-version: '14'

      - name: 종속성 설치
        run: npm install

      - name: 테스트 실행
        run: npm test

      - name: 빌드 및 배포
        run: npm run build && npm run deploy

위 예시는 다음과 같은 순서로 실행된다: 빌드 → 테스트 → 이미지 생성 → 배포

@warning
여기서 실행할 명령의 순서를 주의해야 하는데, 이미지를 생성 한 후 테스트가 아니라, 테스트를 먼저 한 후에 이미지를 생성해야 한다.
테스트를 하지 않고 무작정 이미지를 생성하면, 오류가 있어도 그대로 이미지를 생성하기 때문이다.

3. 활용 방법과 사례

  • CI/CD 파이프라인 자동화: 개발자가 코드 수정 후 푸시하면 자동으로 테스트, 빌드, 배포까지 이어지도록 설정하여 일관된 품질을 유지하고 배포 시간을 단축할 수 있다.
    • 예: 프론트엔드 프로젝트에서, Push 이벤트가 발생할 때마다 테스트가 실행되고 성공하면 자동으로 배포 서버에 반영하는 경우.
  • 코드 품질 검사 및 보안 점검: PR 생성 시 코드의 정적 분석 도구를 활용해 코드 품질과 보안 점검을 수행할 수 있다.
    • 예: pull_request 이벤트가 발생하면 ESLint, Prettier를 실행하여 코드 규칙 준수 여부를 확인하는 작업.
  • 자동화된 릴리스 관리: 코드가 main 브랜치에 머지될 때 릴리스를 생성하고 GitHub Packages 또는 Docker Hub에 이미지를 배포할 수 있다.
    • 예: 새로운 버전의 코드가 main에 머지되면 자동으로 태그를 생성하고 도커 이미지를 빌드해 Docker Hub에 배포하는 워크플로.

4. 언제 사용하면 좋을까?

  • 복잡한 CI/CD 파이프라인이 필요한 경우: GitHub Actions는 다양한 액션과 환경 설정을 제공하므로 복잡한 CI/CD 파이프라인을 간단하게 구성할 수 있다.
  • 테스트 자동화가 필요한 경우: 테스트 코드를 자동화하여 PR마다 테스트가 자동으로 실행되도록 설정할 수 있어 개발 초기부터 품질 관리가 용이하다.
  • 지속적인 배포(CD)를 구현할 때: 특정 브랜치에 변경이 발생할 때마다 자동으로 프로덕션 또는 테스트 환경에 배포되도록 설정할 수 있다.

5. 주의해야 할 점

  • 빌드 및 배포 자원 관리: GitHub Actions는 빌드와 배포에 자원을 사용하므로, 과도한 워크플로 실행이 발생하지 않도록 이벤트 트리거를 신중히 설정해야 한다.
  • 비용 고려: 개인 프로젝트의 경우 무료 요금제를 사용할 수 있지만, 팀 프로젝트 또는 과도한 워크플로 실행 시 비용이 발생할 수 있다.
  • 민감 정보 관리: GitHub Actions에서 사용하는 환경 변수에 민감 정보(API 키 등)가 포함될 경우, GitHub Secrets를 활용해 보안을 유지해야 한다.
  • 의존성 충돌 주의: 각 Job은 기본적으로 독립적으로 실행되기 때문에 의존성이 필요한 경우 needs 키워드를 사용해 실행 순서를 지정하거나, 캐시 액션을 활용해 의존성을 관리해야 한다.

GitHub Actions는 GitHub 레포지토리와 통합된 강력한 CI/CD 도구로, 적절히 활용하면 프로젝트 관리에 큰 도움이 될 수 있다.


Heroku와의 차이점

이전에 헤로쿠를 이용해서 배포를 할 때에도 깃허브에 push하면 자동으로 배포할 수 있었다.
GitHub Actions는 Heroku와 어떤 차이점이 있을지 찾아서 정리해보았다.

🤔 Heroku와는 어떤 차이점이 있을까?

간단히 말하면, Heroku는 간편한 자동 배포를 제공하고, GitHub Actions는 더 많은 제어와 유연성을 제공한다.

항목 Heroku GitHub Actions
배포 방식 GitHub 브랜치에 푸시하면 자동 배포 GitHub에서 워크플로를 작성하여 배포
설정 과정 Heroku 대시보드에서 간단히 설정 YAML 파일을 만들어 정의해야 한다.
CI/CD 기능 기본 자동 배포 기능 빌드, 테스트 등 다양한 작업 추가 가능
유연성 설정이 간단하지만, 유연성이 적다. 복잡한 CI/CD 파이프라인 구축 가능
자원 관리 Heroku 서버 리소스 사용 GitHub Actions의 무료 리소스 사용

 

728x90
반응형