이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 1 Views
CI/CD 파이프라인 베스트 프랙티스 가이드
지속적 통합과 배포(CI/CD)를 효과적으로 구현하기 위한 핵심 전략과 실전 예제를 담았습니다. GitHub Actions, 테스트 자동화, 배포 전략 등 실무에서 바로 적용 가능한 베스트 프랙티스를 다룹니다.
들어가며
이 글에서는 CI/CD 파이프라인 베스트 프랙티스 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 기본_CI_워크플로우_구성
- 멀티_스테이지_빌드_최적화
- 환경별_배포_전략
- 캐싱으로_빌드_속도_개선
- 자동_버전_관리_태깅
- 병렬_테스트_실행
- 자동_롤백_메커니즘
- 보안_스캔_통합
- 코드_커버리지_추적
- 블루그린_배포_구현
- 슬랙_알림_통합
- 조건부_배포_승인
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