서버 한 대를 콘솔에서 클릭으로 만드는 건 쉽다. 그런데 VPC, 서브넷, 보안 그룹, EC2, RDS, ALB, Lambda 수십 개를 클릭으로 만들고, 그걸 스테이징·프로덕션에 똑같이 복제하고, 6개월 뒤에 "이 보안 그룹이 왜 이렇게 열려 있지?"를 추적하려 하면 지옥이 시작된다. 손으로 만든 인프라는 재현할 수 없고, 변경 이력이 없으며, 사람의 기억에만 의존한다. 인프라를 코드로(Infrastructure as Code, IaC) 정의한다는 발상은 이 문제를 정면으로 친다 — 인프라를 텍스트 파일에 선언하면, 버전 관리(git)가 가능해지고, 코드 리뷰가 가능해지고, 똑같은 환경을 명령 한 번으로 재생산할 수 있다. AWS CloudFormation은 이 IaC를 AWS 위에서 구현한 서비스다.
DVA-C02에서 CloudFormation은 배포 도메인의 중심축이고, SAM·CDK의 기반이라 반드시 알아야 한다. 단순 암기(!Ref vs !GetAtt, DeletionPolicy)도 나오지만, "스택 업데이트가 왜 위험한가", "롤백은 어떻게 동작하나", "교차 스택 참조의 함정" 같은 동작 원리가 더 자주 나온다. 이번 글은 선언적 IaC가 명령적 스크립트와 무엇이 다른지, CloudFormation이 어떻게 의존 그래프를 풀어 생성 순서를 정하는지, 스택 업데이트와 롤백의 내부 동작은 어떤지, 그리고 여러 보호 메커니즘이 갈라지는 이유를 깊이 파고든다.