
GitHub Actions란?
GitHub Actions는 GitHub에 내장된 CI/CD(지속적 통합/지속적 배포) 자동화 플랫폼입니다. 코드를 push하거나 PR을 열 때, 또는 일정에 따라 자동으로 테스트, 빌드, 배포 등의 작업을 실행할 수 있습니다. 별도의 서버 없이 GitHub 저장소에 YAML 파일 하나만 추가하면 바로 시작할 수 있어 진입 장벽이 낮습니다. 2026년 현재 GitHub Actions는 수백만 개의 오픈소스 프로젝트와 기업 저장소에서 핵심 개발 인프라로 사용되고 있습니다.

핵심 개념 이해하기

워크플로우(Workflow)
자동화 프로세스의 단위입니다. .github/workflows/ 폴더에 YAML 파일로 정의하며, 하나의 저장소에 여러 워크플로우를 만들 수 있습니다.

트리거(Trigger)
워크플로우를 언제 실행할지 정의합니다. push, pull_request, schedule(cron 표현식), workflow_dispatch(수동 실행) 등 다양한 이벤트를 지원합니다.
잡(Job)
워크플로우 내의 실행 단위로, 독립적인 가상 머신에서 실행됩니다. 잡들은 기본적으로 병렬로 실행되지만 needs를 사용해 순서를 지정할 수 있습니다.
스텝(Step)
잡 내의 개별 작업 단위입니다. 셸 명령어를 직접 실행하거나, GitHub Marketplace의 Actions를 재사용할 수 있습니다.
첫 번째 워크플로우 만들기
Node.js 프로젝트를 예시로 가장 기본적인 CI 워크플로우를 만들어보겠습니다.
# .github/workflows/ci.yml
name: CI
# push 또는 PR 이벤트에 트리거
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
# GitHub이 제공하는 무료 Ubuntu 러너 사용
runs-on: ubuntu-latest
steps:
# 저장소 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v4
# Node.js 환경 설정
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
# 의존성 설치
- name: Install dependencies
run: npm ci
# 린트 검사
- name: Run linter
run: npm run lint
# 테스트 실행
- name: Run tests
run: npm test
자주 쓰이는 패턴들
캐싱으로 속도 향상
actions/cache를 사용하면 node_modules, pip 패키지 등을 캐싱해 워크플로우 실행 시간을 크게 줄일 수 있습니다.
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
환경 변수와 시크릿
API 키, 배포 토큰 등 민감한 정보는 GitHub 저장소의 Settings > Secrets에 등록하고 워크플로우에서 참조합니다. 로그에 절대 출력되지 않도록 자동으로 마스킹됩니다.
- name: Deploy to production
env:
API_KEY: ${{ secrets.PRODUCTION_API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npm run deploy
매트릭스 전략 — 여러 환경에서 동시 테스트
Node.js 버전 18, 20, 22에서 동시에 테스트를 실행하고 싶다면 매트릭스 전략을 사용합니다.
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci && npm test
배포 자동화 예시
main 브랜치에 push될 때 자동으로 Vercel에 배포하는 워크플로우입니다.
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'
2026년 GitHub Actions 새로운 기능
Actions 권한 세밀한 제어
2026년 초 업데이트에서 저장소에서 실행 가능한 Actions와 재사용 가능한 워크플로우를 정확히 지정할 수 있게 됐습니다. 최소 권한 원칙을 적용해 보안을 강화하고 잠재적으로 침해된 Actions로부터 보호합니다.
Windows Runner with Visual Studio 2026
Visual Studio 2026이 포함된 새로운 Windows 러너 이미지가 제공되어 .NET, C++ 프로젝트 빌드 환경이 최신 상태로 유지됩니다.
재사용 가능한 워크플로우 강화
여러 저장소에서 동일한 워크플로우를 재사용할 수 있는 기능이 더욱 성숙해졌습니다. CI/CD 파이프라인을 중앙에서 관리하고 조직 전체에 일관된 정책을 적용할 수 있습니다.
GitHub Actions 모범 사례 2026
- 버전 고정:
uses: actions/checkout@v4처럼 Actions 버전을 명시해 예상치 못한 변경을 방지합니다. 가능하면 commit SHA로 고정하는 것이 더 안전합니다. - 최소 권한: 워크플로우에 필요한 최소한의 권한만 부여합니다.
permissions: read-all을 기본값으로 설정하고 필요한 것만 추가합니다. - Composite Actions 활용: 반복되는 steps를 Composite Action으로 추출해 코드 중복을 줄입니다.
- 동시성 제어:
concurrency설정으로 같은 브랜치의 중복 실행을 방지합니다. - 타임아웃 설정:
timeout-minutes로 무한 실행을 방지합니다.
무료 요금제로 할 수 있는 것
GitHub Actions는 공개 저장소에서 무제한 무료로 사용할 수 있습니다. 비공개 저장소는 월 2,000분의 무료 실행 시간이 제공됩니다(Linux 기준). 소규모 프로젝트나 개인 프로젝트라면 무료 플랜으로 충분히 활용할 수 있습니다.
마무리
GitHub Actions는 학습 곡선이 낮으면서도 엔터프라이즈급 CI/CD 파이프라인을 구축할 수 있는 강력한 도구입니다. 처음에는 간단한 테스트 자동화부터 시작해, 점차 배포 자동화, 보안 스캔, 코드 품질 관리 등으로 범위를 넓혀가는 것을 추천합니다. 자동화에 투자한 시간은 반드시 몇 배로 돌아옵니다.