AWS DVA-C02 마스터 노트 시리즈 8편. CodeCommit Git·CodeBuild buildspec·CodeDeploy appspec·CodePipeline 4단계 파이프라인, EC2·Lambda·ECS 배포 전략(In-Place·Blue/Green·Canary·Linear), 배포 훅과 자동 롤백까지 — 시험 비중 24% Domain 3 배포 영역의 핵심을 한 흐름으로.
이 글은 AWS DVA-C02 마스터 노트 시리즈의 여덟 번째 편입니다. 시험 도메인 3 "배포"가 24% — 두 번째로 큰 비중. 이 영역의 핵심 도구는 AWS Code* 4종 — CodeCommit·CodeBuild·CodeDeploy·CodePipeline.
4단계 파이프라인
CodeCommit (소스)
↓
CodeBuild (빌드·테스트)
↓
CodeDeploy (배포)
↓
CloudWatch (모니터링)
전체 오케스트레이션 = CodePipeline
CodeCommit — Git 저장소
비유 — AWS Managed GitHub.
특징:
- AWS 매니지드 Git
- IAM 통합 인증
- 무제한 비공개 저장소
- KMS 암호화
여기서 시험 함정이 하나 있어요. CodeCommit이 GitHub·GitLab보다 큰 장점은 IAM 통합 입니다. AWS 사용자가 그대로 Git 인증. 사용자 수 늘어나도 별도 계정 관리 X.
Branch 권한
특정 브랜치(main·prod)에 push 권한을 IAM 정책으로 제한.
{
"Effect": "Deny",
"Action": "codecommit:GitPush",
"Resource": "arn:aws:codecommit:us-east-1:...",
"Condition": {
"StringEqualsIfExists": {
"codecommit:References": ["refs/heads/main"]
}
}
}
CodeBuild — 빌드·테스트
비유 — 자동화된 빌드 룸. 코드 컴파일·테스트 실행·아티팩트 생성.
buildspec.yml
version: 0.2
phases:
install:
runtime-versions:
nodejs: 18
pre_build:
commands:
- npm install
build:
commands:
- npm run build
- npm test
post_build:
commands:
- echo "Build complete"
artifacts:
files:
- "**/*"
base-directory: dist
cache:
paths:
- node_modules/**/*
환경
| 종류 | 설명 |
|---|---|
| Managed Image | AWS 공식 (Amazon Linux·Ubuntu·Windows) |
| Custom Image | ECR의 사용자 Docker 이미지 |
환경 변수와 Secrets
env:
variables:
NODE_ENV: production
parameter-store:
DB_HOST: /myapp/db_host # SSM Parameter Store
secrets-manager:
DB_PASSWORD: db-password:password # Secrets Manager
여기서 시험 함정이 하나 있어요. 환경 변수에 비밀번호 직접 박지 X. 항상 SSM Parameter Store 또는 Secrets Manager 참조.
CodeBuild VPC
기본 외부 실행. RDS·EC2 등 VPC 리소스 접근 시 VPC 설정.
CodeDeploy — 배포
비유 — 자동 배포 트럭. 빌드된 아티팩트를 EC2·Lambda·ECS에 배포.
appspec.yml
배포 대상별 다름.
EC2/On-Premise
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html
hooks:
BeforeInstall:
- location: scripts/before_install.sh
AfterInstall:
- location: scripts/after_install.sh
ApplicationStart:
- location: scripts/start_app.sh
ValidateService:
- location: scripts/validate.sh
Lambda
version: 0.0
Resources:
- MyFunction:
Type: AWS::Lambda::Function
Properties:
Name: MyFunction
Alias: live
CurrentVersion: 1
TargetVersion: 2
Hooks:
- BeforeAllowTraffic: PreTrafficCheck
- AfterAllowTraffic: PostTrafficCheck
ECS
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: <NEW_TASK_DEF_ARN>
LoadBalancerInfo:
ContainerName: my-container
ContainerPort: 80
배포 전략
EC2/On-Premise
| 전략 | 설명 |
|---|---|
| In-Place (Rolling) | 기존 인스턴스 갱신 (다운타임 가능) |
| Blue/Green | 새 인스턴스에 배포 → ELB 트래픽 전환 |
Lambda·ECS
| 전략 | 설명 |
|---|---|
| Canary | 트래픽 일부 (10%) → 시간 경과 후 100% |
| Linear | 일정 비율씩 점진적 (10% / 5분마다) |
| All-at-once | 즉시 100% (롤백 어려움) |
여기서 정말 중요한 시험 함정 — Canary·Linear는 Lambda·ECS만. EC2는 In-Place 또는 Blue/Green. 시나리오 보고 어느 자리에 어느 전략인지 분기.
배포 훅 (Hooks)
EC2 훅:
ApplicationStop → BeforeInstall → AfterInstall →
ApplicationStart → ValidateService
Lambda 훅:
BeforeAllowTraffic → AfterAllowTraffic
(트래픽 전환 전후 검증)
ECS 훅:
BeforeInstall → AfterInstall →
AfterAllowTestTraffic → BeforeAllowTraffic →
AfterAllowTraffic
각 훅에서 검증 스크립트 실행. 실패 시 자동 롤백.
자동 롤백
배포 실패 또는 CloudWatch Alarm 트리거 시 이전 버전으로 자동 복구.
CodePipeline — 오케스트레이션
비유 — 공장 컨베이어 벨트. Source → Build → Test → Deploy 자동화.
스테이지 (Stage)
Pipeline:
Source Stage:
Action: Pull from CodeCommit
Build Stage:
Action: CodeBuild
Test Stage:
Action: 자동 테스트
Manual Approval (선택):
Action: 사람이 승인
Deploy Stage:
Action: CodeDeploy → Production
아티팩트
각 Stage 사이에 S3 버킷에 아티팩트 저장·전달.
Manual Approval
운영 배포 전 사람이 검토·승인. SNS 알림으로 담당자에게 통보.
Build → Approval (이메일 알림 → 수동 승인) → Deploy
CodeStar Connections
GitHub·Bitbucket 등 외부 Git 연결. CodeCommit 안 써도 OK.
트리거
- 자동: CodeCommit push, S3 변경, ECR 이미지 push
- 수동: 콘솔에서 Release change
CloudFormation 통합
CodePipeline의 Deploy Action에서 CloudFormation 템플릿 배포.
Source → Build (CFN 템플릿 패키징) → Deploy (CFN Stack 업데이트)
12편 CloudFormation에서 자세히.
EC2 배포 — In-Place vs Blue/Green
| 구분 | In-Place | Blue/Green |
|---|---|---|
| 새 인스턴스 | X (기존 사용) | ◯ |
| 다운타임 | 가능 | 없음 |
| 비용 | 낮음 | 임시 2배 |
| 롤백 | 재배포 | 즉시 (DNS 스위치) |
| 적합 | 비프로덕션 | 프로덕션 |
Blue/Green 흐름
Blue (현재 v1) — 트래픽 100%
↓ 새 ASG 생성
Green (새 v2) — 헬스 체크
↓ ELB 트래픽 점진 또는 즉시 전환
Green — 트래픽 100% (Blue는 일정 시간 후 종료)
Lambda 배포 — Canary 예시
Lambda Alias 'PROD' = v1 (현재)
배포 시작:
10분간 PROD: v1 (90%) + v2 (10%)
CloudWatch 알람 정상 → PROD: v2 (100%)
알람 발동 → 자동 롤백 → v1 (100%)
7편(서버리스)에서 본 별칭 + 트래픽 분할.
ECS 배포 — Blue/Green
Blue (TaskDef v1) — 100% 트래픽
새 TaskDef v2 → ECS 서비스 업데이트
Green (TaskDef v2) — 헬스 체크
ALB 리스너 트래픽 전환
검증 후 Blue 종료
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 8편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- 시험 도메인 3 (배포) 24%
- 4단계 — CodeCommit → CodeBuild → CodeDeploy → CodePipeline
- CodeCommit 강점 = IAM 통합
- Branch 권한 = IAM 정책 + Condition
- CodeBuild =
buildspec.yml(phases · artifacts · cache) - 환경 — Managed Image / Custom Image
- 비밀번호는 SSM Parameter Store / Secrets Manager (직접 박기 X)
- CodeBuild VPC 설정 = RDS·EC2 접근 시
- CodeDeploy =
appspec.yml(대상별 다름) - EC2 — In-Place / Blue/Green
- Lambda·ECS — Canary / Linear / All-at-once
- Canary·Linear는 Lambda·ECS만 (EC2 X)
- EC2 훅 — Stop → BeforeInstall → AfterInstall → Start → Validate
- Lambda 훅 — BeforeAllowTraffic / AfterAllowTraffic
- 자동 롤백 — 배포 실패 또는 CloudWatch Alarm
- CodePipeline = 오케스트레이션
- 스테이지 — Source / Build / Test / Manual Approval / Deploy
- 아티팩트 = S3 저장·전달
- Manual Approval + SNS 알림
- CodeStar Connections = GitHub·Bitbucket 외부 Git
- 트리거 — Push·S3·ECR (자동), 콘솔 (수동)
- In-Place = 기존 갱신 (비프로덕션) / Blue/Green = 새 환경 (프로덕션)
- Blue/Green = 비용 2배 임시·즉시 롤백
- Lambda Canary = Alias + 트래픽 분할
- ECS Blue/Green = TaskDef 교체 + ALB 전환
- CodePipeline + CloudFormation = IaC 배포
시리즈 다른 편
- 1편 — IAM
- 2편 — 컴퓨팅
- 3편 — 스토리지
- 4편 — 데이터베이스
- 5편 — 네트워킹
- 6편 — 메시징
- 7편 — 서버리스
- 8편 — CI/CD (현재 글)
- 9편 — 모니터링
- 10편 — 보안·암호화
- 11편 — 컨테이너
- 12편 — 개발자 도구
공식 문서: AWS CodePipeline User Guide에서 더 깊이.
다음 글(9편)에서는 모니터링 — CloudWatch 메트릭·로그·알람·대시보드, X-Ray 분산 추적, CloudTrail 감사 로그까지 풀어 갑니다.