CloudFormation을 처음 쓸 때는 한 파일에 모든 걸 욱여넣는다. VPC, 보안 그룹, EC2, RDS, ALB가 한 템플릿에 들어가고, 500줄을 넘기면서 git diff를 읽기가 불가능해진다. 어느 순간 누군가 "VPC만 따로 빼자"고 말하면서 본격적인 모듈화가 시작된다. 그런데 떼어내자마자 두 갈래 길이 나타난다. 하나는 부모 템플릿이 자식 템플릿을 직접 호출하는 Nested Stack, 다른 하나는 완전히 독립적인 Stack들이 Export/ImportValue로 값을 교환하는 Cross-Stack이다. 둘 다 "재사용"이라는 같은 목적을 표방하지만 운영 모델은 정반대다.
오늘은 이 두 패턴이 왜 동시에 존재하는지, 결합도(coupling)라는 소프트웨어 공학의 오래된 주제가 IaC에서 어떻게 다시 나타나는지를 본다. 또 Export가 사용 중일 때 소스 Stack을 삭제하지 못해 만든 사고들, Stack Policy가 IAM과 다른 보호 계층인 이유, {{resolve:secretsmanager:...}} 동적 참조의 내부 동작과 한계, DeletionPolicy/UpdateReplacePolicy/UpdatePolicy 세 가족의 미묘한 차이까지 짚는다. DOP 시험에서는 이 영역에서 "어느 패턴을 골라야 하는가" 형태의 시나리오 문제가 매 회 3~5개씩 나온다.