CI/CD
개념
| 용어 |
의미 |
| CI (Continuous Integration) |
코드 변경 시 자동으로 빌드·테스트 실행 |
| CD (Continuous Delivery) |
CI 통과 후 스테이징까지 자동 배포 |
| CD (Continuous Deployment) |
CI 통과 후 프로덕션까지 자동 배포 |
코드 Push
└▶ CI: 빌드 → 테스트 → 코드 분석
└▶ CD: 스테이징 배포 → (승인) → 프로덕션 배포
GitHub Actions
.github/workflows/*.yml 파일로 정의.
기본 구조
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Node.js 설정
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 의존성 설치
run: npm ci
- name: 빌드
run: npm run build
- name: 테스트
run: npm test
환경 변수 & Secrets
env:
NODE_ENV: production
steps:
- name: 배포
env:
API_KEY: ${{ secrets.API_KEY }} # GitHub Secrets에서 주입
run: ./deploy.sh
매트릭스 빌드 (여러 환경 동시 테스트)
strategy:
matrix:
node-version: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
Docker 빌드 & 푸시
- name: Docker 로그인
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Docker 빌드 & 푸시
uses: docker/build-push-action@v5
with:
push: true
tags: myapp:${{ github.sha }}
배포 전략
| 전략 |
설명 |
장점 |
단점 |
| Rolling |
인스턴스를 순차적으로 교체 |
중단 없음 |
롤백 느림 |
| Blue/Green |
구 환경(Blue)과 신 환경(Green) 동시 운영 후 트래픽 전환 |
즉시 롤백 가능 |
비용 2배 |
| Canary |
일부 트래픽(1~5%)만 새 버전으로 전환 후 점진적 확대 |
리스크 최소화 |
복잡도 높음 |
주요 도구
| 영역 |
도구 |
| CI/CD 플랫폼 |
GitHub Actions, GitLab CI, Jenkins, CircleCI |
| 컨테이너 |
Docker, Kubernetes |
| 이미지 레지스트리 |
Docker Hub, AWS ECR, GitHub Container Registry |
| 코드 품질 |
SonarQube, ESLint, Prettier |
| 테스트 |
Jest, JUnit, Pytest |
| 모니터링 |
Datadog, Grafana, Sentry |
일반적인 파이프라인 구성
PR 생성
├▶ 린트 검사
├▶ 유닛 테스트
├▶ 빌드 확인
└▶ (통과 시) 리뷰 가능 표시
main 병합
├▶ 전체 테스트
├▶ Docker 이미지 빌드
├▶ 이미지 레지스트리 푸시
└▶ 스테이징 자동 배포
태그(v*) 푸시
└▶ 프로덕션 배포
메모