AWS 비용 계산(초기)
구축할 아키텍처
현재 구축할 아키텍처는 다음과 같은데요, 구성하기전에 2달에 100만원인 예산에 맞춰서 해야하기 때문에, 먼저 사용자 1000명을 기준으로 AWS calculator로 비용을 대략 계산해 보았습니다.
사용 비용 요약표
서비스월 예상 비용 (USD)사용 스펙 요약입니다.
S3 | 3.53 | 100GB 저장, 100K PUT, 1M GET, S3 Select |
CloudFront | 1.80 | 300GB 전송(캐시 미스 10%), 300K 요청 |
Transit Gateway | 153.96 | VPC Attachment 3개, 31.5GB 트래픽 |
OpenVPN | 0.00 | EC2 t2.micro, 하루 9시간 (2유저 무료) |
CodeDeploy | 0.00 | 온프레미스 미사용 → 무료 |
ECR | 0.00 | Spring 이미지 < 500MB 저장 |
Route53 | 0.50 | 퍼블릭 호스팅 존 1개, 월 15만 쿼리 |
ALB | 36.35 | ALB 2개, 요청 LCU < 1, 730시간 |
NAT Instance | 23.00 | Prod: t3.small 730시간, Dev: t2.micro 273시간 |
Auto Scaling Group | 86.54 | t3a.medium 2대(730h), t3.small 스팟 2대 |
PostgreSQL Master | 85.04 | EC2 t3.large + EBS gp3 100GB |
PostgreSQL Slave | 47.08 | EC2 t3.medium + EBS gp3 100GB |
PostgreSQL Dev | 3.94 | EC2 t2.micro 273시간 |
Redis Prod | 34.16 | EC2 t3a.medium 730시간 |
Redis Dev | 3.94 | EC2 t2.micro 273시간 |
Kafka Prod | 34.16 | EC2 t3a.medium 730시간 |
Kafka Dev | 3.94 | EC2 t2.micro 273시간 |
Prometheus+Grafana | 43.28 | EC2 t3.medium + EBS gp3 100GB |
CloudWatch | 3.82 | 일일 100MB 로그 수집, 월 3GB |
총합 | 596.14 |
결론적으로 총합은 이렇게 나왔는데요, 상세한 계산 내역은 아래에 적어두었습니다.
사용량이 얼마나 될지도 모르겠고, 사용량에 따른 인스턴스 스펙이 어느정도가 되어야 하는지 감을 잡지 못해서 GPT한테 서비스를 상세히 설명하고 사용자 1000명일 때 어느정도의 인스턴스 스펙이 필요할지 물어보면서 진행하였습니다.
S3
스토리지 용량 : 100GB
S3 Standard에 대한 PUT, COPY, POST, LIST 요청 : 100,000
S3 Standard의 GET, SELECT 및 기타 모든 요청 : 1,000,000
S3 Select에 의해 반환된 데이터 : 10GB
S3 Select에 의해 스캔된 데이터 : 100GB
→ 3.53 USD Per Month
Tiered price for: 100 GB
100 GB x 0.025 USD = 2.50 USD
총 티어 비용 = 2.50 USD (S3 Standard 스토리지 비용)
100,000 S3 Standard 스토리지에 대한 PUT 요청 x 0.0000045 USD 요청당 = 0.45 USD (S3 Standard PUT 요청 비용)
1,000,000 한 달 동안의 GET 요청 x 0.00000035 USD 요청당 = 0.35 USD (S3 Standard GET 요청 비용)
10 GB x 0.0008 USD = 0.008 USD (S3 Select 반환 비용)
100 GB x 0.00225 USD = 0.225 USD (S3 Select 스캔 비용)
2.50 USD + 0.35 USD + 0.45 USD + 0.008 USD + 0.225 USD = 3.53 USD(총 S3 Standard 스토리지, 데이터 요청, S3 선택 비용)
S3 Standard 비용 (월별): 3.53 USD
CloudFront
S3 저장 데이터 100GB라고 하고, 1인당 평균 다운로드 양 10MB, 1000명이 사용한다고 가정했을 때
전송 데이터 양: 10MB X 1000명 X 30일 → 300,000MB → 300GB
사용자에게 전송되는 데이터는 300GB
캐시 미스율 10%로 가정했을 때 오리진 전송 30GB
HTTPS 요청은 (1000명 X 10건/일 * 30일) = 300,000요청 → 무료
→ 1.8 USD Per Month (아시아태평양만)
인터넷으로 데이터 전송 비용: 0 USD
30 GB x 0.06 USD = 1.80 USD(아시아 태평양에서 오리진으로 데이터 전송)
오리진으로 데이터 전송 비용: 1.80 USD
요청 비용: 0 USD
CloudFront 가격 아시아 태평양 (월별): 1.80 USD
Transit Gateway(VPC Peering or Shared VPC 사용하지 않기)
하루 3번 배포한다고 가정했을 때, 트래픽 양
항목크기하루 3회 기준한 달 (30일 기준)
프론트 | 50MB | 150MB | 4.5GB |
백엔드 | 100MB | 300MB | 9.0GB |
AI 서버 | 200MB | 600MB | 18.0GB |
합계 | - | 1.05GB/일 | 31.5GB/월 |
→ 31.5GB
VPC Attachment 3개 (Prod, Dev, Shared)
730 시간(1달 기준) x 0.07 USD = 51.10 USD (Transit Gateway 첨부 시간당 비용)
11 월별 GB x 0.02 USD = 0.22 USD (Transit Gateway 데이터 처리 비용)
51.10 USD + 0.22 USD = 51.32 USD (Transit Gateway 첨부당 처리 및 월별 비용)
3 첨부 x 51.32 USD = 153.96 USD(첨부당 총 Transit Gateway 사용 및 데이터 처리 비용)
총 Transit Gateway 첨부당 사용 및 데이터 처리 비용 (월별): 153.96 USD
→ 153.96 USD Per Month
OpenVPN
AWS 프리티어라면 EC2 월 750시간 무료.
OpenVPN은 개발자가 배포할 때만 접근하면 되므로 러프하게 잡아서 9 to 6 가동 → 하루 9시간
EC2요금 : 9*20 → 180시간
750시간 > 180시간 → 무료로 사용 가능
OpenVPN AMI 라이선스 비용
항목내용
무료 사용자 수 | 2명 동시 접속까지 |
제한 사항 | 2명 넘으면 추가 접속 차단됨 (자동), 또는 라이선스 요구 |
라이선스 키 | 없이도 작동 가능 (기본 내장된 2유저 무료 정책) |
유료 전환 시 | 라이선스 구매 → UI 또는 CLI에서 적용 |
2명 동시 접속까지 무료 → 무료로 사용 가능
CodeDeploy
온프레미스 인스턴스로 배포를 진행할 경우에만 비용이 부과됨
우리 프로젝트는 온프레미스로 배포되는 서비스가 없기 때문에 무료
→ 무료로 사용 가능
Elastic Container Registry
비용 부과 표
단계요금 여부비고
Build → ECR Push | ❌ 대부분 무료 | 네트워크 Outbound 없음 |
ECR 저장 | ✅ 500MB 초과 시 $0.10/GB/월 | |
ECR → EC2 Pull (같은 리전) | ❌ 리전 내 트래픽 무료 | |
ECR → EC2 Pull (다른 리전) | ✅ $0.09/GB 이상 | |
ECR → 외부 전송 (퍼블릭 다운로드) | ✅ $0.15/GB 이상 |
500MB 이상 저장할 경우
다른 리전에 있는 EC2 pull 하는 일이 없기 때문에 비용 부과되지 않음
프론트엔드는 정적 파일을 S3에 배포하기 때문에 이미지 빌드가 필요하지 않음
현재 스프링부트 이미지는 366MB 이를 멀티 스테이지 빌드등 다양한 전략을 사용하면 500MB 아래로 유지 가능함.
AI는 GCP에서 배포할 예정이라 AWS ECR에는 이미지가 저장되지 않아 스프링만 저장해두면 됨
→ 500MB 이하일 경우는 무료
→ 10GB가 초과되더라도 1USD per month
Route53
사용자 수(1000명) 에 따른 DNS 요청 수
항목가정
사용자 수 | 1000명 |
사용자 1명당 평균 접속 횟수 | 하루 5회 |
하루 총 DNS 요청 수 | 1000 × 5 = 5,000건/일 |
월 총 DNS 요청 수 | 5,000 × 30일 = 150,000건/월 = 0.15백만 쿼리 |
항목프리티어초과 시 요금
퍼블릭 호스팅 존 | ❌ 없음 → $0.50/월 | |
DNS 쿼리 요청 | ✅ 매월 1백만 건 무료 | $0.40 / 백만 건 |
퍼블릭 호스팅 존 1개당 0.5 USD
→ 0.5 USD Per Month
Application Load Balancer
켜두기만 하면 나오는 비용(2개 기준)
2 로드 밸런서 x 0.0225 시간당 USD x 730 시간(1달 기준) = 32.85 USD
Application Load Balancer 시간당 고정 요금 (월별): 32.85 USD
→ 32.85 USD Per Month
사용자 수(1000명)에 따른 ALB 월간 요청량
항목예상 사용량LCU 기준
요청 수 | 2~3건/sec | ≪ 25,000 |
처리 데이터 | 수 MB/시간 | ≪ 1GB |
연결 수 | 1/sec 이하 | ≪ 6,000/sec |
평균 연결 유지 | 3초 | ≪ 3,000 concurrent |
LCU는 1개 이하
0.30 시간당 GB / 1 대상 EC2 인스턴스 및 IP 주소에 대한 LCU당 시간당 처리된 바이트(GB) = 0.30 대상 EC2 인스턴스 및 IP 주소에 대한 처리된 바이트 LCU
1 초당 새 연결 / 25 LCU당 초당 새 연결 = 0.04 새 연결 LCU
1 초당 새 연결 x 3 초 = 3 활성 연결
3 활성 연결 / 3000 LCU당 연결 = 0.001 활성 연결 LCU
Max (0 USD, 0 USD) = 0.00 요청당 유료 규칙
Max (0.3 처리된 바이트 LCU , 0.04 새 연결 LCU , 0.001 활성 연결 LCU , 0 규칙 평가 LCU ) = 0.30 최대 LCU
2 로드 밸런서 x 0.30 LCU x 0.008 시간당 LCU 가격 x 730 월별 시간 = 3.50 USD
Application Load Balancer LCU 사용 요금 (월별): 3.50 USD
→ 3.5 USD Per Month
→ 32.85 + 3.5 → 36.35 USD Per Month
NAT Instance
Prod 환경 : t3.small 인스턴스 24/7 사용
1 instances x 0.026 USD On Demand hourly cost x 730 hours in a month = 18.980000 USD
온디맨드 인스턴스(월별): 18.980000 USD
Dev 환경 : t2.mircro 하루 9시간 사용
1 instances x 0.0144 USD On Demand hourly cost x 273.75 hours in a month = 3.942000 USD
온디맨드 인스턴스(월별): 3.942000 USD
19USD + 4USD → 23USD Per Month
Auto Scaling Group
Blue, Green 메인 EC2 → t3a.medium
트래픽이 몰려 scale-out 해야할 때 스팟인스턴스 t3.small로 올리기
t3.medium 인스턴스 2개 (24/7)
2 instances x 0.052 USD On Demand hourly cost x 730 hours in a month = 75.920000 USD
온디맨드 인스턴스(월별): 75.920000 USD
t3.small 인스턴스 2개(72% 할인으로 가정)
스팟 할인: 72/100 = 0.72
요금 계산
2 인스턴스 x 0.026 USD 온디맨드 시간당 비용 x 월 730시간 = 37.960000 USD
37.960000 USD – (37.960000 USD x 0.72) = 10.628800 USD
스팟 인스턴스(월별): 10.628800 USD
75.92 USD + 10.62USD → 86.54 USD Per Month
DB
PostgreSQL을 EC2에서 운영하면서 Master-Slave 구성(CQRS 포함)을 고려한다면, CPU와 메모리 용량은 다음 기준에 따라 결정하면 안정적입니다
추천 용량
항목추천 사양 (초기 규모 기준)
CPU (vCPU) | 최소 2 vCPU, 추천 4 vCPU 이상 |
메모리 (RAM) | 최소 8GB, 추천 16GB |
스토리지 (EBS) | gp3 100GB 이상 (위에서 확정) |
목적최소 사양추천 사양
Master DB | t3.large (8GB) | ✅ t3.xlarge or m6i.xlarge |
Slave DB (Query) | t3.medium | ✅ r6i.large (RAM 중심) |
→ 서비스 확장 전까지는 이 정도면 충분히 안정적이고, 필요 시 수평 확장도 가능합니다.
Master DB(PostGreSQL)
t3.large 온디맨드 가격
1 instances x 0.104 USD On Demand hourly cost x 730 hours in a month = 75.920000 USD
온디맨드 인스턴스(월별): 75.920000 USD
EBS gp3 100GB 사용 요금
730 총 EC2 시간 / 730 시간(1달 기준) = 1.00 월별 인스턴스
100 GB x 1.00 월별 인스턴스 x 0.0912 USD = 9.12 USD (EBS 스토리지 비용)
EBS 스토리지 비용: 9.12 USD
총 Amazon Elastic Block Store(EBS) 비용 (월별): 9.12 USD
75.92 USD + 47.08 USD → 85.04 USD Per Month
Slave DB(PostGreSQL)
t3.medium 온디맨드 가격
1 instances x 0.052 USD On Demand hourly cost x 730 hours in a month = 37.960000 USD
온디맨드 인스턴스(월별): 37.960000 USD
EBS gp3 100 GB 사용 요금
730 총 EC2 시간 / 730 시간(1달 기준) = 1.00 월별 인스턴스
100 GB x 1.00 월별 인스턴스 x 0.0912 USD = 9.12 USD (EBS 스토리지 비용)
EBS 스토리지 비용: 9.12 USD
총 Amazon Elastic Block Store(EBS) 비용 (월별): 9.12 USD
37.96USD + 9.12USD → 47.08USD Per Month
PostGreSQL(Dev)
t2.micro(MEM 1GB), 하루 9시간 진행
1 instances x 0.0144 USD On Demand hourly cost x 273.75 hours in a month = 3.942000 USD
온디맨드 인스턴스(월별): 3.942000 USD
→ 3.94 USD Per Month
Redis(Prod)
필요한 사용량 : Mem 4GB → t3a.medium
1 instances x 0.0468 USD On Demand hourly cost x 730 hours in a month = 34.164000 USD
온디맨드 인스턴스(월별): 34.164000 USD
→ 34.16 USD Per Month
Redis(Dev)
t2.micro(MEM 1GB), 하루 9시간 진행
1 instances x 0.0144 USD On Demand hourly cost x 273.75 hours in a month = 3.942000 USD
온디맨드 인스턴스(월별): 3.942000 USD
→ 3.94 USD Per Month
Kafka(Prod)
필요한 사용량 : Mem 4GB → t3a.medium
1 instances x 0.0468 USD On Demand hourly cost x 730 hours in a month = 34.164000 USD
온디맨드 인스턴스(월별): 34.164000 USD
→ 34.16 USD Per Month
Kafka(Dev)
t2.micro(MEM 1GB), 하루 9시간 진행
1 instances x 0.0144 USD On Demand hourly cost x 273.75 hours in a month = 3.942000 USD
온디맨드 인스턴스(월별): 3.942000 USD
→ 3.94 USD Per Month
모니터링 툴
항목CloudWatchPrometheus + Grafana
주요 역할 | AWS 리소스 로그/지표 수집 | 애플리케이션/시스템 메트릭 수집 |
수집 대상 | AWS 서비스 로그, 인프라 지표 (EC2, ALB, RDS 등) | 주로 앱 레벨 메트릭 (HTTP 요청, DB 상태 등) |
수집 방식 | PUSH 기반 (CloudWatch Agent 등) | PULL 기반 (Prometheus가 주기적으로 수집) |
보관/쿼리 | 로그 저장, 쿼리 가능 (Logs Insights) | 시계열 메트릭 저장, 시계열 쿼리 |
시각화 | CloudWatch Dashboard | Grafana (대시보드 전용 도구) |
알람/이벤트 | CloudWatch Alarm + EventBridge | Prometheus Alertmanager (알람 직접 구성) |
AWS와 통합 | ✅ 매우 강력 (ALB, Lambda, ECS, API GW 등) | ❌ 수동 설정 필요 (Cloud Exporter 등 별도 구성) |
SaaS 가능 여부 | ✅ AWS 관리형 | ✅ Grafana Cloud or 직접 호스팅 |
커스터마이징 | 제한적 (포맷 고정) | 매우 유연 (라벨, 쿼리, 룰 자유롭게 정의) |
Prometheus + Grafana
항목권장 스펙비고
vCPU | 2개 이상 (t3.medium) | Prometheus는 다중 타임라인 병렬 처리 시 CPU 사용 |
메모리 | 4GB 이상 (8GB 권장) | 시계열 데이터 캐싱 + Grafana 시각화 |
디스크 | gp3 SSD, 50~100GB | Prometheus TSDB가 디스크를 주기적으로 write |
네트워크 | 일반 네트워크 OK | 주로 내부 통신 (Node Exporter, Redis Exporter 등) |
t3.medium
1 instances x 0.0468 USD On Demand hourly cost x 730 hours in a month = 34.164000 USD
온디맨드 인스턴스(월별): 34.164000 USD
EBS gp3 100GB
730 총 EC2 시간 / 730 시간(1달 기준) = 1.00 월별 인스턴스
100 GB x 1.00 월별 인스턴스 x 0.0912 USD = 9.12 USD (EBS 스토리지 비용)
EBS 스토리지 비용: 9.12 USD
총 Amazon Elastic Block Store(EBS) 비용 (월별): 9.12 USD
34.16 USD + 9.12USD → 43.28 USD
CloudWatch
항목월 무료 제공량
Logs (수집) | 5GB 데이터 수집 |
Logs (저장) | 5GB 저장 |
Logs (아웃바운드) | 0.5GB (로그 검색 및 스트리밍) |
지표 (Custom Metrics) | 10개 |
지표 (Basic EC2 Metrics) | 항상 무료 |
지표 API 호출 | 1,000,000건 |
Dashboard | 3개 |
사용자 1000명 기준 로그 수집시 예상 요금
- EC2 인스턴스 1~3대 (Spring Boot, DB, Redis 포함)
- /var/log/syslog, application.log, nginx.log 등 수집
항목수치 예시
하루 생성량 | 100MB (모든 서버 합산) |
월간 생성량 | 100MB × 30일 = 3,000MB = ~3GB |
프리티어 5GB 보다 작기 때문에 무료
항목요금
로그 수집 초과 | $0.50 / GB |
로그 저장 초과 | $0.03 / GB·월 |
로그 검색 (Insights) | $0.005 / GB (1GB 검색 시 $0.005) |
경보(Alert) | 표준 알람 $0.10/개·월 (프리티어 외) |
10GB 수집한다고 치면 5GB 초과
수집한 로그는 하루 한번 Lambda를 통해 S3로 전송하는 방식으로 진행할 예정
CloudWatch Logs 수집 및 스토리지 비용 (월별): 3.82
→ 3.82 USD Per Month
이렇게 계산을 하였습니다.
계산 결과
계산을 해본 결과, 2달 써야 하고, 마지막 1달은 쿠버네티스를 사용하여 아키텍처를 구축할 예정인데 거의 600달러를 쓰게 되면 예산이 턱없이 부족했습니다.
그래서 비용을 줄일 부분을 생각해봐야했습니다.
우선 가장 크게 보이는건 Transit Gateway였는데, 이 부분을 VPC Peering으로 바꿔도 VPC 확장할 일이 없을 거 같기 때문에 문제가 없을 것 같았습니다.
비용 줄인 버전의 비용과 인스턴스 스펙은 다음 포스팅에서 작성하겠습니다.