AWS

AWS 클라우드 따라잡기 11장

IaC와 CI/CD — CloudFormation, 코드로 배포하기

이번 장은 인프라를 코드로 관리하는 방법을 다룬다.

AWS 11장 개념도

지금까지는 콘솔에서 클릭하거나 CLI로 리소스를 만들었다.

하지만 규모가 커지면 클릭은 실수가 잦고 재현이 어렵다.

IaC(Infrastructure as Code)는 인프라를 코드로 정의해 이 문제를 해결한다.

이 장의 목표는 다음과 같다.

  • IaC가 왜 필요한지 이해한다.
  • CloudFormation과 Terraform을 구분한다.
  • CI/CD 파이프라인의 개념을 잡는다.

1. IaC가 필요한 이유

인프라를 손으로 만들면 생기는 문제가 있다.

  • 같은 환경(개발/스테이징/운영)을 똑같이 재현하기 어렵다.
  • 무엇을 어떻게 바꿨는지 기록이 남지 않는다.
  • 실수로 잘못 만들면 되돌리기 어렵다.

IaC는 인프라를 텍스트 파일로 정의한다. 그러면:

  • 코드를 실행하면 언제나 똑같은 환경이 만들어진다.
  • Git으로 버전 관리하고 변경 이력을 남긴다.
  • 코드 리뷰로 인프라 변경을 검토할 수 있다.

2. CloudFormation

CloudFormation은 AWS의 IaC 서비스다.

YAML 또는 JSON으로 리소스를 정의한다.

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-iac-bucket-2026
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      ImageId: ami-xxxxxxxx

이 파일을 배포하면 CloudFormation이 정의된 리소스를 순서대로 만든다.

한 덩어리로 관리되는 이 리소스 묶음을 스택(Stack)이라고 한다.

  • 스택을 지우면 그 안의 리소스가 한 번에 정리된다.
  • 파일을 고쳐 다시 배포하면 바뀐 부분만 갱신된다(변경 세트).

3. Terraform

Terraform은 HashiCorp가 만든 IaC 도구다.

CloudFormation과 목적은 같지만 몇 가지 차이가 있다.

구분 CloudFormation Terraform
제공자 AWS 전용 멀티 클라우드
언어 YAML/JSON HCL
상태 관리 AWS가 관리 상태 파일(직접 관리)

AWS만 쓴다면 CloudFormation, 여러 클라우드를 함께 쓴다면 Terraform이 흔한 선택이다.

4. CI/CD란

CI/CD는 코드를 자동으로 빌드·테스트·배포하는 방식이다.

  • CI(지속적 통합): 코드를 커밋하면 자동으로 빌드하고 테스트한다.
  • CD(지속적 배포): 통과한 코드를 자동으로 서버에 배포한다.

사람이 손으로 배포하지 않으니 빠르고 실수가 줄어든다.

5. AWS의 배포 도구들

AWS는 CI/CD를 위한 서비스를 제공한다.

  • CodeCommit: Git 저장소. (GitHub로 대체 가능)
  • CodeBuild: 코드를 빌드하고 테스트한다.
  • CodeDeploy: EC2, ECS, Lambda에 배포한다.
  • CodePipeline: 위 단계들을 하나의 흐름으로 엮는다.

전형적인 파이프라인은 이렇다.

코드 푸시(Git)
   │
[CodePipeline]
   ├─ Source: 코드 가져오기
   ├─ Build: CodeBuild로 빌드·테스트
   └─ Deploy: CodeDeploy로 배포

커밋 한 번이 자동으로 운영까지 이어진다.

요즘은 GitHub Actions로 파이프라인을 짜고 AWS에 배포하는 방식도 매우 흔하다.

6. 배포 전략

배포할 때 서비스 중단을 줄이는 전략이 있다.

  • 롤링(Rolling): 서버를 조금씩 순서대로 교체한다.
  • 블루/그린(Blue/Green): 새 환경(그린)을 통째로 띄우고, 검증 후 트래픽을 한 번에 전환한다. 문제가 생기면 즉시 되돌린다.
  • 카나리(Canary): 트래픽의 일부(예: 5%)만 새 버전으로 보내 문제 없으면 점차 늘린다.

정리

  • IaC는 인프라를 코드로 정의해 재현성과 이력 관리를 얻는다.
  • CloudFormation은 AWS 전용, Terraform은 멀티 클라우드 IaC다.
  • CI/CD는 빌드·테스트·배포를 자동화한다.
  • 블루/그린·카나리로 무중단에 가깝게 배포한다.

마지막 장에서는 서비스를 안정적으로 운영하기 위한 모니터링, 보안, 비용 최적화를 다룬다.

댓글 0