기준: DVA-C02 시험 가이드오류 제보
Week 2에서 본 EC2의 모든 layer — Nitro·인스턴스 패밀리·AMI·Security Group·Key Pair·User Data·EBS·Instance Store·ALB·NLB·ASG — 는 따로 외워두면 잘 안 풀리는 시험이다. 시험 문제는 시나리오로 나오고, 그 시나리오에서 "SG는 다 열려 있는데 왜 안 되지?", "왜 새 인스턴스가 ALB에서 안 보이지?", "왜 cross-AZ traffic 비용이 폭발했지?" 같은 질문이 던져진다. 이 질문들은 각 layer를 따로 보면 답이 안 나오고, layer들이 어떻게 맞물려 동작하는지를 봐야 풀린다.
오늘은 Week 2의 모든 개념을 한 production-grade 아키텍처 안에 묶고, 그 위에서 헷갈리기 쉬운 함정과 시험 시나리오를 정리한다. 마지막엔 시나리오 기반 종합 연습 문제 12문항으로 실전 감각을 점검한다.
전형적인 3-tier 웹 서비스를 EC2 위에 짓는다고 가정한다. 사용자 → CloudFront → ALB → ASG(EC2) → RDS Multi-AZ + ElastiCache 구조다. 이 구조 안에서 Week 2의 각 개념이 어디에 위치하는지를 본다.
[Route 53 (DNS, alias to ALB)]
│
▼
[CloudFront (edge cache + WAF)]
│
▼
[ALB in 3 AZs (cross-zone ON, ACM cert)]
HTTPS:443 ┌──────┴──────┐
▼ ▼
(path /api/*) (path /*)
│ │
▼ ▼
[api-tg] [web-tg]
(target=instance, /healthz)
│ │
┌──────────┴─────────────┴──────────┐
▼ ▼
[ASG: Mixed Instance Policy]
Min 3, Max 30, Desired 6
┌─ AZ-a ─┐ ┌─ AZ-b ─┐ ┌─ AZ-c ─┐
│ EC2 #1 │ │ EC2 #3 │ │ EC2 #5 │
│ EC2 #2 │ │ EC2 #4 │ │ EC2 #6 │
│ gp3 root│ │ gp3 root│ │ gp3 root│
│ io2 data│ │ io2 data│ │ io2 data│
└────────┘ └────────┘ └────────┘
│
IAM Instance Profile (S3 read, Secrets Manager read)
User Data: Secrets Manager에서 DB pass fetch
IMDSv2 required, hop-limit 1
│
▼
[Security Group: web-sg]
Inbound: 443 from ALB SG
22 from Bastion SG
Outbound: 3306 to db-sg, 6379 to cache-sg, 443 to 0.0.0.0/0
│
▼
┌─ AZ-a ──┐ ┌─ AZ-b ──┐
[RDS Multi-AZ Primary/Standby (synchronous), db-sg]
[ElastiCache Redis Cluster (Multi-AZ, cache-sg)]
이 아키텍처에서 Week 2 각 개념이 어떻게 작동하는지는 아래 흐름과 같다.
시작점 - 사용자가 https://app.example.com 으로 요청
app.example.com 인증서 제공 (ACM 발급, 자동 갱신)Auto Scaling이 한 인스턴스를 더 띄울 때
aws secretsmanager get-secret-value로 DB pass fetch, /etc/app/secrets.env에 chmod 600으로 저장EC2_INSTANCE_LAUNCHING이 인스턴스를 Pending:Wait에 머물게 함complete-lifecycle-action/healthz가 5회 연속 200 → healthy. 이때부터 traffic 수신인스턴스가 죽거나 scale-in 될 때
HealthCheckType=ELB이므로 그 인스턴스를 terminate 결정EC2_INSTANCE_TERMINATING이 Terminating:Waitcomplete-lifecycle-action 후 인스턴스 종료, EBS volume은 DeleteOnTermination=true면 같이 삭제이 시퀀스에 등장한 모든 개념이 Week 2의 시험 범위다. 시험 문제는 이 시퀀스 어딘가에서 한 단계가 망가졌을 때를 시나리오로 묻는다.
보통 ① NACL의 ephemeral port outbound 누락, ② Endpoint SG(PrivateLink) inbound 누락, ③ conntrack 한도 초과(인스턴스 타입별), ④ Route Table에 IGW/NAT route 누락 중 하나. SG만 보지 말고 패킷 경로 전체를 따라가야 한다.
Health check가 통과하는 시점과 application이 fully ready되는 시점이 다르다. health check path를 /healthz로 두고 application 안에서 ready flag가 true일 때만 200 응답하게 하거나, ASG의 lifecycle hook으로 warmup 시간 확보.
NLB cross-zone을 켜두고 AZ별 target 수가 다르거나, 두 AWS 계정의 ZoneName 매핑이 달라 PrivateLink가 cross-AZ로 흐를 때. ZoneId 기준으로 align해야 함.
Lazy load 때문이다. Fast Snapshot Restore를 켜거나 dd로 모든 block을 한 번 read.
IMDS에서 누구나 읽을 수 있다. Secrets Manager + 인스턴스 프로파일로 변경.
lowest-price strategy → capacity-optimized 또는 price-capacity-optimized로 변경. 여러 instance type을 Override에 등록.
st1·sc1은 부팅 불가. SSD(gp2/gp3/io1/io2)만 부팅 가능.
일반 gp3로는 불가. io1/io2 + Nitro + 같은 AZ + Multi-Attach + cluster file system 필요. 보통 EFS가 더 맞는 답.
영구 데이터 소멸. 영구 저장이 필요하면 EBS, 공유가 필요하면 EFS·S3.
IMDSv2 강제 (HttpTokens=required, HttpPutResponseHopLimit=1). Capital One 사고의 원인.
target-type=ip인데 보안 그룹이 매치 안 됨IP 타입은 SG 참조가 인스턴스 단위 target과 다르게 동작. ENI의 SG를 정확히 inbound로 허용해야 함.
Target Tracking이 켜져 있으면 매번 metric을 보고 desired를 다시 조정. 수동 조정이 필요하면 정책 일시 정지 또는 suspend-processes.
| A | B | 핵심 차이 |
|---|---|---|
| Instance Store | EBS | 임시(호스트 종속) vs 영구(네트워크 디스크) |
| Stop | Terminate | EBS 보존(옵션) vs 기본 삭제(DeleteOnTermination) |
| Stop | Hibernate | RAM 소멸 vs RAM을 EBS에 dump 후 stop |
| Reboot | Stop+Start | 같은 호스트 vs 다른 호스트(public IP 변경) |
| Reserved Instance | Savings Plan | 인스턴스 패밀리·리전 commit vs 시간당 dollar commit |
| Standard RI | Convertible RI | 패밀리 고정 vs 패밀리 교환 가능(가격 ↑) |
| Compute SP | EC2 Instance SP | 다양한 서비스 적용 vs 특정 패밀리·리전만 |
| Public IP | Elastic IP | 휘발성·무료 vs 고정·미사용 시 과금·2024년부터 사용 중에도 과금 |
| Security Group | NACL | 인스턴스 stateful Allow only vs subnet stateless Allow+Deny |
| ALB | NLB | L7 HTTP routing vs L4 TCP/UDP 고정 EIP |
| ALB | API Gateway | LB로 Lambda 호출 vs API 관리 기능 풍부 |
| Cluster PG | Spread PG | 같은 랙(저지연) vs 다른 랙(HA) |
| Cluster PG | Partition PG | 단일 그룹 vs 여러 파티션(Cassandra rack-awareness) |
| Target Tracking | Step Scaling | 자동 목표값 추적 vs 명시적 임계값 step |
| gp3 | gp2 | IOPS·throughput 독립 설정 vs 크기 종속 |
| io1 | io2 | 99.8-99.9% vs 99.999% durability + GiB당 최대 IOPS 50 vs 1,000 (io2는 모두 Block Express) |
| EBS | EFS | block 단일 인스턴스 vs NFS 다중 인스턴스 |
| EFS | FSx for Lustre | 일반 NFS vs HPC 병렬 FS |
| Cross-Zone ALB | Cross-Zone NLB | 기본 ON·무료 vs 기본 OFF·켜면 cross-AZ data transfer 비용 |
| Sticky ALB | Sticky NLB | 쿠키 기반 vs Source IP affinity |
| IMDSv1 | IMDSv2 | GET만 → SSRF 취약 vs PUT 토큰 + GET 헤더 안전 |
| User Data | cfn-init | 1회 부트스트랩 vs CloudFormation metadata 기반 정교한 초기화 |
| Lifecycle Hook (Launching) | Lifecycle Hook (Terminating) | warmup 동안 InService 지연 vs graceful shutdown 동안 종료 지연 |
| capacity-optimized | lowest-price | 회수율 낮음(production) vs 비용 낮음(batch) |
| 약어 | 풀네임 |
|---|---|
| EC2 | Elastic Compute Cloud |
| AMI | Amazon Machine Image |
| EBS | Elastic Block Store |
| EFS | Elastic File System |
| FSx | (제품군 - Lustre·Windows·NetApp ONTAP·OpenZFS) |
| EIP | Elastic IP |
| IMDS | Instance Metadata Service (v1/v2) |
| ELB | Elastic Load Balancing |
| ALB / NLB / CLB / GWLB | Application/Network/Classic/Gateway Load Balancer |
| ASG | Auto Scaling Group |
| RI | Reserved Instance |
| SP | Savings Plan |
| PG | Placement Group |
| NACL | Network Access Control List |
| DLM | Data Lifecycle Manager |
| FSR | Fast Snapshot Restore |
| SNI | Server Name Indication |
| TLS | Transport Layer Security |
| ACM | AWS Certificate Manager |
| mTLS | mutual TLS (client certificate) |
| VPC | Virtual Private Cloud |
| IGW | Internet Gateway |
| NAT | Network Address Translation |
| IOPS | Input/Output Operations Per Second |
| EFA | Elastic Fabric Adapter |
| DEK | Data Encryption Key (KMS envelope encryption) |
| AES-XTS | Advanced Encryption Standard - XEX-based Tweaked-codebook with ciphertext Stealing |
| CMK | Customer Master Key (KMS) |
| LCU/NLCU/GLCU | Load Balancer Capacity Unit (ALB/NLB/GWLB) |
| MRK | Multi-Region Key (KMS) |
DVA는 SAA와 같은 EC2 범위를 다루지만 시험 문제의 시점이 다르다. 같은 ASG라도 DVA는 ① IMDSv2 토큰을 어떻게 boto3에서 다루는지, ② CodeDeploy의 Blue/Green이 ALB target group을 어떻게 조작하는지, ③ Lambda에서 EFS를 어떻게 마운트하는지, ④ User Data 안에서 Secrets Manager 호출 시 인스턴스 프로파일 권한 attach 시점이 언제인지 같은 코드·SDK·옵션 이름 레벨까지 묻는다.
| DVA 시점 |
|---|
| boto3에서 IMDSv2 토큰 자동 처리 (botocore 1.13+) |
| Lambda → EFS mount (access point 필요) |
| ALB → Lambda 직접 호출 (event 형식이 API Gateway와 다름) |
| User Data 안에서 인스턴스 프로파일로 Secrets Manager 호출 |
| CodeDeploy가 ASG + ALB와 통합되는 메커니즘 |
| Lifecycle hook의 SNS/SQS notification target |
| EBS Multi-Region snapshot copy 시 KMS Multi-Region Key |
Week 2는 EC2 layer 전체를 봤다. EC2 자체의 가상화·인스턴스 패밀리·AMI에서 시작해, 그 위의 네트워크 통제(SG, Key Pair, User Data), 디스크 layer(EBS, Instance Store, EFS/FSx), 그리고 트래픽 분산 layer(ALB/NLB, ASG)까지 한 production 아키텍처가 어떻게 짜이는지를 따라왔다. 이 전체가 시험에선 한 시나리오 안에 묶여서 나오므로, 각 layer를 따로 외우는 것보다 "한 인스턴스가 트래픽을 받기까지의 전체 경로"를 머릿속에 그릴 수 있어야 한다.
Week 3부터는 이 EC2 layer 위에 IAM·Lambda·DynamoDB·API Gateway·CodePipeline 같은 DVA-특화 layer가 쌓인다. EC2 layer가 단단히 정리돼 있어야 그 위의 개발자-시점 layer가 잘 올라간다.
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
한 e-commerce 회사의 ALB + ASG production 시스템이 매일 오후 7시 sale 시작 시 first 5분간 RPS가 평소의 20배로 spike한다. Target Tracking(CPU 60%) scaling policy를 쓰는데 사용자들이 5xx를 받고 있다. 가장 적절한 개선은?
문제 2
한 회사가 EC2 인스턴스에서 매일 자정에 ML training을 돌리고 결과를 S3에 업로드한다. 비용을 최소화하면서 작업이 24시간 안에만 끝나면 된다. 가장 적절한 구매 옵션은?
문제 3
한 개발자가 EC2 인스턴스의 IMDS에서 IAM 자격증명을 가져오려는데 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/MyRole가 401을 반환한다. 가장 가능성 있는 원인은?
문제 4
한 회사가 EC2를 두 대 운영하고 같은 디렉터리에서 read·write 해야 한다. 동시 access가 필요하고, 두 EC2가 다른 AZ에 있다. 가장 적절한 솔루션은?
문제 5
한 회사가 ALB로 마이크로서비스를 운영한다. api.example.com/orders/*는 orders 서비스로, api.example.com/users/*는 users 서비스로 보내야 한다. 두 서비스는 각각 ASG로 운영된다. 가장 정확한 구성은?
문제 6
한 EC2 인스턴스가 user-data 안에서 aws s3 cp s3://bucket/app.tar.gz /opt/를 호출하는데 Unable to locate credentials 에러가 발생한다. 가장 가능성 있는 원인은?
문제 7
한 회사가 production EC2의 EBS volume(미암호화 gp2)을 암호화하려고 한다. downtime을 최소화하려면?
문제 8
한 회사가 새 인스턴스가 ALB target group에 등록되자마자 traffic을 받아 application warm-up 전 5xx를 반환한다. 가장 적절한 대응은?
문제 9
한 회사가 NLB로 게임 서버 traffic을 분산한다. 사용자는 5개 AZ에 골고루 분포하는데, 각 AZ의 인스턴스 수가 다르다(AZ-a 10대, AZ-b 5대, AZ-c 2대). traffic이 불균등하다는 보고가 들어왔다. 가장 적절한 조치는?
문제 10
한 ML팀이 Lambda 함수에서 2GB ML 모델을 load해야 한다. Lambda layer 한도(250MB)를 초과한다. 가장 적절한 솔루션은?
문제 11
한 인스턴스가 sporadic하게 Connection refused를 반환한다. CPU·메모리는 여유 있고 SG는 다 열려 있다. CloudWatch에서 conntrack_allowance_exceeded 지표가 발생한다. 가장 적절한 대응은?
문제 12
한 회사가 EC2 production을 ALB + ASG로 운영한다. CodeDeploy로 Blue/Green 배포를 설정하려는데, ALB의 어떤 기능을 사용하는가?
| 점수 | 평가 |
|---|---|
| 11-12 | 우수 - Week 3 진행, EC2 layer 완전 이해 |
| 8-10 | 양호 - 틀린 문제 복습 후 진행, 특히 함정 12가지 재점검 |
| 5-7 | 보통 - EC2 layer 재학습 권장, 특히 ASG·lifecycle hook |
| 0-4 | 미흡 - Week 2 처음부터 다시. SG·EBS·ALB 각 layer 정독 |
HttpTokens=required)가 SSRF 방어 표준.