이미지 로딩 중...

CI/CD 파이프라인 베스트 프랙티스 가이드 - 슬라이드 1/13
C

CodeDeck AI

2025. 11. 8. · 1 Views

CI/CD 파이프라인 베스트 프랙티스 가이드

지속적 통합과 배포(CI/CD)를 효과적으로 구현하기 위한 핵심 전략과 실전 예제를 담았습니다. GitHub Actions, 테스트 자동화, 배포 전략 등 실무에서 바로 적용 가능한 베스트 프랙티스를 다룹니다.


카테고리:TypeScript
언어:TypeScript
난이도:intermediate
메인 태그:#CI/CD
서브 태그:
#GitHub Actions#Docker#Testing#Deployment

들어가며

이 글에서는 CI/CD 파이프라인 베스트 프랙티스 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. 기본_CI_워크플로우_구성
  2. 멀티_스테이지_빌드_최적화
  3. 환경별_배포_전략
  4. 캐싱으로_빌드_속도_개선
  5. 자동_버전_관리_태깅
  6. 병렬_테스트_실행
  7. 자동_롤백_메커니즘
  8. 보안_스캔_통합
  9. 코드_커버리지_추적
  10. 블루그린_배포_구현
  11. 슬랙_알림_통합
  12. 조건부_배포_승인

1. 기본_CI_워크플로우_구성

개요

GitHub Actions를 사용한 기본 CI 파이프라인 설정입니다. 코드 푸시 시 자동으로 테스트와 린트를 실행합니다.

코드 예제

name: CI Pipeline
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm test

설명

푸시나 PR 발생 시 자동으로 의존성을 설치하고 테스트를 실행하여 코드 품질을 보장합니다.


2. 멀티_스테이지_빌드_최적화

개요

Docker 멀티 스테이지 빌드로 이미지 크기를 최소화하고 빌드 효율성을 높입니다.

코드 예제

FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]

설명

빌드 단계와 실행 단계를 분리하여 최종 이미지에는 필요한 파일만 포함시켜 크기를 줄입니다.


3. 환경별_배포_전략

개요

개발, 스테이징, 프로덕션 환경별로 다른 배포 전략을 적용합니다.

코드 예제

deploy:
  if: github.ref == 'refs/heads/main'
  needs: test
  runs-on: ubuntu-latest
  environment: production
  steps:
    - uses: actions/checkout@v3
    - name: Deploy
      env:
        API_KEY: ${{ secrets.PROD_API_KEY }}
      run: ./deploy.sh production

설명

main 브랜치에만 프로덕션 배포를 실행하고, 환경별 시크릿을 안전하게 관리합니다.


4. 캐싱으로_빌드_속도_개선

개요

의존성 캐싱을 통해 CI/CD 파이프라인 실행 시간을 대폭 단축합니다.

코드 예제

- uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-
- run: npm ci

설명

package-lock.json 기반으로 캐시 키를 생성하여 의존성이 변경될 때만 새로 설치합니다.


5. 자동_버전_관리_태깅

개요

Semantic Release를 활용한 자동 버전 관리 및 릴리스 노트 생성입니다.

코드 예제

release:
  needs: test
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v3
    - uses: cycjimmy/semantic-release-action@v3
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

설명

커밋 메시지를 분석하여 자동으로 버전을 올리고 릴리스 노트를 생성합니다.


6. 병렬_테스트_실행

개요

매트릭스 전략을 사용하여 여러 Node 버전에서 동시에 테스트를 실행합니다.

코드 예제

test:
  strategy:
    matrix:
      node-version: [16, 18, 20]
  runs-on: ubuntu-latest
  steps:
    - uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm test

설명

여러 버전에서 병렬로 테스트하여 호환성을 검증하고 전체 실행 시간을 단축합니다.


7. 자동_롤백_메커니즘

개요

배포 실패 시 자동으로 이전 버전으로 롤백하는 안전장치를 구현합니다.

코드 예제

- name: Deploy with rollback
  run: |
    if ! ./deploy.sh; then
      echo "Deployment failed, rolling back"
      ./rollback.sh
      exit 1
    fi
- name: Health check
  run: curl -f https://api.example.com/health

설명

배포 스크립트 실패 시 자동으로 롤백을 실행하고, 헬스 체크로 배포 성공을 확인합니다.


8. 보안_스캔_통합

개요

의존성 취약점과 코드 보안 이슈를 자동으로 검사합니다.

코드 예제

security:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v3
    - name: Run security scan
      run: npm audit --audit-level=high
    - uses: snyk/actions/node@master
      env:
        SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

설명

npm audit와 Snyk를 활용하여 보안 취약점을 조기에 발견하고 대응합니다.


9. 코드_커버리지_추적

개요

테스트 커버리지를 자동으로 측정하고 리포트를 생성합니다.

코드 예제

- run: npm test -- --coverage
- uses: codecov/codecov-action@v3
  with:
    files: ./coverage/coverage-final.json
    fail_ci_if_error: true
    flags: unittests

설명

커버리지 데이터를 수집하여 Codecov에 업로드하고, 커버리지가 기준 미달 시 빌드를 실패시킵니다.


10. 블루그린_배포_구현

개요

무중단 배포를 위한 블루그린 배포 전략을 구현합니다.

코드 예제

- name: Blue-Green Deploy
  run: |
    docker-compose -f docker-compose.green.yml up -d
    ./health-check.sh green
    docker-compose -f docker-compose.blue.yml down
    mv green blue

설명

새 버전을 별도 환경에 배포하고 검증 후 트래픽을 전환하여 다운타임 없이 배포합니다.


11. 슬랙_알림_통합

개요

CI/CD 파이프라인 결과를 자동으로 Slack에 알림으로 보냅니다.

코드 예제

- name: Notify Slack
  if: always()
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    text: 'Deploy completed!'
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}

설명

배포 성공/실패 여부를 팀에 즉시 알려 빠른 대응이 가능하도록 합니다.


12. 조건부_배포_승인

개요

프로덕션 배포 전 수동 승인 단계를 추가하여 안전성을 높입니다.

코드 예제

deploy:
  environment:
    name: production
    url: https://prod.example.com
  steps:
    - name: Wait for approval
      run: echo "Waiting for manual approval"
    - name: Deploy to production
      run: ./deploy-prod.sh

설명

GitHub의 environment 기능을 활용하여 지정된 승인자의 확인 후에만 프로덕션 배포가 진행됩니다.


마치며

이번 글에서는 CI/CD 파이프라인 베스트 프랙티스 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#CI/CD #GitHub Actions #Docker #Testing #Deployment

#CI/CD#GitHub Actions#Docker#Testing#Deployment#TypeScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.