icon

CI/CD 파이프라인 구축


 TypeScript 프로젝트를 위한 CI/CD(지속적 통합/지속적 배포) 파이프라인 구축은 개발 프로세스의 효율성, 코드 품질, 그리고 배포 안정성을 크게 향상시킵니다.

 이 절에서는 GitHub Actions를 사용하여 TypeScript 프로젝트의 CI/CD 파이프라인을 구축하는 과정을 살펴봅니다.

CI/CD 파이프라인의 중요성과 이점

  • 빠른 피드백 루프 : 코드 변경사항에 대한 즉각적인 검증
  • 품질 향상 : 자동화된 테스트와 코드 검사를 통한 버그 조기 발견
  • 생산성 증가 : 반복적인 작업의 자동화로 개발자가 핵심 업무에 집중
  • 신뢰성 있는 배포 : 일관된 프로세스를 통한 안정적인 배포
  • 협업 강화 : 표준화된 프로세스를 통한 팀 협업 개선

GitHub Actions 기반 CI/CD 파이프라인

  1. GitHub 저장소에 .github/workflows 디렉토리 생성
  2. YAML 파일 생성 (예 : ci-cd.yml)

 기본 워크플로우 구조

name: CI/CD Pipeline
 
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
 
jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14.x'
    - run: npm ci
    - run: npm run build
    - run: npm test

자동화된 빌드 프로세스 구성

 TypeScript 컴파일과 번들링 과정 통합

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14.x'
    - run: npm ci
    - name: Build TypeScript
      run: npm run build
    - name: Bundle with Webpack
      run: npm run bundle

자동화된 테스트 실행

 단위 테스트, 통합 테스트, E2E 테스트 구현

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14.x'
    - run: npm ci
    - name: Run unit tests
      run: npm run test:unit
    - name: Run integration tests
      run: npm run test:integration
    - name: Run E2E tests
      run: npm run test:e2e
    - name: Generate test coverage report
      run: npm run test:coverage
    - uses: actions/upload-artifact@v2
      with:
        name: coverage-report
        path: coverage/

코드 품질 검사 통합

 ESLint, Prettier, 타입 체크 통합

jobs:
  code-quality:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14.x'
    - run: npm ci
    - name: Run ESLint
      run: npm run lint
    - name: Check Prettier formatting
      run: npm run format:check
    - name: Run TypeScript type check
      run: npm run type-check

환경별 자동 배포

 개발, 스테이징, 프로덕션 환경에 대한 배포 구성

jobs:
  deploy:
    needs: [build, test, code-quality]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Deploy to Development
      if: github.ref == 'refs/heads/develop'
      run: |
        # 개발 환경 배포 스크립트
    - name: Deploy to Staging
      if: github.ref == 'refs/heads/staging'
      run: |
        # 스테이징 환경 배포 스크립트
    - name: Deploy to Production
      if: github.ref == 'refs/heads/main'
      run: |
        # 프로덕션 환경 배포 스크립트

고급 배포 전략 구현

 블루-그린 배포 예시

jobs:
  blue-green-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Deploy to Blue Environment
      run: |
        # 블루 환경에 새 버전 배포
    - name: Run Smoke Tests
      run: |
        # 간단한 스모크 테스트 실행
    - name: Switch Traffic
      run: |
        # 트래픽을 블루 환경으로 전환
    - name: Rollback on Failure
      if: failure()
      run: |
        # 실패 시 이전 버전으로 롤백

보안 검사 통합

 의존성 취약점 분석 및 SAST(정적 애플리케이션 보안 테스팅) 통합

jobs:
  security-checks:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Run npm audit
      run: npm audit
    - name: Run SAST
      uses: github/codeql-action/analyze@v1

성능 측정 및 모니터링 통합

 Lighthouse를 사용한 성능 측정 예시

jobs:
  performance-check:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Run Lighthouse CI
      uses: treosh/lighthouse-ci-action@v8
      with:
        urls: |
          https://your-site.com
        budgetPath: ./budget.json
        uploadArtifacts: true

CI/CD 파이프라인 Best Practices

 1. 파이프라인 최적화

  • 작업 병렬화를 통한 실행 시간 단축
  • 캐싱을 활용한 빌드 속도 향상

 2. 환경 변수 관리

  • 민감한 정보는 GitHub Secrets 사용
  • 환경별 설정 분리

 3. 테스트 전략

  • 빠른 테스트 먼저 실행
  • 테스트 병렬화 고려

 4. 모니터링 및 알림

  • 파이프라인 실행 결과에 대한 알림 설정
  • 실패 원인 빠른 파악을 위한 로깅 강화

 5. 아티팩트 관리

  • 빌드 결과물 버전 관리
  • 아티팩트 보관 정책 수립

 6. 롤백 전략

  • 자동 롤백 메커니즘 구현
  • 롤백 테스트 정기적 수행

 7. 문서화

  • 파이프라인 구조와 각 단계 설명 문서화
  • 트러블슈팅 가이드 제공

 8. 지속적인 개선

  • 정기적인 파이프라인 리뷰 및 최적화
  • 새로운 도구와 기술 적용 검토

 자동화된 빌드와 테스트 프로세스는 개발자가 코드 품질에 집중할 수 있게 해주며 지속적인 통합을 통해 문제를 조기에 발견하고 해결할 수 있습니다.

 코드 품질 검사 도구를 파이프라인에 통합함으로써 일관된 코딩 스타일과 Best Practices를 유지할 수 있습니다.

 다양한 환경에 대한 자동 배포 전략은 개발부터 프로덕션까지의 과정을 원활하게 만들어줍니다.

 블루-그린 배포나 카나리 배포와 같은 고급 배포 전략을 적용하면 위험을 최소화하면서 새로운 기능을 안전하게 출시할 수 있습니다.