이번 장은 인프라를 코드로 관리하는 방법을 다룬다.
지금까지는 콘솔에서 클릭하거나 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
댓글은 운영자만 작성할 수 있어요.