1. CI/CD 개요
🤔 CI/CD가 뭔가요?
비유로 이해하기: 자동화된 공장 생산 라인과 같습니다.
- 예전: 수작업으로 부품 조립 → 검수 → 포장 → 출하 (실수 많음)
- 지금: 자동화 라인 → 자동 검사 → 자동 포장 → 자동 출하 (실수 없음!)
CI (Continuous Integration) - 지속적 통합
┌─────────────────────────────────────────────────────────────────┐
│ CI (Continuous Integration) │
│ │
│ 개발자 A ─┐ │
│ 개발자 B ─┼─push──→ [Git Repo] ──→ [Build Server] │
│ 개발자 C ─┘ │ │ │
│ │ ↓ │
│ │ 빌드 & 테스트 │
│ │ │ │
│ │ ↓ │
│ └───← 결과 피드백 ←───┘ │
│ │
│ 목표: │
│ ✅ 코드 푸시할 때마다 자동으로 빌드 & 테스트 │
│ ✅ 버그를 빨리 발견 │
│ ✅ 자주 통합해서 충돌 방지 │
│ │
└─────────────────────────────────────────────────────────────────┘CD (Continuous Delivery/Deployment) - 지속적 전달/배포
┌─────────────────────────────────────────────────────────────────┐
│ CD (Continuous Delivery) │
│ │
│ [Git Repo] → [Build] → [Test] → [Deploy] → [Production] │
│ │ │
│ 자동화된 배포! │
│ │
│ 전통적 방식: 3개월에 1번 대규모 릴리스 (위험!) │
│ CD 방식: 하루에 5번 작은 릴리스 (안전!) │
│ │
└─────────────────────────────────────────────────────────────────┘AWS CI/CD 서비스 스택
┌─────────────────────────────────────────────────────────────────┐
│ AWS CI/CD 서비스 │
│ │
│ Code Build Test Deploy Provision │
│ ───── ───── ──── ────── ───────── │
│ │
│ CodeCommit CodeBuild CodeBuild CodeDeploy CloudForm │
│ (deprecated) Beanstalk ation │
│ GitHub ECS │
│ Bitbucket Lambda │
│ S3 │
│ │
│ ════════════════════════════════════════════════════════════ │
│ AWS CodePipeline │
│ (전체 파이프라인 오케스트레이션) │
│ ════════════════════════════════════════════════════════════ │
│ │
└─────────────────────────────────────────────────────────────────┘AWS CI/CD 서비스 요약
| 서비스 | 역할 | 비유 |
|---|---|---|
| CodeCommit | 코드 저장소 (deprecated) | 금고 |
| CodePipeline | 파이프라인 오케스트레이션 | 공장 관리자 |
| CodeBuild | 빌드 & 테스트 | 조립 라인 |
| CodeDeploy | 배포 자동화 | 배송 트럭 |
| CodeArtifact | 패키지 저장소 | 부품 창고 |
| CodeGuru | 코드 리뷰 (ML) | AI 검수원 |
2. AWS CodeCommit (Deprecated)
⚠️ 중요: CodeCommit 서비스 중단
┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ CodeCommit Deprecated │
│ │
│ 2024년 7월 25일부로 신규 사용 불가 │
│ AWS는 외부 Git 솔루션으로 마이그레이션 권장 │
│ │
│ 대안: │
│ ├─ GitHub (가장 인기) │
│ ├─ GitLab │
│ ├─ Bitbucket │
│ └─ Azure DevOps │
│ │
│ 시험에서는 아직 나올 수 있음! │
│ CodeCommit 문제 → GitHub으로 대체해서 이해하세요 │
│ │
└─────────────────────────────────────────────────────────────────┘CodeCommit 특징 (시험용)
| 특징 | 설명 |
|---|---|
| Git 기반 | 표준 Git 명령어 사용 |
| 프라이빗 | 비공개 저장소 |
| 용량 무제한 | 저장소 크기 제한 없음 |
| 고가용성 | AWS 관리형 |
| 보안 | KMS 암호화, IAM 권한 |
CodeCommit 보안
| 항목 | 방법 |
|---|---|
| 인증 | SSH 키 / HTTPS (Git Credentials) |
| 권한 | IAM 정책 |
| 암호화 | 저장: KMS / 전송: HTTPS/SSH |
| Cross-Account | IAM Role + STS AssumeRole |
CodeCommit vs GitHub
| 항목 | CodeCommit | GitHub |
|---|---|---|
| 코드 리뷰 | ✅ | ✅ |
| CodeBuild 연동 | ✅ | ✅ |
| 인증 | IAM | GitHub Users |
| 호스팅 | AWS 관리 | GitHub 관리 |
| UI | 최소한 | 풍부한 기능 |
3. AWS CodePipeline
🤔 CodePipeline이 뭔가요?
비유로 이해하기: 공장의 생산 라인 관리자입니다.
- "A 작업 끝나면 B로, B 끝나면 C로..."
- 전체 흐름을 시각적으로 관리
- 어디서 멈췄는지 한눈에 파악
CodePipeline 구성
┌─────────────────────────────────────────────────────────────────┐
│ CodePipeline 구조 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Pipeline │ │
│ │ │ │
│ │ Stage 1 Stage 2 Stage 3 Stage 4 │ │
│ │ (Source) (Build) (Test) (Deploy) │ │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │GitHub│───→│Build │───→│ Test │───→│Deploy│ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ └──────┘ └──────┘ └──────┘ └──────┘ │ │
│ │ │ │ │ │ │
│ │ ↓ ↓ ↓ │ │
│ │ [Artifacts S3 Bucket] │ │
│ │ │ │
│ │ ⚠️ Manual Approval 추가 가능 (예: Prod 배포 전) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘CodePipeline 지원 소스/액션
| 단계 | 지원 서비스 |
|---|---|
| Source | CodeCommit, GitHub, S3, ECR, Bitbucket |
| Build | CodeBuild, Jenkins, CloudBees |
| Test | CodeBuild, Device Farm, 3rd party |
| Deploy | CodeDeploy, Beanstalk, CloudFormation, ECS, S3 |
| Invoke | Lambda, Step Functions |
Artifacts (아티팩트)
┌─────────────────────────────────────────────────────────────────┐
│ Artifacts 흐름 │
│ │
│ Stage 1 S3 Bucket Stage 2 Stage 3 │
│ (Source) (Artifacts) (Build) (Deploy) │
│ │
│ [GitHub] ────→ output ────────→ [CodeBuild] ────→ [CodeDeploy]│
│ artifacts │ │
│ ↓ │
│ 빌드 결과물 │
│ (zip 파일) │
│ │ │
│ ↓ │
│ S3에 저장 ────→ 다음 Stage로 전달 │
│ │
│ 각 Stage의 출력물이 S3에 저장되고 다음 Stage의 입력으로 사용 │
│ │
└─────────────────────────────────────────────────────────────────┘CodePipeline 트러블슈팅
| 문제 | 해결 |
|---|---|
| Stage 실패 | 콘솔에서 에러 확인 |
| 권한 오류 | IAM Service Role 권한 확인 |
| 알림 필요 | EventBridge로 실패 이벤트 감지 |
| 감사 필요 | CloudTrail로 API 호출 기록 |
4. AWS CodeBuild
🤔 CodeBuild가 뭔가요?
비유로 이해하기: 자동화된 조립 공장입니다.
- 원재료(소스 코드) 투입
- 설계도(buildspec.yml)대로 조립
- 완성품(빌드 결과물) 출력
CodeBuild 특징
| 특징 | 설명 |
|---|---|
| 완전 관리형 | 서버 관리 불필요 |
| 자동 확장 | 빌드 큐 없음, 동시 빌드 |
| Docker 기반 | 일관된 빌드 환경 |
| 분당 과금 | 빌드 시간만큼만 |
CodeBuild 동작 방식
┌─────────────────────────────────────────────────────────────────┐
│ CodeBuild 동작 방식 │
│ │
│ 1. 소스 가져오기 │
│ ┌──────────┐ │
│ │ GitHub │ ───소스 코드 + buildspec.yml──→ CodeBuild │
│ └──────────┘ │
│ │
│ 2. Docker 컨테이너에서 빌드 │
│ ┌────────────────────────────────────────┐ │
│ │ CodeBuild Container │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ Docker Image (Node.js, Python...) │ │ │
│ │ │ │ │ │
│ │ │ buildspec.yml 명령어 실행: │ │ │
│ │ │ - npm install │ │ │
│ │ │ - npm run build │ │ │
│ │ │ - npm test │ │ │
│ │ └──────────────────────────────────┘ │ │
│ └────────────────────────────────────────┘ │
│ │
│ 3. 결과물 출력 │
│ ┌──────────┐ ┌──────────┐ │
│ │ S3 │ │CloudWatch│ │
│ │(artifacts) │ (logs) │ │
│ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘지원 환경
| 언어/환경 | 지원 |
|---|---|
| Node.js | ✅ |
| Python | ✅ |
| Java | ✅ |
| Go | ✅ |
| Ruby | ✅ |
| .NET Core | ✅ |
| PHP | ✅ |
| Docker | ✅ (커스텀 환경) |
buildspec.yml 구조
# buildspec.yml - 반드시 프로젝트 루트에 위치!
version: 0.2
# 환경 변수
env:
variables:
NODE_ENV: "production"
parameter-store:
DB_PASSWORD: "/my-app/db-password"
secrets-manager:
API_KEY: "my-secret:api_key"
# 빌드 단계
phases:
# 1. 설치 단계
install:
runtime-versions:
nodejs: 18
commands:
- npm ci
# 2. 빌드 전 단계
pre_build:
commands:
- echo "Running tests..."
- npm test
# 3. 빌드 단계
build:
commands:
- echo "Building..."
- npm run build
# 4. 빌드 후 단계
post_build:
commands:
- echo "Build completed!"
- zip -r app.zip dist/
# 빌드 결과물 (S3에 업로드)
artifacts:
files:
- app.zip
- appspec.yml
discard-paths: yes
# 캐시 (다음 빌드 속도 향상)
cache:
paths:
- node_modules/**/*buildspec.yml 섹션 설명
| 섹션 | 설명 |
|---|---|
| env | 환경 변수 (평문, SSM, Secrets Manager) |
| phases.install | 의존성 설치 |
| phases.pre_build | 빌드 전 작업 (테스트 등) |
| phases.build | 실제 빌드 |
| phases.post_build | 빌드 후 작업 (패키징 등) |
| artifacts | S3에 업로드할 파일 |
| cache | 캐시할 파일 (node_modules 등) |
CodeBuild 보안
| 항목 | 설명 |
|---|---|
| 빌드 결과물 암호화 | KMS |
| 권한 | IAM |
| 네트워크 | VPC 내 실행 가능 |
| 감사 | CloudTrail |
5. AWS CodeDeploy
🤔 CodeDeploy가 뭔가요?
비유로 이해하기: 자동 배송 시스템입니다.
- 새 제품(새 버전)을 매장(서버)에 배포
- 한 번에 모두? 조금씩? 선택 가능
- 문제 발생 시 자동 회수(롤백)!
CodeDeploy 지원 플랫폼
| 플랫폼 | 배포 방식 |
|---|---|
| EC2/On-premises | In-place, Blue/Green |
| Lambda | Traffic Shifting |
| ECS | Blue/Green |
EC2/On-premises 배포
사전 요구사항
┌─────────────────────────────────────────────────────────────────┐
│ CodeDeploy Agent 필수! │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ EC2 Instance │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ CodeDeploy Agent (필수!) │ │ │
│ │ │ │ │ │
│ │ │ • 배포 명령 수신 │ │ │
│ │ │ • 애플리케이션 다운로드 │ │ │
│ │ │ • 스크립트 실행 │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │ │
│ │ ↓ │ │
│ │ S3에서 번들 │ │
│ │ 다운로드 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ⚠️ EC2 IAM Role에 S3 읽기 권한 필요! │
│ ⚠️ Systems Manager로 Agent 자동 설치/업데이트 가능 │
│ │
└─────────────────────────────────────────────────────────────────┘In-place 배포 (현재 위치 배포)
┌─────────────────────────────────────────────────────────────────┐
│ In-place Deployment │
│ (HalfAtATime - 절반씩 배포) │
│ │
│ Step 1: 절반 먼저 │
│ ┌────────────────────────────────────────────┐ │
│ │ [v1] [v1] | [v2 배포중] [v2 배포중] │ │
│ │ ↑ ↑ ↑ ↑ │ │
│ │ 서비스 중 트래픽 제외 후 배포 │ │
│ └────────────────────────────────────────────┘ │
│ │
│ Step 2: 나머지 절반 │
│ ┌────────────────────────────────────────────┐ │
│ │ [v2 배포중] [v2 배포중] | [v2] [v2] │ │
│ │ ↑ ↑ ↑ ↑ │ │
│ │ 트래픽 제외 후 배포 서비스 중 │ │
│ └────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘배포 속도 옵션
| 옵션 | 설명 | 다운타임 |
|---|---|---|
| AllAtOnce | 모든 인스턴스 동시 배포 | 최대 |
| HalfAtATime | 50%씩 배포 | 중간 |
| OneAtATime | 한 번에 하나씩 | 최소 |
| Custom | 직접 % 설정 | 설정에 따라 |
Blue/Green 배포
┌─────────────────────────────────────────────────────────────────┐
│ Blue/Green Deployment │
│ │
│ Step 1: 현재 상태 (Blue) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Load Balancer ──100%──→ ASG (v1) [EC2][EC2][EC2] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 2: 새 ASG 생성 (Green) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Load Balancer ──100%──→ ASG Blue (v1) [EC2][EC2][EC2] │ │
│ │ │ │
│ │ ASG Green (v2) [EC2][EC2][EC2] │ │
│ │ (대기 중) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Step 3: 트래픽 전환 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Load Balancer ──100%──→ ASG Green (v2) [EC2][EC2][EC2]│ │
│ │ │ │
│ │ ASG Blue (v1) ← 삭제 대기 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ✅ 장점: 즉시 롤백 가능 (Blue로 다시 전환) │
│ ⚠️ 요구사항: ELB 필수! │
│ │
└─────────────────────────────────────────────────────────────────┘Lambda 배포
┌─────────────────────────────────────────────────────────────────┐
│ Lambda Traffic Shifting │
│ │
│ 배포 전: │
│ PROD Alias ──100%──→ v1 │
│ │
│ Canary 배포 (Canary10Percent5Minutes): │
│ PROD Alias ──90%───→ v1 │
│ ──10%───→ v2 (5분간 테스트) │
│ │
│ 5분 후 (문제 없으면): │
│ PROD Alias ──100%──→ v2 │
│ │
│ ⚠️ 문제 발생 시: 자동 롤백! │
│ │
└─────────────────────────────────────────────────────────────────┘Lambda/ECS 배포 전략
| 전략 | 설명 |
|---|---|
| AllAtOnce | 즉시 100% |
| Canary10Percent5Minutes | 10%로 5분 → 100% |
| Canary10Percent30Minutes | 10%로 30분 → 100% |
| Linear10PercentEvery1Minute | 매 분 10%씩 증가 |
| Linear10PercentEvery3Minutes | 매 3분 10%씩 증가 |
appspec.yml (EC2/On-premises)
# appspec.yml - 반드시 루트에 위치!
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
# 권한 설정
permissions:
- object: /var/www/html
owner: apache
group: apache
# 배포 라이프사이클 훅
hooks:
# 배포 전
BeforeInstall:
- location: scripts/before_install.sh
timeout: 300
# 파일 복사 후
AfterInstall:
- location: scripts/after_install.sh
timeout: 300
# 애플리케이션 시작
ApplicationStart:
- location: scripts/start_server.sh
timeout: 300
# 상태 확인
ValidateService:
- location: scripts/validate.sh
timeout: 300롤백
| 롤백 유형 | 설명 |
|---|---|
| 자동 롤백 | 배포 실패 시 / CloudWatch Alarm 트리거 시 |
| 수동 롤백 | 콘솔에서 직접 |
| 롤백 비활성화 | 롤백 안 함 |
⚠️ 롤백 = 이전 버전을 새로 배포 (복원이 아님!)
6. AWS CodeArtifact
🤔 CodeArtifact가 뭔가요?
비유로 이해하기: 회사 전용 npm/pip 저장소입니다.
- 외부 라이브러리를 회사 내부에 저장
- 승인된 패키지만 사용하도록 관리
- 보안 검증된 패키지만 배포
CodeArtifact 구조
┌─────────────────────────────────────────────────────────────────┐
│ CodeArtifact 구조 │
│ │
│ Public Repositories │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ npm │ │ pip │ │Maven │ │
│ └───┬──┘ └───┬──┘ └───┬──┘ │
│ │ │ │ │
│ └────────┼────────┘ │
│ ↓ proxy │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ AWS CodeArtifact │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Domain │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │Repository A │ │Repository B │ │ │ │
│ │ │ │ (Frontend) │ │ (Backend) │ │ │ │
│ │ │ │ React, Vue │ │ Express,... │ │ │ │
│ │ │ └─────────────┘ └─────────────┘ │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 개발자 / CodeBuild │ │
│ │ npm install (CodeArtifact에서 다운로드) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘지원 패키지 매니저
| 언어 | 패키지 매니저 |
|---|---|
| JavaScript | npm, yarn |
| Python | pip, twine |
| Java | Maven, Gradle |
| .NET | NuGet |
CodeArtifact + EventBridge
패키지 버전 생성/수정/삭제 시 이벤트 발생!
[CodeArtifact] ──이벤트──→ [EventBridge]
│
┌───────────────┼───────────────┐
↓ ↓ ↓
[Lambda] [CodePipeline] [SNS]
│ │ │
↓ ↓ ↓
검증 로직 앱 재빌드/배포 알림 전송Cross-Account 접근
# Repository Resource Policy
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::OTHER_ACCOUNT:root" },
"Action": ["codeartifact:ReadFromRepository"],
"Resource": "*",
},
],
}7. Amazon CodeGuru
🤔 CodeGuru가 뭔가요?
비유로 이해하기: AI 코드 리뷰어입니다.
- 시니어 개발자가 코드 리뷰하듯이
- ML이 코드를 분석해서 문제점 발견
- 성능 병목 지점까지 찾아줌!
CodeGuru 두 가지 기능
┌─────────────────────────────────────────────────────────────────┐
│ Amazon CodeGuru │
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ CodeGuru Reviewer │ │ CodeGuru Profiler │ │
│ │ │ │ │ │
│ │ "코드 리뷰" │ │ "성능 분석" │ │
│ │ │ │ │ │
│ │ • 정적 코드 분석 │ │ • 런타임 성능 분석 │ │
│ │ • 보안 취약점 탐지 │ │ • CPU/메모리 사용량 │ │
│ │ • 버그 탐지 │ │ • 비용 최적화 제안 │ │
│ │ • 코딩 베스트 프랙티스 │ │ • 이상 징후 탐지 │ │
│ │ │ │ │ │
│ │ 시점: 개발 중 │ │ 시점: 프로덕션 운영 중 │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ │
│ 지원 언어: Java, Python │
│ 통합: GitHub, Bitbucket, CodeCommit │
│ │
└─────────────────────────────────────────────────────────────────┘CodeGuru Reviewer
PR 생성 시 자동 분석!
[개발자] ──PR 생성──→ [GitHub/Bitbucket]
│
↓
[CodeGuru Reviewer]
│
↓
┌──────────────────────────────┐
│ 분석 결과: │
│ • 보안 취약점 2개 발견 │
│ • 리소스 누수 가능성 1개 │
│ • 성능 개선 제안 3개 │
└──────────────────────────────┘탐지 항목:
- 보안 취약점
- 리소스 누수
- 입력 검증 누락
- 동시성 문제
- AWS 베스트 프랙티스 위반
CodeGuru Profiler
┌─────────────────────────────────────────────────────────────────┐
│ CodeGuru Profiler │
│ │
│ 애플리케이션 (Lambda/EC2/ECS) │
│ │ │
│ │ Profiler Agent (최소 오버헤드) │
│ ↓ │
│ [성능 데이터 수집] │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 분석 결과: │ │
│ │ │ │
│ │ 🔥 Hot Spot 발견: │ │
│ │ - parseJSON() 함수: CPU 30% 사용 │ │
│ │ - 로깅 루틴: CPU 15% 과도 사용 │ │
│ │ │ │
│ │ 💡 최적화 제안: │ │
│ │ - JSON 파싱 라이브러리 변경 → $500/월 절감 예상 │ │
│ │ - 로깅 레벨 조정 → CPU 10% 절감 예상 │ │
│ │ │ │
│ │ 📊 Heap Summary: │ │
│ │ - String 객체: 메모리 40% 사용 │ │
│ │ - ArrayList: 메모리 25% 사용 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘CodeGuru Profiler 설정 옵션
| 설정 | 설명 |
|---|---|
| MaxStackDepth | 분석할 호출 스택 깊이 |
| MemoryUsageLimitPercent | Profiler 메모리 사용 한도 |
| SamplingIntervalInMilliseconds | 샘플링 간격 (작을수록 상세) |
| ReportingIntervalInMilliseconds | 리포트 전송 간격 |
8. 전체 CI/CD 파이프라인 예시
React + TypeScript 앱 배포 파이프라인
┌─────────────────────────────────────────────────────────────────┐
│ 전체 파이프라인 │
│ │
│ 1. Source (GitHub) │
│ └─ main 브랜치에 Push │
│ │ │
│ ↓ │
│ 2. Build (CodeBuild) │
│ └─ npm install → npm test → npm run build │
│ │ │
│ ↓ │
│ 3. Deploy to Staging (CodeDeploy) │
│ └─ Staging EC2/ECS에 배포 │
│ │ │
│ ↓ │
│ 4. Manual Approval │
│ └─ 담당자 승인 (Slack 알림) │
│ │ │
│ ↓ │
│ 5. Deploy to Production (CodeDeploy) │
│ └─ Blue/Green 또는 Canary 배포 │
│ │
└─────────────────────────────────────────────────────────────────┘실제 buildspec.yml (React + TypeScript)
version: 0.2
env:
variables:
NODE_ENV: "production"
secrets-manager:
REACT_APP_API_KEY: "prod/app:api_key"
phases:
install:
runtime-versions:
nodejs: 18
commands:
- npm ci
pre_build:
commands:
- echo "Running linter..."
- npm run lint
- echo "Running tests..."
- npm test -- --coverage --watchAll=false
build:
commands:
- echo "Building React app..."
- npm run build
post_build:
commands:
- echo "Packaging for deployment..."
- aws s3 sync build/ s3://$S3_BUCKET --delete
artifacts:
files:
- "**/*"
base-directory: build
cache:
paths:
- node_modules/**/*핵심 요약
서비스별 역할
| 서비스 | 역할 | 핵심 파일 |
|---|---|---|
| CodePipeline | 파이프라인 오케스트레이션 | - |
| CodeBuild | 빌드 & 테스트 | buildspec.yml |
| CodeDeploy | 배포 자동화 | appspec.yml |
| CodeArtifact | 패키지 저장소 | - |
| CodeGuru | ML 코드 리뷰 | - |
배포 전략
| 전략 | In-place | Blue/Green |
|---|---|---|
| 다운타임 | 있음 | 없음 |
| 롤백 속도 | 느림 | 빠름 |
| 비용 | 낮음 | 높음 (2배 리소스) |
| ELB 필요 | 선택 | 필수 |