$ yh.log
Amazon CI/CD - CodePipeline, CodeBuild, CodeDeploy, CodeArtifact, CodeGuru 정리

Amazon CI/CD - CodePipeline, CodeBuild, CodeDeploy, CodeArtifact, CodeGuru 정리

AWSCI/CDCodePipelineCodeBuildCodeDeployDVA-C02

작성자 : 오예환 | 작성일 : 2026-01-20 | 수정일 : 2026-01-20 | 조회수 :

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-AccountIAM Role + STS AssumeRole

CodeCommit vs GitHub

항목CodeCommitGitHub
코드 리뷰
CodeBuild 연동
인증IAMGitHub 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 지원 소스/액션

단계지원 서비스
SourceCodeCommit, GitHub, S3, ECR, Bitbucket
BuildCodeBuild, Jenkins, CloudBees
TestCodeBuild, Device Farm, 3rd party
DeployCodeDeploy, Beanstalk, CloudFormation, ECS, S3
InvokeLambda, 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빌드 후 작업 (패키징 등)
artifactsS3에 업로드할 파일
cache캐시할 파일 (node_modules 등)

CodeBuild 보안

항목설명
빌드 결과물 암호화KMS
권한IAM
네트워크VPC 내 실행 가능
감사CloudTrail

5. AWS CodeDeploy

🤔 CodeDeploy가 뭔가요?

비유로 이해하기: 자동 배송 시스템입니다.

  • 새 제품(새 버전)을 매장(서버)에 배포
  • 한 번에 모두? 조금씩? 선택 가능
  • 문제 발생 시 자동 회수(롤백)!

CodeDeploy 지원 플랫폼

플랫폼배포 방식
EC2/On-premisesIn-place, Blue/Green
LambdaTraffic Shifting
ECSBlue/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모든 인스턴스 동시 배포최대
HalfAtATime50%씩 배포중간
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%
Canary10Percent5Minutes10%로 5분 → 100%
Canary10Percent30Minutes10%로 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에서 다운로드)                 │   │
  └─────────────────────────────────────────────────────────┘

└─────────────────────────────────────────────────────────────────┘

지원 패키지 매니저

언어패키지 매니저
JavaScriptnpm, yarn
Pythonpip, twine
JavaMaven, Gradle
.NETNuGet

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분석할 호출 스택 깊이
MemoryUsageLimitPercentProfiler 메모리 사용 한도
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패키지 저장소-
CodeGuruML 코드 리뷰-

배포 전략

전략In-placeBlue/Green
다운타임있음없음
롤백 속도느림빠름
비용낮음높음 (2배 리소스)
ELB 필요선택필수