CI/CD 파이프라인 구성

CodePipeline으로 빌드→테스트→배포 자동화, SAM/CloudFormation IaC를 정리합니다.

개발자가 코드를 수정할 때마다 직접 서버에 올리고, 테스트하고, 배포한다면 굉장히 번거롭겠죠. CI/CD는 이 과정을 자동화하는 방법입니다. 코드를 Git에 올리기만 하면 나머지 빌드, 테스트, 배포 과정이 자동으로 진행됩니다.

DVA-C02 시험에서 CI/CD는 코드 변경을 어떻게 자동으로 빌드, 테스트, 배포하는가를 집중적으로 묻습니다.

 

CI/CD란?

CI (Continuous Integration, 지속적 통합): 여러 개발자가 코드를 합칠 때 자동으로 빌드하고 테스트합니다. CD (Continuous Deployment, 지속적 배포): 테스트를 통과한 코드를 자동으로 서버에 배포합니다.

쉽게 말하면 코드 수정 → 자동 테스트 → 자동 배포가 한 번에 이루어지는 파이프라인입니다.

 

AWS CI/CD 서비스 체인

AWS에는 CI/CD의 각 단계를 담당하는 서비스들이 있고, 이것들을 CodePipeline으로 연결합니다.

소스(CodeCommit/GitHub) → 빌드(CodeBuild) → 배포(CodeDeploy) = 파이프라인(CodePipeline)

 

CodeCommit

Git 기반의 소스 코드 저장소입니다. GitHub과 거의 비슷하지만 AWS 안에서 완전히 관리됩니다. 브랜치, 풀 리퀘스트(PR), 코드 리뷰, 이벤트 트리거 등을 지원합니다.

CodeBuild

완전 관리형 빌드 서비스입니다. 코드를 실행 파일이나 배포 패키지로 변환하는 작업(컴파일, 테스트 실행, 패키징 등)을 담당합니다. 서버를 직접 관리할 필요가 없습니다.

buildspec.yml 파일로 빌드 단계를 정의합니다. install: 필요한 도구와 라이브러리 설치 pre_build: 빌드 전 준비 작업 (Docker 로그인, 환경 설정) build: 실제 컴파일 및 테스트 실행 post_build: 빌드 후 처리 (알림 발송, 이미지 태깅) artifacts: 빌드 결과물 저장 위치 지정

CodeDeploy

빌드가 완료된 코드를 실제 서버에 배포합니다. EC2 인스턴스, Lambda 함수, ECS 컨테이너에 코드를 배포할 수 있습니다.

appspec.yml 파일로 배포 방법을 정의합니다. EC2/온프레미스: 설치 전/후 실행할 훅(hook) 스크립트 정의 Lambda: 트래픽을 새 버전으로 얼마씩 전환할지 정의 (예: 10%씩 점진적 전환) ECS: 태스크 정의와 로드 밸런서 설정

CodePipeline

위의 서비스들(소스, 빌드, 배포)을 하나로 연결해 전체 파이프라인을 자동화합니다. 쉽게 말하면 자동화 공장의 컨베이어 벨트입니다.

소스 → 빌드 → 테스트 → 배포의 각 단계를 자동으로 연결 필요한 경우 수동 승인 단계 추가 가능 (예: 운영 배포 전 담당자 확인) EventBridge와 연동해 특정 이벤트 발생 시 파이프라인 자동 실행

 

SAM (Serverless Application Model)

SAM은 Lambda 같은 서버리스 애플리케이션을 코드(YAML 파일)로 정의하고 배포하는 프레임워크입니다. 인프라를 직접 콘솔에서 클릭하는 대신 코드로 정의하는 방식(IaC: Infrastructure as Code)입니다.

sam build: 코드를 빌드하고 배포 패키지를 준비합니다. sam deploy: CloudFormation을 통해 AWS에 배포합니다. sam local invoke: 실제 AWS에 올리지 않고 내 컴퓨터에서 Lambda 함수를 테스트합니다. 개발 단계에서 매우 유용합니다. template.yaml: Lambda 함수, API Gateway, DynamoDB 테이블 등을 선언적으로 정의하는 설정 파일

 

시험 핵심 정리

"빌드 단계 정의 파일" -- buildspec.yml (CodeBuild)

"배포 방법 정의 파일" -- appspec.yml (CodeDeploy)

"소스→빌드→배포 자동화" -- CodePipeline

"서버리스 IaC, 로컬 테스트" -- SAM

"Git 기반 AWS 소스 저장소" -- CodeCommit

"빌드 결과물 패키징" -- CodeBuild artifacts

"파이프라인에 수동 승인 추가" -- CodePipeline 수동 승인 단계

buildspec.yml(빌드 방법)과 appspec.yml(배포 방법)의 역할 차이를 정확히 구분할 것

블로그 목록으로 돌아가기