Tan Kim

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*) 푸시
  └▶ 프로덕션 배포

메모