AWS 비용 최적화 완전 가이드 — EC2·RDS·S3·Lambda 비용을 50% 줄이는 실전 전략
AWS 청구서의 80%를 차지하는 EC2·RDS·S3·Lambda 4개 영역을 체계적으로 줄이는 방법. Savings Plans vs Reserved Instance 선택 기준, gp2→gp3 전환, VPC Gateway Endpoint로 NAT 비용 제거, CloudFront Egress 절감, Lambda Power Tuning까지 실전 전략을 정리했다.
CPU 사용률 평균 30% 미만 인스턴스는 다운사이징 우선 대상이다. Savings Plans를 구매하기 전에 반드시 인스턴스 적정 크기부터 확인할 것. t3.medium → t3.small 전환만으로도 비용이 절반이 된다.
Auto Scaling 그룹에서 On-Demand와 Spot을 혼합하는 Mixed Instances Policy를 활용하면 프로덕션 웹 서버에도 Spot을 안전하게 적용할 수 있다. On-Demand 20% + Spot 80% 비율로 구성하면 Spot 인터럽션 시 On-Demand로 자동 전환되면서 비용은 On-Demand 단일 구성 대비 55~65% 절감된다. AWS Terraform 프로바이더에서 mixed_instances_policy 블록으로 선언할 수 있다.
RDS 비용 최적화 — gp3 전환, Reserved, 개발 환경 정지
RDS는 인스턴스 비용 외에 스토리지, I/O, 백업 스토리지, 데이터 전송이 각각 별도 과금된다. 인스턴스 비용만 보면 전체 RDS 비용의 절반도 안 잡힌다.
최적화 항목
방법
절감 수준
인스턴스 과금
1년 Reserved Instance
40~43%
gp2 스토리지
gp3로 전환 (성능 동일)
20% 절감
개발환경 Multi-AZ
Single-AZ로 전환
50% 절감
백업 보관 기간
35일 → 7일 단축
백업비 80% 절감
개발·스테이징 DB
야간·주말 자동 정지
월 비용 60% 절감
gp2 → gp3 스토리지 전환 (무중단)
# 현재 스토리지 타입 확인
aws rds describe-db-instances \
--query 'DBInstances[*].{ID:DBInstanceIdentifier,Storage:StorageType,SizeGB:AllocatedStorage}' \
--output table
# gp3로 전환 (다운타임 없음, I/O 성능 기본 3,000 IOPS / 125 MB/s)
aws rds modify-db-instance \
--db-instance-identifier my-prod-db \
--storage-type gp3 \
--iops 3000 \
--storage-throughput 125 \
--apply-immediately
# 개발환경 RDS 야간 자동 정지 (EventBridge + Lambda 대안: AWS Instance Scheduler)
aws rds stop-db-instance \
--db-instance-identifier my-dev-db
gp3는 gp2 대비 20% 저렴하면서 기본 IOPS 3,000을 제공한다 — 마이그레이션 이유가 충분하다
Aurora Serverless v2는 간헐적 트래픽 환경에서 유리하다. ACU(Aurora Capacity Unit) 단위로 0.5~128 ACU 사이에서 자동 스케일링되며, 최솟값을 0.5 ACU로 설정하면 미사용 시간에 비용이 거의 발생하지 않는다. 단, 콜드 스타트 latency가 1~3초 발생할 수 있어 항상 트래픽이 있는 프로덕션보다 내부 툴·스테이징 환경에 적합하다.
개발·스테이징 RDS 인스턴스는 EventBridge + Lambda 또는 AWS Instance Scheduler로 야간·주말 자동 정지를 설정하면 해당 인스턴스 월 비용의 60% 이상을 절감할 수 있다.
S3 & 데이터 전송 비용 — 가장 자주 놓치는 숨겨진 청구
데이터 전송(Egress) 비용은 스타트업에서 가장 자주 예상을 초과하는 항목이다. AWS에서 인터넷으로 나가는 트래픽은 GB당 $0.09(첫 10TB/월)가 부과된다.
Egress 비용이 급증하는 패턴 3가지:
NAT Gateway 과사용: 프라이빗 서브넷 EC2가 외부 API를 빈번하게 호출할 때 NAT Gateway 처리 비용(GB당 $0.045)이 빠르게 누적된다.
EC2 → S3 미경유 설정: 같은 리전이라도 VPC Gateway Endpoint를 쓰지 않으면 NAT Gateway를 통해 과금될 수 있다.
AZ 간 통신: 같은 리전이라도 다른 AZ의 EC2 간 트래픽은 GB당 $0.01 부과된다. 로드밸런서 뒤 서비스들이 여러 AZ에 분산되어 있으면 누적이 상당하다.
VPC S3 Gateway Endpoint 생성 — NAT 비용 제거 (Terraform)
CloudFront는 S3 Egress 절감에 가장 효과적인 수단이다. S3 → CloudFront 구간 데이터 전송은 무료이고, CloudFront → 인터넷 단가는 S3 직접 전송보다 저렴하다. 정적 자산이 많은 서비스라면 CloudFront 캐싱 적용만으로 S3 데이터 전송 비용의 50~70%를 줄일 수 있다.
S3 스토리지 클래스 최적화는 Intelligent-Tiering을 라이프사이클 정책으로 한 번만 설정하면 이후 자동 관리된다. 30일 이상 미접근 객체는 IA(Infrequent Access) 티어로, 90일 이상은 Glacier Instant Retrieval로 이동한다. 단, 128KB 미만 소형 파일이 매우 많다면 Intelligent-Tiering 관리 비용($0.0025/1,000 객체)이 오히려 더 나올 수 있어 파일 크기 분포를 먼저 확인해야 한다.
Lambda & 서버리스 비용 — 메모리 크기가 핵심 변수
Lambda 요금은 GB-초 단위다. 메모리를 128MB에서 1024MB로 높여도 실행 시간이 그 이상 줄면 총 비용이 오히려 내려간다. AWS Lambda Power Tuning 도구를 쓰면 실제 함수로 다양한 메모리 크기를 테스트해 최적값을 찾아준다.
메모리
실행 시간
GB-초
비용(100만 호출)
128 MB
800 ms
0.100
$1.67
512 MB
200 ms
0.100
$1.67
1024 MB
80 ms
0.082
$1.37 (최적)
Lambda Power Tuning 실행 (Step Functions 기반)
# AWS Lambda Power Tuning은 SAR에서 1클릭 배포 가능
# https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:451282441545:applications~aws-lambda-power-tuning
# 최적 메모리 탐색 실행
aws stepfunctions start-execution \
--state-machine-arn arn:aws:states:ap-northeast-2:ACCOUNT_ID:stateMachine:powerTuningStateMachine \
--input '{
"lambdaARN": "arn:aws:lambda:ap-northeast-2:ACCOUNT_ID:function:my-function",
"powerValues": [128, 256, 512, 1024, 1536, 3008],
"num": 10,
"parallelInvocation": true,
"strategy": "cost"
}'
# 결과 확인 후 최적 메모리로 함수 업데이트
aws lambda update-function-configuration \
--function-name my-function \
--memory-size 1024
Lambda에서 자주 놓치는 비용 항목이 하나 더 있다. Provisioned Concurrency는 콜드 스타트를 없애주지만 대기 시간에도 비용이 발생한다. 실제로 콜드 스타트 문제가 있는지 먼저 측정하고, 있다면 Provisioned Concurrency 대신 SnapStart(Java), 또는 함수 최적화(패키지 크기 축소, 레이어 분리)를 먼저 시도하는 것이 비용 효율적이다.
Cost Explorer & Anomaly Detection — 청구 폭탄 방지 필수 설정
비용 최적화보다 더 중요한 것은 이상 징후를 즉시 알아채는 것이다. 아래 3가지 알림은 무료로 설정할 수 있으며 세팅에 10분이 걸리지 않는다.
월별 예산 알림: AWS Budgets에서 월 예상 비용의 80%·100% 도달 시 이메일·SNS 알림. 서비스별 세부 예산도 함께 설정할 것.
Cost Anomaly Detection: 전주 대비 비용이 비정상 증가할 때 자동 감지. 활성화 후 수일 학습 기간이 필요하다. NAT Gateway 실수, S3 퍼블릭 오픈, Lambda 무한루프 등을 몇 시간 안에 잡아낸다.
Compute Optimizer 활성화: EC2·Lambda·EBS 적정 크기를 머신러닝으로 분석해 구체적 권고를 제공한다. 계정당 무료. 14일 수집 후 권고가 나온다.
Cost Anomaly Detection — 머신러닝으로 비정상 비용 증가를 자동 감지한다
실제 사례 — 월 $8,200에서 $3,600으로, 6주 최적화 기록
이 사례는 MAU 10만 명 규모 B2B SaaS 스타트업이 6주 동안 수행한 최적화 결과다. 수치는 익명 처리했다.
최적화 전 구성
EC2: t3.xlarge 12대 On-Demand — 월 $3,800
RDS: db.r5.large Multi-AZ, gp2 1 TB — 월 $2,100
S3 + 데이터 전송 — 월 $1,600 (Egress 비중 70%)
NAT Gateway — 월 $700
6주 동안 적용한 변경사항
EC2: CPU 사용률 분석 → 4대 다운사이징 + Compute Savings Plans 1년 구매 → $3,800 → $1,850
RDS: gp2 → gp3 전환 + 1년 RI 구매 → $2,100 → $1,050
S3 Egress: CloudFront 캐싱 적용 (원본 요청 85% 감소) + VPC S3 Gateway Endpoint 추가 → $1,600 → $450
NAT Gateway: VPC Endpoint 추가 + 내부 서비스 직접 통신 전환 → $700 → $250
결과: 월 $8,200 → $3,600 (56% 절감). 엔지니어 2명이 총 6주, 실제 작업 시간은 80시간 미만이었다.
가장 빠른 ROI 순서는 EC2 Savings Plans → RDS gp3·RI → S3 Egress 순이다. 아키텍처 변경 없이 클릭 몇 번으로 바꿀 수 있는 항목부터 시작하고, 데이터 전송 최적화는 그 다음에 진행하는 것이 리스크를 낮추면서 효과를 극대화하는 순서다.