[SOA-C02] 이론 강의: SysOps를 위한 CI/CD & IaC 핵심! CodeSuite와 CloudFormation/CDK 완전 분석
작성자: aws | 작성일: 2026년 06월 27일 | 조회: 0 | 좋아요: 0
1. AWS CodeSuite: 완전 관리형 CI/CD 서비스
AWS CodeSuite는 개발부터 배포까지의 모든 과정을 자동화하고 오케스트레이션하는 데 필요한 서비스들을 제공합니다. SysOps 관점에서 이 서비스들을 이해하는 것은 배포 안정성과 일관성을 확보하는 데 매우 중요합니다.
1.1. 소스 코드 관리: AWS CodeCommit
AWS CodeCommit은 완전 관리형 Git 기반의 버전 관리 서비스입니다. 프라이빗 Git 리포지토리를 호스팅하며, 코드 변경 사항을 안전하게 저장하고 팀원들과 협업할 수 있도록 합니다. S3와 KMS를 이용한 암호화, IAM을 통한 접근 제어를 제공하여 보안성이 높습니다.
1.2. 코드 빌드 및 테스트: AWS CodeBuild
AWS CodeBuild는 소스 코드를 컴파일하고, 단위 테스트를 실행하며, 배포 가능한 아티팩트(예: JAR, WAR 파일, Docker 이미지)를 생성하는 완전 관리형 빌드 서비스입니다. 별도의 빌드 서버를 프로비저닝하거나 관리할 필요 없이 온디맨드로 확장되며, buildspec.yml 파일을 통해 빌드 과정을 정의합니다. 이 파일은 소스 코드 리포지토리 루트에 위치합니다.
1.3. 애플리케이션 배포: AWS CodeDeploy
AWS CodeDeploy는 EC2 인스턴스, 온프레미스 서버, Lambda 함수, Amazon ECS 서비스 등 다양한 컴퓨팅 서비스에 애플리케이션 배포를 자동화하는 서비스입니다. 배포 전략(Deployment Strategies)이 중요하며, 주요 전략은 다음과 같습니다.
- In-place Deployment (현재 위치 배포): 기존 인스턴스에 애플리케이션을 직접 업데이트합니다. 간단하지만 배포 중 다운타임이 발생할 수 있습니다.
- Blue/Green Deployment (블루/그린 배포): 새 버전(Green)을 기존 버전(Blue)과 별도로 배포하고 테스트한 후, 트래픽을 점진적으로 전환합니다. 다운타임 없이 롤백이 용이하여 고가용성 서비스에 적합합니다.
- Linear, Canary (Lambda 및 ECS): 트래픽을 점진적으로 전환하는 Blue/Green의 변형으로, Lambda 함수와 ECS 서비스에서 더 세밀한 트래픽 제어를 가능하게 합니다.
CodeDeploy는 배포 전/후 스크립트 실행(Hooks)을 통해 커스터마이징된 배포 로직을 추가할 수 있습니다.
1.4. 파이프라인 오케스트레이션: AWS CodePipeline
AWS CodePipeline은 소프트웨어 릴리스 프로세스를 자동화하고 시각화하는 완전 관리형 지속적 전달 (Continuous Delivery) 서비스입니다. CodeCommit에서 변경 사항이 감지되면, 이를 기반으로 CodeBuild를 트리거하여 빌드하고, CodeDeploy를 통해 배포하는 전체 CI/CD 워크플로우를 구성합니다. 여러 스테이지(Stage)와 액션(Action)으로 구성되며, 수동 승인(Manual Approval) 단계를 추가하여 배포 전 확인 과정을 거칠 수도 있습니다.
2. Infrastructure as Code (IaC): 인프라 관리의 자동화
CI/CD 파이프라인은 애플리케이션 코드뿐만 아니라, 애플리케이션이 실행될 인프라(Infrastructure) 또한 자동화된 방식으로 관리되어야 합니다. 이것이 바로 IaC의 핵심입니다.
2.1. AWS CloudFormation: 인프라의 청사진
AWS CloudFormation은 AWS 리소스를 코드로서 모델링하고 프로비저닝하며 관리하는 서비스입니다. YAML 또는 JSON 템플릿을 사용하여 EC2 인스턴스, RDS 데이터베이스, VPC, IAM 역할 등 모든 AWS 리소스의 구성을 선언적(declarative) 방식으로 정의합니다. 주요 특징은 다음과 같습니다.
- 반복 가능성 및 일관성: 동일한 템플릿으로 여러 환경(개발, 스테이징, 프로덕션)에 동일한 인프라를 반복적으로 배포할 수 있습니다.
- 의존성 관리: 리소스 간의 의존성을 자동으로 파악하고 올바른 순서로 생성/업데이트합니다.
- 스택(Stack): 템플릿을 통해 생성된 리소스들의 집합을 스택이라고 합니다. 스택을 생성, 업데이트, 삭제하여 관련 리소스들을 한 번에 관리할 수 있습니다.
- 스택 세트(StackSets): 여러 AWS 계정 또는 여러 리전에서 동일한 스택을 배포하고 관리할 수 있도록 지원합니다. 중앙 집중식 관리가 필요한 경우 유용합니다.
2.2. AWS CDK (Cloud Development Kit): 코드로 인프라 정의
AWS CDK는 TypeScript, Python, Java, C#, Go 등 친숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 정의할 수 있는 오픈 소스 소프트웨어 개발 프레임워크입니다. CDK 코드는 CloudFormation 템플릿으로 합성(synthesize)되어 배포됩니다. 이는 개발자들이 이미 익숙한 도구와 워크플로우를 사용하여 인프라를 정의할 수 있게 함으로써, 생산성을 높이고 복잡한 CloudFormation 템플릿 작성을 간소화하는 데 도움을 줍니다.
- 높은 추상화 수준: 복잡한 AWS 리소스 조합을 컨스트럭트(Constructs)라는 재사용 가능한 구성 요소로 캡슐화합니다.
- 프로그래밍적 유연성: 조건문, 반복문, 클래스 등 프로그래밍 언어의 모든 기능을 활용하여 인프라를 동적으로 생성하고 관리할 수 있습니다.
- 테스트 용이성: 일반적인 소프트웨어 코드처럼 인프라 코드를 테스트할 수 있습니다.
3. CI/CD 및 IaC의 시너지 효과
이 모든 서비스는 함께 작동할 때 가장 큰 시너지를 발휘합니다. 예를 들어, CodePipeline에서 인프라 변경 사항을 감지하면(CloudFormation 템플릿 변경), 이를 빌드하고(CodeBuild), 새로운 인프라를 프로비저닝하거나 업데이트한 후(CloudFormation), 그 위에 애플리케이션을 배포하는(CodeDeploy) 완전 자동화된 파이프라인을 구축할 수 있습니다. 이는 신뢰성, 속도, 보안을 극대화하고 인적 오류를 최소화하여 운영 효율성을 크게 향상시킵니다.