GitHub Actions를 활용한 CI/CD 배포 자동화 가이드
GitHub Actions로 CI/CD 배포 자동화를 설정하는 방법과 실무 활용 팁을 알아보세요.
CI/CD(지속적 통합 및 지속적 배포)는 현대 소프트웨어 개발에서 필수적인 요소로 자리 잡고 있습니다. 특히 GitHub Actions는 이러한 CI/CD를 구현하는 데 있어 매우 유용한 도구입니다. 이번 글에서는 GitHub Actions를 사용하여 배포 자동화를 설정하는 방법과 실무에서 유용한 체크리스트를 제공하겠습니다.
CI/CD란 무엇인가?
CI/CD는 코드 변경이 있을 때마다 자동으로 빌드, 테스트 및 배포를 수행하는 프로세스를 의미합니다. CI(지속적 통합)는 개발자가 자주 코드를 병합할 때 자동으로 빌드하고 테스트를 수행하여 버그를 조기에 발견하는 데 도움을 줍니다. 반면 CD(지속적 배포)는 테스트를 통과한 코드를 자동으로 배포하여 운영 부담을 최소화합니다.
GitHub Actions란?
GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 이벤트(예: 커밋, 푸시)가 발생할 때 미리 정의한 작업(워크플로)을 자동으로 실행할 수 있습니다. YAML 파일을 사용하여 설정할 수 있으며, GitHub와의 완벽한 통합 덕분에 다양한 환경에서 쉽게 사용할 수 있습니다.
GitHub Actions를 이용한 배포 자동화 기본 구조
배포 자동화의 기본 흐름은 다음과 같습니다:
- 코드 푸시
- GitHub Actions 실행
- 테스트
- 빌드
- 배포
이 과정을 자동화하기 위해서는 GitHub 저장소 내 .github/workflows 디렉토리에 YAML 파일을 생성해야 합니다. 예를 들어, deploy.yml 파일을 생성하고 다음과 같은 기본 구조를 설정할 수 있습니다:
name: CI/CD
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v2
- name: Python 설치
uses: actions/setup-python@v2
with:
python-version: '3.10'
- name: 의존성 설치
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: 테스트 실행
run: |
pytest
위의 예제는 main 브랜치에 푸시될 때마다 자동으로 실행되며, Python 환경을 설정하고 의존성을 설치한 후 테스트를 실행합니다.
Docker와의 통합
실무에서는 Docker를 사용하여 애플리케이션을 컨테이너화하고 배포하는 경우가 많습니다. Docker를 사용한 배포 자동화는 다음과 같이 추가할 수 있습니다:
- name: Docker 이미지 빌드
run: docker build -t my-python-app .
- name: Docker 컨테이너 실행
run: docker run -d -p 5000:5000 my-python-app
이렇게 하면 Docker 이미지를 빌드하고 실행할 수 있습니다. 이 과정은 Flask, FastAPI와 같은 웹 애플리케이션을 배포하는 데 유용합니다.
GitHub Secrets 설정
배포 과정에서 민감한 정보(예: 서버 IP, API 키 등)를 코드에 직접 작성하는 것은 위험합니다. 따라서 GitHub Secrets를 사용하여 이러한 정보를 안전하게 관리할 수 있습니다. GitHub 저장소의 Settings > Secrets > Actions에서 비밀 정보를 등록할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다:
env:
SERVER_IP: ${{ secrets.SERVER_IP }}
실무 체크리스트
- 워크플로우 테스트: 설정한 워크플로우가 제대로 작동하는지 테스트합니다.
- 로그 관리: 배포 로그를 관리하여 문제가 발생했을 때 쉽게 추적할 수 있도록 합니다.
- 보안 점검: GitHub Secrets를 통해 민감한 정보를 안전하게 관리합니다.
- 버전 관리: 배포된 버전을 기록하여 롤백이 가능하도록 합니다.
흔한 실수
- YAML 파일의 문법 오류: YAML은 공백과 들여쓰기에 민감하므로 주의해야 합니다.
- 비밀 정보 노출: GitHub Secrets를 사용하지 않고 민감한 정보를 코드에 작성하는 실수를 피해야 합니다.
마무리
GitHub Actions를 활용한 CI/CD 배포 자동화는 개발자의 생산성을 크게 향상시킬 수 있습니다. 자동화된 테스트와 배포를 통해 코드의 안정성을 높이고, 배포 실수를 최소화할 수 있습니다. 이번 글에서 소개한 방법을 통해 여러분의 프로젝트에도 CI/CD를 도입해 보시기 바랍니다. 
이미지 출처: https://blog.naver.com/brotechtalks/224147088780