반응형
GitHub Actions 고급 워크플로우 구성법
(병렬 실행, 조건 분기, 매트릭스 전략, 캐시 활용까지 한 번에 정리!)
GitHub Actions를 사용하다 보면 단순한 push 트리거 외에 "테스트를 병렬로 돌리고 싶다", "운영과 개발을 분리하고 싶다",
"의존성 캐시를 저장해서 속도를 줄이고 싶다"는 생각이 들게 됩니다. 이번 글에서는 실무에서 자주 쓰이는 GitHub Actions의 고급 기능들을 정리해드릴게요.
🧩 1. 매트릭스 전략 (matrix) – 병렬 실행
📘 개념
여러 환경(OS, Python/Node 버전 등)에서 동시에 테스트를 실행하고 싶을 때 사용
✅ 예제
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8, 3.9, 3.10]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: 테스트 실행
run: pytest
위 코드는 Python 3.8, 3.9, 3.10 환경에서 동시에 테스트를 실행합니다.
✨ 확장 예시 (OS + 버전 조합)
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node: [14, 16]
🧪 2. 조건 분기 (if:)
📘 개념
워크플로우나 step을 특정 조건일 때만 실행
✅ 예제
- name: 배포
if: github.ref == 'refs/heads/main'
run: echo "프로덕션 배포 실행"
🎯 조건 종류 예시
조건 | 설명 |
success() | 이전 step이 성공했을 때 |
failure() | 실패했을 때 |
always() | 무조건 실행 |
github.ref == 'refs/heads/dev' | 브랜치 조건 |
github.actor == 'username' | 커밋 작성자 조건 |
⚡ 3. 캐시 저장/복원 (dependencies, 빌드 등)
📘 개념
빌드 시 걸리는 시간을 줄이기 위해 종속성을 캐시로 저장
✅ 예제 (npm 캐시)
- name: 캐시 npm
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
변경된 의존성이 없으면 캐시에서 바로 복원해서 속도 개선 가능!
✅ 예제 (pip 캐시)
- name: 캐시 pip
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
반응형
🧠 4. Job 간 의존성 설정 (needs:)
📘 개념
A 작업이 끝나야 B 작업이 실행되도록 만들기
✅ 예제
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "빌드 완료"
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- run: echo "배포 시작"
deploy는 build가 완료돼야 실행됩니다.
🔀 5. 여러 워크플로우 파일로 분리 (.yml 나누기)
- .github/workflows/ci.yml → 테스트/빌드
- .github/workflows/deploy.yml → 배포
- .github/workflows/schedule.yml → 정기 실행
기능별로 워크플로우를 나눠서 관리하면 협업 시 훨씬 명확해져요!
🔒 6. Secrets와 환경 변수 분리 사용
env:
ENV: production
API_URL: https://api.example.com
run: echo "현재 환경은 $ENV"
보안 관련 값은 GitHub Secrets에 등록하고 아래처럼 사용:
run: echo "TOKEN은 ${{ secrets.MY_SECRET }}"
🛡️ 7. 실패 자동 알림 연동 (Slack/Webhook)
워크플로우 끝에 아래와 같이 Slack 메시지 발송 추가:
- name: Slack 알림
if: failure()
run: |
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"❌ 빌드 실패! 확인 요망!"}' ${{ secrets.SLACK_WEBHOOK_URL }}
🧩 전체 예제 조합
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python: [3.8, 3.9]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- run: pip install -r requirements.txt
- run: pytest
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: echo "프로덕션 배포 완료!"
반응형
'코딩취미 > 프로그램 지식' 카테고리의 다른 글
GitHub Actions 워크플로우 핵심 명령어 & 사용법 총정리 (0) | 2025.04.13 |
---|---|
GitHub Actions + Slack 연동 가이드 (0) | 2025.04.13 |
GitHub Actions 트리거 완전 정복 (0) | 2025.04.12 |
Windows 11 우클릭 메뉴에서 "더보기" 없이 전체 메뉴 표시하는 방법 (레지스트리 수정 + .reg 파일 제공) (0) | 2025.04.10 |
Canva vs Photoshop, 어떤 툴이 나에게 맞을까? (0) | 2025.04.01 |