CI/CD: CodeArtifact, CodeGuru, Image Builder, Amplify
6. AWS CodeArtifact
🤔 CodeArtifact가 뭔가요?
비유로 이해하기: CodeArtifact는 프라이빗 npm/Maven 저장소입니다.
- 패키지 의존성 저장/관리
- 퍼블릭 저장소 프록시 (npm, PyPI, Maven)
CodeArtifact 구조
┌─────────────────────────────────────────────────────────────────┐
│ CodeArtifact 구조 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Domain │ │
│ │ (조직 전체 공유, 중복 저장 제거, KMS 암호화) │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Repository A │ │ Repository B │ │ │
│ │ │ │ │ │ │ │
│ │ │ Package 1 │ │ Package 3 │ │ │
│ │ │ Package 2 │ │ Package 4 │ │ │
│ │ └────────┬────────┘ └─────────────────┘ │ │
│ │ │ Upstream │ │
│ │ ↓ │ │
│ │ ┌─────────────────┐ │ │
│ │ │ Repository C │ │ │
│ │ │ (External Conn) │ │ │
│ │ └────────┬────────┘ │ │
│ │ │ External Connection │ │
│ │ ↓ │ │
│ └───────────┼──────────────────────────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────┐ │
│ │ npmjs.com │ │
│ │ PyPI.org │ │
│ │ Maven │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘주요 개념
| 개념 | 설명 |
|---|---|
| Domain | 저장소 그룹, 조직 단위, 단일 KMS 키 |
| Repository | 패키지 저장소 |
| Upstream | 다른 CodeArtifact 저장소 연결 (최대 10개) |
| External Connection | 외부 저장소 연결 (저장소당 1개) |
패키지 보존 (Retention)
패키지를 Upstream에서 가져오면:
1. 가장 하위 Repository에 패키지 참조 유지
2. External Connection이 있는 Repository에 캐시
3. 중간 Repository에는 유지 안 됨
→ Upstream에서 삭제되어도 하위 Repository에서 계속 사용 가능!EventBridge 연동
패키지 생성/수정/삭제 시 이벤트 발생:
CodeArtifact ──event──→ EventBridge ──→ Lambda (재빌드)
──→ CodePipeline (재배포)
──→ SNS (알림)
사용 사례:
• 보안 패치 적용 시 애플리케이션 재빌드/재배포7. Amazon CodeGuru
🤔 CodeGuru가 뭔가요?
비유로 이해하기: CodeGuru는 AI 코드 리뷰어입니다.
- ML로 코드 분석
- 버그, 보안 취약점, 성능 문제 찾기
CodeGuru 구성
┌─────────────────────────────────────────────────────────────────┐
│ Amazon CodeGuru │
│ │
│ 1. CodeGuru Reviewer (정적 코드 분석) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ PR 생성 → CodeGuru 분석 → 코드 리뷰 코멘트 │ │
│ │ │ │
│ │ 찾는 것: │ │
│ │ • 코딩 베스트 프랙티스 위반 │ │
│ │ • 리소스 누수 (Resource Leak) │ │
│ │ • 보안 취약점 │ │
│ │ • 입력 검증 부족 │ │
│ │ • 하드코딩된 비밀 (Secrets Detector) │ │
│ │ │ │
│ │ 지원: Java, Python │ │
│ │ 연동: GitHub, Bitbucket, CodeCommit │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 2. CodeGuru Profiler (런타임 분석) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 애플리케이션 실행 중 성능 분석 │ │
│ │ │ │
│ │ 찾는 것: │ │
│ │ • CPU 과다 사용 코드 │ │
│ │ • 메모리 누수 │ │
│ │ • 코드 비효율성 │ │
│ │ • 이상 탐지 │ │
│ │ │ │
│ │ 지원: AWS (EC2, Lambda, ECS), On-premises │ │
│ │ 오버헤드: 최소 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘Secrets Detector
CodeGuru Reviewer가 하드코딩된 비밀 탐지:
• 비밀번호
• API 키
• AWS 자격 증명
• SSH 키
• 등등
탐지 시 → Secrets Manager로 이동 권장!8. EC2 Image Builder
🤔 Image Builder가 뭔가요?
비유로 이해하기: AMI 자동 생성 도구입니다.
- AMI 생성 → 테스트 → 배포 자동화
- 주기적 실행 가능 (주간, 패키지 업데이트 시)
Image Builder 워크플로우
┌─────────────────────────────────────────────────────────────────┐
│ EC2 Image Builder │
│ │
│ ┌──────────────────┐ │
│ │ EC2 Image │ │
│ │ Builder │ │
│ │ (Recipe 정의) │ │
│ └────────┬─────────┘ │
│ │ │
│ ↓ 1. Builder EC2 생성 │
│ ┌──────────────────┐ │
│ │ Builder EC2 │ │
│ │ Instance │ │
│ │ (Build 컴포넌트 │ │
│ │ 적용) │ │
│ └────────┬─────────┘ │
│ │ │
│ ↓ 2. AMI 생성 │
│ ┌──────────────────┐ │
│ │ New AMI │ │
│ └────────┬─────────┘ │
│ │ │
│ ↓ 3. Test EC2 생성 │
│ ┌──────────────────┐ │
│ │ Test EC2 │ │
│ │ Instance │ │
│ │ (테스트 실행) │ │
│ └────────┬─────────┘ │
│ │ │
│ ↓ 4. 테스트 통과 시 │
│ ┌──────────────────┐ │
│ │ AMI 배포 │ │
│ │ (Multi-Region, │ │
│ │ Multi-Account) │ │
│ └──────────────────┘ │
│ │
│ 무료! (EC2, EBS 비용만 발생) │
│ │
└─────────────────────────────────────────────────────────────────┘CI/CD 아키텍처
CodeCommit → CodeBuild → EC2 Image Builder → CloudFormation
│ │
↓ ↓
AMI Rolling Update
(ASG)최신 AMI 추적
Image Builder → SNS → Lambda → SSM Parameter Store
│
↓
CloudFormation
(AMI ID 참조)9. AWS Amplify
🤔 Amplify가 뭔가요?
비유로 이해하기: Amplify는 풀스택 앱 개발/배포 플랫폼입니다.
- Frontend + Backend 한 번에
- Git 푸시 → 자동 배포
Amplify 구성
┌─────────────────────────────────────────────────────────────────┐
│ AWS Amplify │
│ │
│ Frontend: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Amplify Console (CI/CD) │ │
│ │ • Git 연결 (GitHub, CodeCommit, GitLab, Bitbucket) │ │
│ │ • 브랜치별 배포 (dev → dev.example.com) │ │
│ │ • CloudFront + S3로 호스팅 │ │
│ │ • 커스텀 도메인 (Route 53) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Backend: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Amplify CLI로 백엔드 구성 │ │
│ │ • Authentication: Cognito │ │
│ │ • API: AppSync (GraphQL), API Gateway (REST) │ │
│ │ • Storage: S3, DynamoDB │ │
│ │ • Functions: Lambda │ │
│ │ • AI/ML: SageMaker, Lex │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 브랜치별 배포: │
│ main → example.com │
│ develop → dev.example.com │
│ feature-x → feature-x.example.com │
│ │
└─────────────────────────────────────────────────────────────────┘