CI/CD란 무엇인가?
CI (Continuous Integration)는 코드가 변경될 때마다 자동으로 빌드, 테스트, 병합 과정을 수행하는 시스템입니다.
CD (Continuous Deployment)는 테스트를 통과한 코드를 자동으로 배포하는 과정까지 포함합니다.
CI/CD가 필요한 이유
- 테스트 누락 방지
- 버그 조기 발견 및 품질 유지
- 협업 및 코드 리뷰 효율 향상
- 배포 속도 자동화 → 개발 집중도 향상
파이썬 프로젝트에서는 pytest
로 테스트 코드를 작성하고, GitHub Actions
를 통해 자동 실행되는 테스트 파이프라인을 구축할 수 있습니다.
GitHub Actions로 테스트 자동화 설정하기
GitHub Actions는 GitHub에서 제공하는 무료 CI/CD 도구입니다.
코드 푸시(push), PR 생성, 스케줄 등 다양한 이벤트에 따라 워크플로우가 실행됩니다.
프로젝트 구조 예시
my_project/
├── app/
│ └── calculator.py
├── tests/
│ └── test_calculator.py
├── requirements.txt
└── .github/
└── workflows/
└── python-ci.yml
1. GitHub Actions 워크플로우 파일 작성
📁 .github/workflows/python-ci.yml
name: Python CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests with pytest
run: |
pytest
해석:
on
: main 브랜치로 push 또는 PR 시 자동 실행runs-on
: GitHub에서 제공하는 Ubuntu 환경에서 실행actions/setup-python
: 테스트에 사용할 파이썬 버전 지정pytest
: 테스트 코드를 실행하는 명령
2. requirements.txt 예시
pytest
requests
CI 환경은 항상 깨끗한 상태에서 시작하므로, 테스트에 필요한 모든 패키지를 requirements.txt
에 명시해야 합니다.
유형별 실제 활용 방안
1. 여러 Python 버전에서 테스트하기
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
이렇게 하면 다양한 버전에서 테스트를 병렬로 수행할 수 있어 호환성 검증에 유리합니다.
2. 커버리지 보고서 생성
pip install pytest-cov
pytest --cov=app tests/
pytest-cov
를 활용해 테스트 커버리지를 측정하면, 테스트가 얼마나 전체 코드를 커버하고 있는지 시각적으로 확인할 수 있습니다.codecov
, coveralls
같은 서비스와 연동도 가능합니다.
3. 실패한 테스트만 다시 실행
pytest --lf
테스트 자동화는 반복 속도를 높이는 것이 핵심입니다.--lf
옵션은 가장 최근에 실패한 테스트만 다시 실행해 빠르게 디버깅할 수 있도록 도와줍니다.
4. 빌드 뱃지 추가 (README에 표시)

GitHub Actions 워크플로우의 상태를 README에 뱃지로 표시하면, 프로젝트의 안정성과 신뢰도를 외부 사용자에게 전달할 수 있습니다.