CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
  • Week 1
    • 1.운영자가 보는 AWS 인프라: 리전, AZ, 그리고 책임의 경계선
    • 2.IAM의 운영자 사용설명서: 사용자·그룹·역할·정책 평가 알고리즘
    • 3.IAM 심화: Permission Boundary, SCP, Identity Center로 짓는 가드레일
    • 4.AWS Organizations: 100개 계정을 한 사람이 운영하는 법
    • 5.Week 1 통합 복습: 운영자 시나리오로 다시 보는 첫 주
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
    • 1.CloudFormation: 인프라를 코드로, 운영자의 시각으로
    • 2.Change Set, Drift Detection, Rollback Trigger: 안전한 CFn 운영의 3대 기둥
    • 3.Nested Stack, Cross-Stack Reference, StackSets: 대규모 IaC 운영
    • 4.Service Catalog, AppConfig, AppRegistry: 거버넌스와 동적 설정의 기술
    • 5.Week 6 종합 복습: CloudFormation 운영 완전 정복
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← SOA-C02/Week 6/Day 5

기준: SOA-C02 시험 가이드·오류 제보

SOA-C02· AssociateWeek 6 · Day 5읽기 약 23분

Day 5 - Week 6 종합 복습: CloudFormation 운영 완전 정복

Week 6는 CloudFormation을 단순 "인프라 생성 도구"에서 "대규모 조직의 운영 플랫폼"으로 바라보는 주간이었다. Day 1의 템플릿 구조와 스택 라이프사이클에서 시작해, Day 2의 변경 안전 관리(Change Set, Drift, Rollback Trigger), Day 3의 대규모 IaC 패턴(Nested/Cross-Stack/StackSets), Day 4의 자가 서비스와 동적 설정(Service Catalog, AppConfig, AppRegistry)까지 이어졌다.

SOA-C02에서 CloudFormation은 단순 API 암기 문제가 아니다. "어떤 상황에서 어떤 도구를 선택해야 하는가", "이 변경이 Replacement를 유발하는가", "스택이 이 상태일 때 어떤 복구 방법이 가능한가"를 판단하는 능력을 측정한다. 이 복습은 그 판단력을 기르는 데 집중한다.

Week 6 핵심 개념 맵

CloudFormation 운영 플랫폼
============================================================

[Template 구조]                    [안전한 변경 관리]
 - Resources만 필수                 - Change Set (dry-run)
 - 10개 섹션 (나머지 선택)           - Drift Detection (괴리 감지)
 - Pseudo Parameters              - Rollback Trigger (자동 복구)
 - Intrinsic Functions            - Stack Policy (수정 차단)
 - Dynamic References             - Termination Protection
        │                                   │
        ▼                                   ▼
[Stack 라이프사이클]              [대규모 IaC 패턴]
 ROLLBACK_COMPLETE                 - Nested Stack (모듈화)
   → 삭제 후 재생성                 - Cross-Stack (팀 간 공유)
 UPDATE_ROLLBACK_FAILED            - StackSets (조직 전체)
   → continue-update-rollback      - Auto-deployment (신규 계정)
 DELETE_FAILED
   → --retain-resources
        │                                   │
        ▼                                   ▼
[리소스 보호]                     [거버넌스 & 동적 설정]
 DeletionPolicy: Snapshot/Retain    - Service Catalog (자가 서비스)
 UpdateReplacePolicy: Snapshot      - Launch Constraint (대리 실행)
 cfn-signal (readiness 확인)        - AppConfig (런타임 설정)
 AutoScalingRollingUpdate           - AppRegistry (자산 그룹화)

핵심 비교표: 혼동하기 쉬운 개념들

스택 패턴 비교:

항목Nested StackCross-StackStackSets
관계부모-자식 (cascade 삭제)독립 (느슨한 결합)한 템플릿 → 멀티 대상
라이프사이클부모가 자식 통제각자 독립StackSet이 일괄 관리
값 전달!GetAtt Stack.Outputs.Key!ImportValue 'export-name'Parameters
주요 제약부모 삭제 시 자식도 삭제Import 중 Export 변경 불가SCP/Permission 충돌 주의
사용 사례단일 앱 컴포넌트 분리팀 간 VPC/IAM 공유조직 보안/컴플라이언스 표준

변경 안전 도구 비교:

항목Change SetDrift DetectionStack PolicyRollback Trigger
시점업데이트 전사후 상시 점검업데이트 중업데이트 후
목적변경 내용 미리 확인수동 변경 감지특정 리소스 수정 차단서비스 이상 시 자동 복구
핵심 출력Replacement: True/False/ConditionalMODIFIED/DELETED/IN_SYNCAllow/Deny자동 롤백 시작
트리거운영자 수동 실행cron/수동모든 update-stackCloudWatch Alarm

리소스 보호 정책 비교:

정책적용 시점보호 대상기본값
DeletionPolicy: Delete스택 삭제 시해당 리소스Delete (삭제)
DeletionPolicy: Retain스택 삭제 시해당 리소스보존 (삭제 안 됨)
DeletionPolicy: Snapshot스택 삭제 시RDS/EBS/ElastiCache스냅샷 후 삭제
UpdateReplacePolicy: Snapshot업데이트로 인한 교체 시RDS/EBS스냅샷 후 기존 삭제
Stack Policy Update:Delete Denyupdate-stack 실행 시지정 리소스(설정 안 하면 모두 허용)
Termination Protectiondelete-stack 실행 시스택 전체비활성화

거버넌스 서비스 비교:

항목Service CatalogAppConfigAppRegistry
목적IaC 자가 서비스 + 표준 강제런타임 설정 동적 변경애플리케이션 자산 그룹화
핵심 기능Launch Constraint (대리 실행)점진 배포 + 자동 롤백Application + Attribute Group
트리거사용자 클릭 (Provision)설정 변경 배포 시작수동 연결 or 자동 태깅
검증Template ConstraintJSON Schema / Lambda Validator-

💡 관련 이론: CloudFormation의 전체 설계는 분산 시스템 이론의 "State Reconciliation" 패턴이다. Kubernetes 컨트롤러가 desired state와 current state를 지속적으로 비교해 수렴시키는 것처럼, CloudFormation은 템플릿(desired state)와 실제 AWS 리소스(current state)의 차이를 계산해 변경 작업을 수행한다. Drift Detection은 이 수렴 루프의 "역방향 검사"다. 운영자가 템플릿 밖에서 리소스를 변경했을 때, 현실이 desired state에서 벗어났음을 감지한다. Leslie Lamport의 "State Machine Replication"(1984) 이론이 이 패턴의 이론적 기반이다.

중요 실수 컬렉션: 시험에 나오는 함정

CloudFormation Template & 스택:

실수증상올바른 이해
ROLLBACK_COMPLETE에서 update-stack 시도Stack is not in a valid state 오류삭제 후 재생성만 가능
UPDATE_ROLLBACK_FAILED에 delete-stack실패 가능continue-update-rollback --resources-to-skip
cfn-signal Timeout 너무 짧게 설정"Failed to receive signal"yum update만 5~10분, PT15M 이상 권장
RDS MultiAZ 변경이 Replacement인 줄 모름데이터 손실Change Set으로 사전 확인 필수
S3 BucketName 변경이 Replacement인 줄 모름버킷과 데이터 삭제DeletionPolicy: Retain 설정 후 Change Set 확인
Stack Policy 없으면 "모두 거부" 착각의도치 않은 수정Stack Policy 없으면 모두 허용이 기본

Nested Stack & Cross-Stack:

실수증상올바른 이해
부모 스택 삭제 후 자식 스택도 삭제됨예상치 못한 리소스 삭제Nested Stack은 cascade 삭제가 기본
Import 중인 Export 값 변경 시도"Export is in use" 오류list-imports로 사용 스택 파악 후 먼저 분리
!ImportValue 안에 !Sub 중첩 시도템플릿 검증 오류ImportValue는 단독 사용만 가능
Nested Stack 자식 템플릿을 직접 접근부모 우회 관리 어려움가급적 부모 스택을 통해 관리

StackSets:

실수증상올바른 이해
SCP 허용 범위 밖 리전에 배포 시도Stack Instance 생성 실패IAM Policy Simulator로 사전 확인
Stack Instance 없이 StackSet 삭제 시도"StackSet is not empty" 오류Stack Instance 먼저 삭제 후 StackSet 삭제
FailureTolerance 너무 낮게 설정일부 계정 실패로 전체 중단초기 배포 시 10~15% 설정
Service-Managed에서 수동 IAM Role 생성불필요 + 충돌 가능Service-Managed는 Organizations Trusted Access만 필요

AppConfig:

실수증상올바른 이해
Alarm treat-missing-data: breaching 설정데이터 없음 = ALARM → 즉시 롤백notBreaching 설정 필수
FinalBakeTime 없이 AllAtOnce 사용즉시 100% + 감시 없음FinalBakeTime으로 배포 후 모니터링 추가
Validator 없이 잘못된 JSON 배포앱 파싱 에러JSON Schema Validator 반드시 추가

가상의 사례로, 2024년 물류 스타트업 L사에서 CloudFormation으로 관리하던 RDS 인스턴스의 MultiAZ를 false에서 true로 변경했다. 운영자는 "MultiAZ 활성화는 인플레이스 변경"이라고 알고 있었다. 그러나 해당 인스턴스의 엔진 버전이 함께 업그레이드되는 경우 Replacement가 트리거될 수 있었다. Change Set을 사용했다면 Replacement: Conditional을 보고 추가 확인을 했을 것이다. 결과적으로 RDS가 교체되어 새 엔드포인트가 생겼고, 애플리케이션 연결 설정을 변경하지 못한 서버들이 5분간 DB 접속 실패를 겪었다. 이후 모든 RDS 변경은 반드시 Change Set 확인 + UpdateReplacePolicy: Snapshot 표준이 됐다.

CloudFormation의 Replacement 판단 기준은 AWS 내부 리소스 핸들러(Resource Handler)가 결정한다. CloudFormation Registry에 등록된 각 리소스 타입의 스키마에 각 속성의 "createOnlyProperties", "readOnlyProperties" 등이 정의돼 있다. "createOnlyProperties"에 해당하는 속성을 변경하면 반드시 Replacement가 발생한다. AWS CLI로 aws cloudformation describe-type --type RESOURCE --type-name AWS::RDS::DBInstance를 실행하면 스키마를 확인할 수 있다. 이를 이해하면 "왜 이 속성 변경은 Replacement를 유발하는가"를 외우지 않고도 판단할 수 있다.

SOA-C02 시험 핵심 판단 체계

시나리오: "스택이 X 상태입니다. 어떻게 해야 하는가?"

Stack 상태별 대응:

ROLLBACK_COMPLETE
  → 삭제 후 재생성. update-stack, continue-update-rollback 불가

UPDATE_ROLLBACK_FAILED
  → continue-update-rollback [--resources-to-skip 문제 리소스]
  → 가장 먼저 이 명령 시도

DELETE_FAILED
  → delete-stack --retain-resources 문제리소스ID
  → 잔여 리소스 수동 정리 후 재삭제

CREATE_FAILED (--on-failure DO_NOTHING 설정 시)
  → 실패 리소스가 남아있어 직접 디버그 가능
  → 디버그 완료 후 반드시 수동 정리

시나리오: "어떤 CFn 패턴을 써야 하는가?"

Q: 하나의 앱을 여러 팀이 각자 배포하는 컴포넌트로 나누고 싶다
   → Nested Stack

Q: 팀 A의 VPC를 팀 B, C, D의 앱 Stack이 공유하고 싶다
   → Cross-Stack Reference (Export/ImportValue)

Q: 50개 계정 모두에 GuardDuty를 배포하고, 신규 계정도 자동 포함하고 싶다
   → StackSets + Service-Managed + AutoDeployment=true

Q: 개발자가 권한 없어도 표준 인프라를 만들 수 있게 하고 싶다
   → Service Catalog + Launch Constraint

시나리오: "데이터 손실 방지"

RDS/ElastiCache 삭제:
  DeletionPolicy: Snapshot (Stack 삭제 시 스냅샷)

RDS 업데이트로 인한 교체:
  UpdateReplacePolicy: Snapshot (업데이트 중 교체 시 스냅샷)

변경 전 안전 확인:
  Change Set → Replacement 필드 확인
  Replacement=True 이면 UpdateReplacePolicy 확인

Stack 실수 삭제 방지:
  Termination Protection 활성화

특정 리소스 수정 방지:
  Stack Policy + Deny Update:Replace/Delete

⚠️ 함정: DeletionPolicy와 UpdateReplacePolicy는 "스택 삭제"와 "업데이트 중 교체"라는 완전히 다른 상황에 적용된다. RDS를 보호하려면 두 가지를 모두 설정해야 한다. DeletionPolicy: Snapshot만 있고 UpdateReplacePolicy가 없으면, 스택 삭제 시에는 스냅샷이 생기지만 업데이트 중 교체가 발생할 때는 기존 RDS가 스냅샷 없이 삭제된다. 시험에서 "RDS 변경 시 데이터 손실을 방지하려면?" 문제의 완전한 답은 UpdateReplacePolicy: Snapshot이다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

RDS DB 인스턴스 타입을 db.t3.medium에서 db.r5.large로 변경하려 한다. 데이터 손실 없이 안전한지 어떻게 확인하는가?

문제 2

Stack이 ROLLBACK_COMPLETE 상태다. 동일한 이름으로 Template를 수정해 재배포하려 한다. 올바른 절차는?

문제 3

회사가 Organizations로 50개 계정을 관리한다. 모든 계정에 보안 Baseline(CloudTrail, GuardDuty)을 일괄 배포하고, 앞으로 새로 추가되는 계정도 자동으로 포함되길 원한다. 가장 적합한 솔루션은?

문제 4

운영팀이 Production Stack을 실수로 삭제하는 것을 방지하려 한다. 어떤 방법이 가장 직접적인가?

문제 5

개발자가 IAM에서 RDS 생성 권한이 없는데, 표준 RDS 패키지를 자가 서비스로 프로비저닝하게 하려 한다. 어떻게 구성하는가?

문제 6

Lambda 함수의 Feature Flag를 코드 재배포 없이 점진적으로 토글하고 싶다. 배포 중 에러율이 급증하면 자동으로 이전 설정으로 돌아가야 한다. 가장 적합한 도구와 설정은?

문제 7

누군가 콘솔에서 CloudFormation으로 관리되는 보안 그룹에 0.0.0.0/0:22 규칙을 직접 추가했다. 이 변경을 자동으로 감지해 알림을 받으려면?

문제 8

Cross-Stack Reference에서 Stack A가 VPC ID를 Export하고, Stack B와 Stack C가 !ImportValue로 사용 중이다. Stack A의 VPC ID Export를 다른 VPC로 변경하려 한다. 어떻게 해야 하는가?

문제 9

Stack 업데이트 완료 후 10분 내에 HTTP 5xx 에러율이 급증하면 자동으로 이전 상태로 되돌아가도록 설정하려 한다. 어떤 구성이 필요한가?

문제 10

Template에서 항상 최신 Amazon Linux 2 AMI를 자동으로 사용하고 싶다. 하드코딩이나 Mapping 없이 구현하는 방법은?

문제 11

AppConfig Deployment Strategy에서 FinalBakeTimeInMinutes: 15를 설정했다. AllAtOnce 전략으로 배포했을 때 정확한 동작은?

문제 12

Service Catalog Launch Constraint Role에 Permission Boundary를 설정하는 이유는?

다음 주 예고 (Week 7)

Week 7은 배포·프로비저닝 주간이다. Elastic Beanstalk의 배포 정책(All at Once/Rolling/Immutable/Traffic Splitting), CodeDeploy의 배포 훅과 AppSpec, EC2 Image Builder로 Golden AMI 파이프라인 구축, Launch Template과 Auto Scaling 심화를 다룬다.

SOA-C02에서 배포 정책의 속도/비용/다운타임 트레이드오프는 빈출 주제다. 예: "다운타임 없이 최소 비용으로 배포하려면?" → Rolling. "빠르게 배포하되 문제 시 즉시 롤백 가능하려면?" → Immutable.

💡 관련 이론: 배포 전략은 마틴 파울러(Martin Fowler)가 2010년 정의한 "Deployment Pipeline" 개념의 구체화다. Blue-Green, Canary, Rolling은 트레이드오프가 다른 세 가지 근본 전략이다. AWS 서비스마다 이 전략을 다른 이름으로 구현한다: Beanstalk(Immutable=Blue-Green 유사), CodeDeploy(Blue/Green), AppConfig(Canary), CloudFormation ASG(AutoScalingRollingUpdate). 이름보다 "어떤 메커니즘인가"를 이해하면 어떤 서비스의 문제도 풀 수 있다.

이전Service Catalog, AppConfig, AppRegistry: 거버넌스와 동적 설정의 기술Week 6 · Day 4다음 Elastic Beanstalk과 다섯 가지 배포 정책, 그리고 무중단의 진짜 비용Week 7 · Day 1

참고 공식 자료

  • SOA-C02 공식 시험 안내(새 탭에서 열림)
  • AWS CloudFormation 공식 문서(새 탭에서 열림)
  • Amazon RDS · Aurora 공식 문서(새 탭에서 열림)
  • AWS Lambda 공식 문서(새 탭에서 열림)
  • AWS IAM 공식 문서(새 탭에서 열림)
  • Amazon CloudWatch 공식 문서(새 탭에서 열림)

이 페이지

  • Week 6 핵심 개념 맵
  • 핵심 비교표: 혼동하기 쉬운 개념들
  • 중요 실수 컬렉션: 시험에 나오는 함정
  • SOA-C02 시험 핵심 판단 체계
  • 종합 연습 문제
  • 다음 주 예고 (Week 7)