CI/CD 파이프라인 구축
TypeScript 프로젝트를 위한 CI/CD(지속적 통합/지속적 배포) 파이프라인 구축은 개발 프로세스의 효율성, 코드 품질, 그리고 배포 안정성을 크게 향상시킵니다.
이 절에서는 GitHub Actions를 사용하여 TypeScript 프로젝트의 CI/CD 파이프라인을 구축하는 과정을 살펴봅니다.
CI/CD 파이프라인의 중요성과 이점
- 빠른 피드백 루프 : 코드 변경사항에 대한 즉각적인 검증
- 품질 향상 : 자동화된 테스트와 코드 검사를 통한 버그 조기 발견
- 생산성 증가 : 반복적인 작업의 자동화로 개발자가 핵심 업무에 집중
- 신뢰성 있는 배포 : 일관된 프로세스를 통한 안정적인 배포
- 협업 강화 : 표준화된 프로세스를 통한 팀 협업 개선
GitHub Actions 기반 CI/CD 파이프라인
- GitHub 저장소에
.github/workflows
디렉토리 생성 - 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를 유지할 수 있습니다.
다양한 환경에 대한 자동 배포 전략은 개발부터 프로덕션까지의 과정을 원활하게 만들어줍니다.
블루-그린 배포나 카나리 배포와 같은 고급 배포 전략을 적용하면 위험을 최소화하면서 새로운 기능을 안전하게 출시할 수 있습니다.