DOP-C02 시험에서 SDLC Automation 도메인(22%)은 가장 많은 배점을 차지합니다. 그 중심에는 CodePipeline, CodeBuild, CodeDeploy의 조합이 있습니다. 이 세 서비스를 단순히 아는 것이 아니라, 특정 요구사항에서 어떤 조합이 옳고 어떤 것이 함정인지 판별하는 능력을 갖춰야 합니다.
CodePipeline 아키텍처 심화
CodePipeline은 소스, 빌드, 테스트, 배포를 하나의 자동화된 워크플로우로 연결하는 오케스트레이터입니다. 직접 빌드하거나 배포하지 않고, 각 단계에서 적합한 서비스를 호출하고 결과를 기다립니다.
파이프라인 스테이지 구성
전형적인 파이프라인 구조는 다음과 같습니다:
Source: CodeCommit, GitHub(CodeStar Connections 경유), S3에서 코드 변경 감지 및 트리거 Build: CodeBuild에서 컴파일, 단위 테스트, Docker 이미지 빌드, 아티팩트 생성 Test: CodeBuild에서 통합 테스트, 보안 스캔, 품질 게이트 Staging Deploy: CodeDeploy 또는 CloudFormation으로 스테이징 환경 배포 Approval: 수동 승인 단계 (규정 준수 요구사항이 있을 때) Production Deploy: CodeDeploy로 프로덕션 배포
파이프라인 병렬 실행과 직렬 실행
단일 스테이지 내에 여러 액션을 추가하면 병렬로 실행됩니다. 예를 들어 단위 테스트와 정적 코드 분석을 동시에 실행하여 파이프라인 총 실행 시간을 단축할 수 있습니다. 다른 스테이지에 배치하면 직렬로 실행됩니다.
교차 계정 파이프라인
중앙 개발 계정에서 CodePipeline을 운영하고 스테이징/프로덕션 계정에 배포하는 패턴이 시험에 자주 출제됩니다. 이 경우 배포 대상 계정에 교차 계정 IAM 역할을 설정하고, CodePipeline 서비스 역할에 해당 역할을 Assume할 수 있는 권한을 부여해야 합니다. S3 아티팩트 버킷은 양쪽 계정에서 접근 가능하도록 버킷 정책과 KMS 키 정책을 모두 설정해야 합니다.
CodeBuild buildspec.yml 완전 분해
buildspec.yml은 CodeBuild의 핵심입니다. 각 phase가 실패하면 이후 phase는 실행되지 않는다는 점이 시험에서 중요한 포인트입니다.
buildspec.yml 구조
CODEBUILD_BUILD_SUCCEEDING 환경변수
시험에서 중요하게 출제되는 내용입니다. build 단계에서 단위 테스트가 실패했음에도 post_build에서 Docker 이미지가 ECR에 푸시되는 문제가 발생할 수 있습니다. post_build는 build 실패 여부와 관계없이 항상 실행되기 때문입니다.
해결책은 CODEBUILD_BUILD_SUCCEEDING 환경변수를 확인하는 것입니다. 이전 단계가 모두 성공하면 1, 하나라도 실패하면 0으로 설정됩니다. 조건부 로직을 통해 테스트 실패 시 이미지 푸시를 차단할 수 있습니다.
자동화 테스트 통합 설계
단위 테스트 vs 통합 테스트의 배치 전략
단위 테스트는 빠르게 실행되므로 build 단계에서 실행합니다. 통합 테스트는 외부 API 연동, 데이터베이스 검증 등을 포함하여 수십 분에서 몇 시간이 소요될 수 있습니다.
시험에 실제 출제된 시나리오: "통합 테스트가 최대 2시간이 소요되는 경우, 파이프라인에서 어떻게 처리해야 하는가?" 정답은 별도 CodeBuild 프로젝트를 파이프라인의 Test 스테이지에 추가하는 것입니다. CodeBuild는 최대 8시간 타임아웃을 지원하며, CodePipeline은 CodeBuild 작업 완료를 자동으로 대기합니다. Lambda(최대 15분)는 이 시나리오에서 오답입니다.
테스트 게이트와 품질 게이트
CodeBuild 내에서 테스트 결과를 Reports 기능으로 기록하고, 빌드 상태에 따라 파이프라인 진행 여부를 자동으로 제어합니다. 코드 커버리지 임계값이나 취약점 스캔 결과를 기반으로 빌드를 실패 처리하면, CodePipeline이 자동으로 다음 스테이지로 진행하지 않습니다.
CodeGuru Reviewer 통합
CodeGuru Reviewer는 CodeCommit 또는 GitHub 리포지토리와 연동하여 pull request 시 자동으로 코드 리뷰를 수행합니다. Java와 Python을 지원하며, 일반적인 버그 패턴, 보안 취약점, AWS API 오용 등을 감지합니다. 코드 리뷰 자동화 요구사항이 있는 시나리오에서 등장합니다.
Secrets Manager와 Parameter Store 통합
CodeBuild에서 외부 자격증명을 안전하게 참조하는 방법이 시험에 자주 출제됩니다.
buildspec.yml의 env.secrets-manager 섹션에서 Secrets Manager의 시크릿을 직접 참조할 수 있습니다. env.parameter-store 섹션에서는 SSM Parameter Store의 값을 참조합니다. 두 경우 모두 CodeBuild 서비스 역할에 해당 리소스에 대한 읽기 권한이 있어야 합니다.
잘못된 방법: 환경 변수에 자격증명을 하드코딩하거나 S3에 평문 파일로 저장. 이는 CloudTrail과 CodeBuild 로그에 자격증명이 노출될 위험이 있습니다.
헬스 체크와 배포 검증
배포 후 자동화된 검증은 DOP-C02에서 핵심 패턴입니다.
CodeDeploy ValidateService 훅
appspec.yml에서 ValidateService 훅을 정의하면 배포 완료 후 자동으로 검증 스크립트를 실행합니다. 검증 실패 시 CodeDeploy가 자동으로 롤백을 트리거합니다.
ALB 헬스 체크와 CodeDeploy 연동
EC2 기반 배포에서 ALB 헬스 체크가 통과하기 전까지 해당 인스턴스로 트래픽을 전송하지 않습니다. CodeDeploy는 ALB 헬스 체크 결과를 배포 성공 기준으로 사용할 수 있습니다.
ECS Blue/Green의 테스트 리스너
ECS Blue/Green 배포에서 CodeDeploy는 ALB에 테스트 리스너(포트 8080 등)를 구성합니다. BeforeAllowTraffic 훅이 테스트 리스너를 통해 Green 태스크 세트를 검증하고, 검증 성공 시에만 프로덕션 포트로 트래픽을 전환합니다. 이 메커니즘은 "트래픽 전환 전 자동 검증"이 요구사항인 시험 문제에서 핵심 정답 포인트입니다.
시험 핵심 정리
"단위 테스트 실패 시 Docker 이미지 ECR 푸시 차단" -- buildspec.yml post_build에서 CODEBUILD_BUILD_SUCCEEDING 환경변수 확인 후 조건부 푸시
"통합 테스트가 2시간 소요되는 경우 파이프라인 처리" -- 별도 CodeBuild 프로젝트를 Test 스테이지에 추가 (Lambda 15분 제한으로 부적합)
"트래픽 전환 전 Green 환경 자동 검증 + 실패 시 자동 롤백" -- CodeDeploy BeforeAllowTraffic 훅 (Lambda 함수로 검증 로직 실행)
"교차 계정 파이프라인 배포" -- 대상 계정에 교차 계정 IAM 역할 생성 + CodePipeline 서비스 역할에 AssumeRole 권한 부여 + S3 및 KMS 정책 설정
"CodeBuild에서 DB 자격증명 안전하게 참조" -- buildspec.yml env.secrets-manager 또는 env.parameter-store 섹션 사용
"코드 품질 자동 검토 (Java/Python pull request)" -- Amazon CodeGuru Reviewer와 CodeCommit/GitHub 리포지토리 연동
"여러 환경(스테이징/프로덕션) 순차 배포" -- 단일 CodePipeline에 스테이징 Deploy 스테이지 + (선택적) 수동 승인 + 프로덕션 Deploy 스테이지 구성
"파이프라인 내 병렬 테스트 실행" -- 동일 스테이지 내 여러 액션 배치 (각각 CodeBuild 프로젝트)