1. Overview
개요 및 배경
- 소스 코드(CodeCommit, S3, GitHub 등)를 가져와 컴파일, 테스트 및 소프트웨어 패키징을 수행하는 완전 관리형 빌드 서비스임
- 다양한 프로그래밍 언어(Java, Python, Node.js 등)에 대한 사전 빌드된 Docker 이미지를 제공하며, 사용자 지정 Docker 이미지를 통해 실행 환경 확장 가능
- 빌드 실패 시 Amazon EventBridge를 통해 이벤트를 감지하고 알림을 트리거하며, CloudWatch Logs 및 Amazon S3를 활용하여 빌드 지표와 로그를 분석함
주요 리소스 및 기능
- buildspec.yml
- CodeBuild의 빌드 지침을 정의하는 핵심 구성 파일로, 반드시 소스 코드의 최상위 루트(Root) 디렉터리에 위치해야 함
- env (환경 변수): 일반 텍스트 변수뿐만 아니라 AWS Systems Manager (SSM) Parameter Store 및 AWS Secrets Manager와 연동하여 데이터베이스 비밀번호 등의 자격 증명을 안전하게 주입함
- phases (빌드 단계): install, pre_build, build, post_build 단계로 나뉘어 실행할 명령어를 정의함
- artifacts (아티팩트): 빌드 완료 후 컨테이너에서 추출하여 Amazon S3에 최종 저장할 결과물(빌드 아웃풋)을 지정함
- cache (캐시): 후속 빌드 속도 향상을 위해 S3 버킷에 임시로 캐시할 종속성 파일(Dependencies)을 정의함
- 로컬 테스트 및 트러블슈팅
- 깊은 수준의 디버깅이 필요한 경우, 로컬 데스크톱에 Docker와 CodeBuild Agent를 설치하여 클라우드와 동일한 빌드 환경을 로컬에서 재현하고 테스트 가능
- VPC 내부 실행 (VPC 연동)
- 기본적으로 CodeBuild 컨테이너는 사용자의 VPC 외부에서 실행되나, VPC 구성(VPC ID, 서브넷 ID, 보안 그룹 ID)을 명시하여 VPC 내부에서 실행되도록 설정 가능
- 이를 통해 프라이빗 서브넷에 위치한 Amazon RDS, ElastiCache, 내부 ALB 등에 안전하게 접근하여 통합 테스트(Integration Testing) 및 데이터베이스 쿼리를 수행함
헷갈리는 포인트 (Tips)
- 데이터베이스 비밀번호와 같은 민감한 정보를 buildspec.yml에 평문(Plain-text)으로 작성하는 것은 심각한 보안 안티 패턴이므로, 반드시 Secrets Manager 또는 SSM Parameter Store를 참조하도록 구성해야 함
- 빌드 단계에서 프라이빗 네트워크 내의 리소스(예: 프라이빗 DB 인스턴스)에 접근해야 한다면, CodeBuild 프로젝트에 VPC 구성(VPC Configuration)을 반드시 추가해야 내부망 통신이 가능해짐
2. Advanced
개요 및 배경
- CodeBuild의 고급 구성(환경 변수, 보안, 트리거, 테스트 리포트)을 활용하여 복잡한 CI/CD 요구사항을 충족함
- 풀 리퀘스트(Pull Request, PR) 검증 아키텍처를 구축하여 메인 브랜치 병합 전 코드 품질을 강제로 보장하고 충돌을 방지함
- 빌드 배지(Build Badges)와 시각적인 테스트 리포트를 통해 파이프라인의 가시성을 높임
주요 리소스 및 기능
- 환경 변수 (Environment Variables)
- 기본(Default): AWS에서 자동으로 제공하는 메타데이터 (예: 리전, 빌드 ARN, 빌드 ID 등)
- 사용자 지정 정적(Custom Static): 빌드 시점에 정의되며, start-build API 호출 시 재정의(Override) 가능함
- 동적(Dynamic): 런타임에 AWS Systems Manager (SSM) Parameter Store 또는 AWS Secrets Manager에서 외부 연동 값을 안전하게 가져옴
- 보안 및 서비스 역할 (Security & IAM)
- CodeBuild는 IAM 서비스 역할(Service Role)을 통해 CodeCommit, S3(아티팩트 업로드), CloudWatch Logs, Secrets Manager 등에 접근함
- AWS KMS를 연동하여 빌드 출력 아티팩트, 캐시, 로그 등에 대해 전송 중(In-transit) 및 미사용(At-rest) 상태의 데이터 암호화를 보장함
- 빌드 배지 및 PR 검증 트리거 (Build Badges & Triggers)
- 특정 브랜치의 최신 빌드 성공/실패 상태를 표시하는 빌드 배지 URL을 제공함 (CodeCommit, GitHub, Bitbucket 지원)
- CodeCommit에서 PR 생성 및 업데이트 시 Amazon EventBridge를 통해 이벤트가 발생하며, 이를 타겟으로 CodeBuild를 직접 실행하거나 AWS Lambda를 호출하여 동작을 제어함
- GitHub 연동 시에는 웹훅(Webhook)을 통해 이벤트 기반으로 CodeBuild를 시작함
- 테스트 리포트 (Test Reports)
- 단위 테스트, 기능 테스트 등의 결과를 CodeBuild UI에서 합격률 등 시각적 지표로 확인하는 보고서 그룹(Report Groups) 기능 지원
- 지원되는 XML/JSON 포맷(JUnit XML, NUnit XML, Cucumber JSON 등)으로 리포트가 생성되어야 하며, 해당 경로를 buildspec.yml 파일 내에 정의하여 자동 연동함
헷갈리는 포인트 (Tips)
- CodeCommit의 풀 리퀘스트 내역에 빌드 상태(시작됨, 성공, 실패 등)를 댓글로 자동 작성하려면, CodeBuild 단독 기능으로는 불가능함. 반드시 EventBridge로 이벤트를 라우팅하고, PR 상태를 파싱하여 댓글을 게시하는 AWS Lambda 함수를 병행 구성해야 하는 아키텍처 패턴이 중요함
- 데이터베이스 비밀번호 같은 민감 정보를 정적(Static) 환경 변수로 buildspec.yml에 하드코딩하는 것은 금물임. 반드시 동적(Dynamic) 환경 변수를 선언하여 파이프라인 실행 시 Secrets Manager에서 값을 추출하도록 구성해야 함
'Cloud Native > AWS: Automation' 카테고리의 다른 글
| 6. CodeArtifact (0) | 2026.03.03 |
|---|---|
| 5. CodeDeploy (0) | 2026.03.03 |
| 3. CodePipeline (0) | 2026.03.03 |
| 2. CodeCommit (0) | 2026.03.03 |
| 1. Introduction to CI/CD in AWS (0) | 2026.03.03 |