🔥 RDS 비용의 구조: 스토리지·I/O·백업

2360자
27분

처음 RDS 청구서를 받았던 날, 같은 계정의 EC2 청구서와 두 줄을 나란히 열어 두고 한참을 살폈다. EC2 청구서는 인스턴스 비용과 EBS 비용 두 줄로 묶여 있었는데, RDS 청구서는 인스턴스, 스토리지, 프로비저닝된 IOPS, 백업 스토리지, 데이터 전송이 다섯 줄로 따로 나와 있었다. 같은 한 달의 같은 워크로드인데 청구서의 라인 수가 달라 보일 만큼 정리 방식이 달랐다. 한 줄씩 짚어 가며 알게 됐다. RDS는 EC2보다 비싼 게 아니라 EC2에서도 AWS가 같은 다섯 가지를 청구하고 있었지만 두 줄로 묶어 두어 표면에 안 보였을 뿐이라는 사실이다.

RDS란 무엇인가: 관리형 DB의 의미에서 RDS의 청구가 다섯 갈래(인스턴스 시간·스토리지 GB월·프로비저닝된 IOPS·백업 스토리지·DTO)로 나뉜다는 사실을 적어 두었다. 여기서는 그 다섯 갈래를 단가의 단위까지 밀어붙여 본다. 어디가 무료 한도이고 어디부터 청구가 시작하는지, 같은 한 줄 안에서도 baseline과 추가가 어떻게 나뉘는지를 따라간다. 가격 스냅샷의 기준일은 2026-04-30, region은 ap-northeast-2(서울)다. 같은 구조는 region이 바뀌어도 그대로 유지되고 AWS는 단가만 region 계수에 맞춰 조정한다.

RDS 청구의 다섯 라인이 한 막대 위에 분리된 다섯 영역으로 쌓이는 구조: Instance hour, Storage, Provisioned IOPS, Backup storage, Data transfer

청구의 다섯 라인: 한 줄로 보기

RDS 청구서의 라인은 다섯이다. AWS RDS for MySQL 요금 문서가 라인을 그대로 명시한다.

스토리지(월별 GB당): 스토리지는 RDS DB 인스턴스에 프로비저닝한 스토리지 용량입니다. 월별 프로비저닝된 IOPS: 프로비저닝된 IOPS 속도로, 사용된 IOPS와 상관없음. 백업 스토리지: 고객이 시작한 모든 데이터베이스 스냅샷과 자동 데이터베이스 백업. 데이터 전송: RDS DB 인스턴스에서 인터넷을 통한 데이터 송수신.

(번역: AWS가 스토리지·프로비저닝된 IOPS·백업 스토리지·데이터 전송 네 라인을 인스턴스 시간 라인 위에 별도로 청구한다는 의미.)

다섯 라인은 단위가 모두 다르다. 인스턴스 시간은 시간당, 스토리지는 GB-월, 프로비저닝된 IOPS는 IOPS-월, 백업 스토리지는 GB-월, 데이터 전송은 GB당이다. 한 달 청구서에서 한 라인이 다른 라인보다 비례적으로 클 때 그 이유는 라인의 단위가 워크로드의 어떤 면을 따라갔는지를 보면 또렷이 짚을 수 있다.

라인단위무료 한도청구가 시작하는 지점
인스턴스 시간시간당무료 한도 12개월 750시간(t3.micro/t4g.micro 단일 AZ)그 외 모든 사용 시간
범용(SSD) 스토리지GB-월무료 한도 12개월 20GB그 외 프로비저닝된 모든 GB
프로비저닝된 IOPSIOPS-월gp3는 baseline 3,000 IOPS + 125 MB/s 무료gp3 baseline 위 추가 IOPS, io1·io2는 모든 IOPS
백업 스토리지GB-월DB 인스턴스 프로비저닝 사이즈 100% 까지 무료그 100%를 초과하는 분
데이터 전송GB당같은 AZ 내부 + 인터넷 송신 첫 100GB/월cross-AZ + 인터넷 송신 100GB 초과

이 표가 여기서의 골격이다. 라인별로 한 단씩 짚어 가며 무료 구간과 청구가 시작하는 경계가 거기에 그어지는 이유를 따라간다.

인스턴스 시간: 1초 단위 청구의 운영적 의미

AWS는 인스턴스 시간 라인을 시간당 단가에 사용 시간을 곱해 청구한다. 단위는 시간이지만 측정은 1초 단위다. AWS RDS 공식 문서는 2019-04-25부터 RDS가 1초 단위 청구로 전환했고, 인스턴스 시작·생성·복원 시점에는 AWS가 10분 floor를 두고 있다고 적는다. 30초만 켜고 끈 인스턴스도 AWS가 10분어치를 청구한다는 뜻이다.

운영적인 효과가 두 가지다. 하나는 짧은 burst 워크로드(예: 야간 ETL 30분 잡)에서 1초 단위 측정이 그대로 유지되더라도 시작 시점의 floor가 운영 단가의 하한선을 만든다는 것이다. 자주 띄웠다 끄는 운영 패턴은 floor를 여러 번 밟게 되어 30분 켜고 30분 끄는 패턴과 1시간 연속 켜는 패턴이 같은 합계 청구를 받는다. 다른 하나는 Multi-AZ와 장애 조치: 가용성의 기제에서 적었듯 Multi-AZ 토글이 인스턴스 청구를 두 배로 키운다는 것이다. 단가가 두 배가 아니라 AWS가 standby 인스턴스를 따로 청구해 합계가 두 배가 된다.

서울 region의 인스턴스 단가는 us-east-1(버지니아 북부)와 같은 구조 위에 region 계수를 곱한 값이다. 같은 db.t4g.micro 단일 AZ MySQL 인스턴스가 us-east-1에서 시간당 약 0.018 USD라면 ap-northeast-2에서는 약 0.022 USD로 region 프리미엄이 붙는다(작성 시점 RDS Pricing 페이지 기준이며 단가는 region 탭에서 직접 확인). 한 달(730시간) 24시간 가동하면 인스턴스 라인만 약 16 USD다. Multi-AZ로 토글하면 약 32 USD다.

이 라인이 가장 단순해 보이지만 한 가지 함정이 있다. 인스턴스를 중지해도 AWS는 storage·백업 스토리지·프로비저닝된 IOPS를 계속 청구한다. 같은 문서가 짧게 적는다.

RDS DB 인스턴스가 중지된 동안에는 RDS DB 인스턴스 시간이 아니라 프로비저닝된 스토리지(프로비저닝된 IOPS 포함)와 백업 스토리지에 대해 요금이 청구됩니다.

중지가 비용 0을 의미하지 않는다. RDS는 7일 후 자동 재시작 정책을 두고 있어서, 장기간 비용 0을 만들려면 삭제한 뒤 수동 snapshot으로 보관해야 한다.

인스턴스 시간 라인. Single-AZ 한 인스턴스 vs Multi-AZ 두 인스턴스(primary + standby)의 청구 구조 비교, 1초 단위 + 10분 floor 표기

스토리지 단가: gp3와 io2의 구조

RDS 표준의 스토리지 타입은 셋이다. 범용(SSD) gp2/gp3, 프로비저닝된 IOPS(SSD) io1/io2 Block Express, 그리고 마그네틱(deprecated 2026-04-30, 신규 RDS는 사용 불가). RDS란 무엇인가: 관리형 DB의 의미에서 마그네틱 deprecation을 적었으니 여기서는 gp3와 io2 두 갈래만 짚는다.

gp3는 baseline이라는 무료 구간이 명시적이다. AWS RDS 문서 기준 gp3 볼륨은 모든 크기에서 3,000 IOPS + 125 MB/s 처리량을 baseline으로 무료 제공한다. baseline 위로 추가 IOPS·throughput을 프로비저닝하면 AWS는 그 추가분만 IOPS-월·MB·s-월 단가로 청구한다. 같은 gp3 라인 안에서도 무료 구간(baseline)과 청구 영역(추가)이 나뉜다.

내가 직접 계산하면 다음과 같다. gp3 100 GB 볼륨에 baseline만 사용하면 스토리지 라인은 100 GB × $0.115/GB-월(us-east-1 기준) = $11.5/월 한 줄로 끝난다. 같은 100 GB에 8,000 IOPS와 250 MB/s를 프로비저닝하면 스토리지 라인 $11.5에 추가 IOPS 라인 (8,000-3,000) × $0.02/IOPS-월 = $100/월, 추가 throughput 라인 (250-125) × $0.080/MB·s-월 = $10/월이 별도 라인으로 더해져 총 $121.5/월이다. 단가의 단위가 다르기 때문에 AWS가 한 라인이 아니라 세 라인으로 청구서에 적는다.

io2 Block Express는 단가 구조가 다르다. baseline 무료 구간이 없고 AWS는 모든 IOPS를 단계별 단가로 청구한다. AWS RDS 문서 기준 io2의 IOPS 단가는 세 단계로 나누어 둔다. 첫 32,000 IOPS는 한 단가, 32,001~64,000 IOPS는 더 싼 단가, 64,001 IOPS 이상은 더 싼 단가. 첫 단계가 가장 비싸고 단계가 올라갈수록 AWS는 단위 IOPS당 단가를 더 깎아 준다.

내가 직접 계산하면 다음과 같다. io2 100 GB에 50,000 IOPS를 프로비저닝하면 스토리지 라인은 100 GB × $0.125/GB-월 = $12.5/월에, IOPS 라인은 (32,000 × $0.125) + (18,000 × $0.087) = $4,000 + $1,566 = $5,566/월(us-east-1 단계별 단가 기준)이다. io2의 IOPS 라인은 스토리지 라인의 100배 이상이 되는 경우가 흔하다. I/O가 청구의 구조를 결정하는 양상이 io2 안에 명시적으로 드러난다.

항목gp3io2 Block Express
스토리지 GB 단가$0.115/GB-월 (us-east-1)$0.125/GB-월 (us-east-1)
baseline 무료 구간3,000 IOPS + 125 MB/s없음
IOPS 청구 면baseline 위 추가만모든 IOPS, 단계별 단가
Throughput 청구 면baseline 위 추가만 (별도 라인)별도 라인 없음 (IOPS에 함께)
최대 한도80,000 IOPS / 2,000 MB/s256,000 IOPS / 4,000 MB/s

엔진 선택: MySQL·PostgreSQL·Aurora에서 다룬 Aurora I/O-Optimized는 RDS 표준의 gp3·io2와 구조가 다르다. Aurora는 storage I/O 요청을 따로 청구하던 모델에서 I/O-Optimized로 전환할 때 스토리지 단가가 약 2.25배 인상되고 I/O 라인은 0이 되는 트레이드오프를 만든다. RDS 표준은 그 트레이드오프 없이 gp3 baseline 영역·io2 단계별 단가만 두 갈래로 갖는다. 같은 단어(스토리지 비용)가 Aurora와 RDS 표준에서 다른 구조를 보여 준다.

gp3 baseline의 무료 구간과 추가 청구 영역. 100 GB·8,000 IOPS·250 MB/s 사례에서 스토리지·추가 IOPS·추가 throughput 세 라인으로 분리되는 도식

프로비저닝된 IOPS 라인의 청구 위치

스토리지 라인과 IOPS 라인은 같은 라인이 아니다. AWS는 청구서에 두 라인을 따로 찍는다. 같은 볼륨 한 개에서 얼마를 프로비저닝했는가에 따라 AWS가 두 라인으로 나누어 청구한다는 뜻이다. 이 사실을 모르면 IOPS를 베이스라인보다 한 자릿수 위로 잡아 두는 워크로드에서 IOPS 라인이 스토리지 라인의 5배~50배가 되어 청구서를 처음 받는 사람이 "왜 이렇게 비싸지"부터 시작한다.

io2의 단계별 단가를 막대그래프로 옮기면 첫 32,000 IOPS의 단가가 가장 가파른 기울기로 시작하고, 32,001~64,000 구간이 한 단 낮고, 64,001 이상이 또 한 단 낮은 3-step 계단 구조다. 운영적으로 의미하는 바가 두 가지다. 하나는 낮은 IOPS에서는 io2가 단위 IOPS당 가장 비싼 구간을 그대로 부담한다는 것이다. 5,000 IOPS만 필요한 워크로드는 io2의 단계별 단가가 1단계에 모두 들어가서 평균 단가가 가장 높다. 다른 하나는 높은 IOPS에서는 io2의 단계별 단가가 효과를 발휘한다는 것이다. 100,000 IOPS가 필요한 워크로드에서는 64,001 이상 구간의 가장 싼 단가가 큰 비중을 차지해 단위 IOPS당 평균 단가를 깎아 준다.

io2가 io1을 대체한 시점도 운영에 영향을 준다. AWS는 2025-04-30 이후 모든 신규 io2 볼륨을 자동으로 io2 Block Express로 프로비저닝한다. 이전 io2는 더 낮은 한도(64,000 IOPS, 16 KB-1 MB I/O size)에 매여 있었고, Block Express는 그 한도를 256,000 IOPS / 99.999% durability까지 키운다. 새 RDS for io2 인스턴스는 모두 Block Express의 단가로 AWS가 비용을 잡는다.

io2 IOPS 단계별 단가. 1단계(0~32K $0.125), 2단계(32K~64K $0.087), 3단계(64K+ $0.061)의 3-step 계단형 단가 막대그래프

백업 스토리지의 무료 구간과 청구 영역

백업 스토리지 라인의 무료 구간이 RDS 청구의 가장 비직관적인 대목이다. AWS RDS 공식 문서가 무료 구간을 다음과 같이 명시한다.

You are not charged for the backup storage cost if the total backup storage doesn't exceed 100% of your databases storage size within a Region.

(번역: 한 region 안에서 백업 스토리지의 총합이 그 region 안 모든 RDS DB 인스턴스의 프로비저닝된 스토리지 사이즈 합계 100%를 넘지 않으면 백업 스토리지 비용은 0이다.)

이 문장이 의미하는 면이 두 가지다. 하나는 DB 인스턴스 100 GB를 프로비저닝한 환경에서는 백업 스토리지 100 GB까지 무료라는 것이다. 자동 백업의 retention default 7일을 그대로 유지해도, 그 7일치 백업의 변경량 비례 누적이 100 GB를 넘지 않으면 백업 라인은 0이다. 다른 하나는 region 안 모든 RDS 인스턴스의 storage 합계 100%까지 무료라는 것이다. RDS for Oracle 1 TiB 인스턴스와 RDS for SQL Server 800 GiB 인스턴스를 같은 region에서 운영하면 AWS는 1.8 TiB-월의 백업 스토리지를 무료 한도로 잡는다.

100% 무료 구간을 초과하면 AWS는 그 초과분만 백업 라인으로 청구한다. AWS RDS 문서 기준 단가는 $0.095/GB-월(us-east-1)이다. 변경량이 큰 OLTP 워크로드(매일 5%~10%의 row가 갱신되는 패턴)에서 백업과 PITR: 시점 복구의 범위에서 적었듯 자동 백업의 변경량 비례 누적이 빠르게 자라 100% 경계를 넘긴다. 같은 인스턴스를 read-heavy 워크로드로 운영하면 변경량 누적이 작아 100% 한도 안에서 끝난다.

수동 Snapshot은 자동 백업과 다른 청구 기준을 따른다. 수동 Snapshot은 인스턴스 삭제 후에도 사용자가 직접 지울 때까지 그대로 남고, 수량 자체에 region당 100개 soft quota만 있을 뿐 무료 구간이 따로 없다. 단가는 자동 백업과 같은 $0.095/GB-월이지만, AWS는 수동 Snapshot에는 자동 백업의 100% 무료 구간을 적용하지 않는다. 같은 단가에 같은 데이터지만 retention 정책이 다르게 청구되는 이유가 이 기준의 가운데다.

항목자동 백업수동 Snapshot
Retention0~35일 (콘솔 default 7일 / API default 1일)사용자가 지울 때까지
무료 구간DB instance storage의 100% (region 합계)없음
청구 단가$0.095/GB-월 (초과분만)$0.095/GB-월 (전체)
인스턴스 삭제 시함께 삭제 (Retain automated backups 옵션 없으면)그대로 보관
수량 한도인스턴스당 retention 일수만큼region당 100개 soft quota

AWS Backup 통합(2019-01 GA)을 함께 운영하는 환경은 청구 구조가 한 단 더 나뉜다. AWS Backup vault 자체는 비용이 0이다. 같은 region 안에서 vault에 RDS 백업을 올려도 AWS는 별도 청구 면을 추가하지 않는다. cross-region copy는 AWS가 destination region 단가로 백업 스토리지 청구를 추가하고, cross-account copy는 AWS가 destination 계정 쪽으로 청구를 잡는다. cross-region copy의 데이터 전송도 AWS가 별도 라인을 더한다. AWS Backup의 추가 비용 위치는 vault에 있는 게 아니라 region 경계와 계정 경계를 넘는 시점에 있다.

자동 백업 storage의 무료 구간(DB instance storage 100%까지)과 청구 영역(초과분 $0.095/GB-월)이 한 막대 위에 분리되는 도식

데이터 전송(DTO): 어디서 0이고 어디서 GB당인가

데이터 전송 라인은 RDS 청구의 가장 읽기 어려운 대목이다. 단가가 GB당이지만 같은 GB가 어디로 이동하느냐에 따라 AWS가 0으로 두기도 하고 청구하기도 한다.

같은 AZ 내부의 데이터 이동은 무료다. RDS for MySQL 인스턴스가 ap-northeast-2a에 있고 EC2 application server도 같은 ap-northeast-2a에 있으면 두 사이의 모든 SQL 트래픽은 DTO 라인 0이다. 같은 application이 ap-northeast-2c의 EC2로 이주하면 cross-AZ 트래픽이 발생해 AWS가 GB당 청구를 시작한다. AWS 공식 단가는 cross-AZ in/out 모두 $0.01/GB(2026-04 스냅샷)다.

인터넷으로 나가는 트래픽은 별도 기준이다. 첫 100 GB/월은 무료(2021-12 발표 이후 모든 region 공통)이고, AWS는 100 GB 초과를 region별 단가로 청구한다. ap-northeast-2 기준 100 GB 초과 단가는 $0.126/GB(작성 시점, region 탭 직접 확인)다. RDS 인스턴스가 직접 인터넷에 트래픽을 보내는 경우는 흔치 않지만, public subnet에 RDS를 둔 단순 환경에서 사용자가 직접 인터넷에서 RDS endpoint에 붙는 경로에 이 청구가 발생한다.

NAT Gateway 청구는 RDS 글에서 다시 풀지 않는다. NAT Gateway: Private Subnet의 외부 연결에서 시간당 + GB당 이중 청구 구조를 적어 두었다. RDS가 private subnet 안에 있고 application이 NAT을 통해 외부로 나가는 패턴은 RDS 청구가 아니라 NAT 청구의 라인이다. 두 청구를 한 라인에서 보지 않도록 cost explorer의 service 분리가 중요하다.

데이터 이동 위치DTO 단가 (서울 region)
같은 AZ 내부무료
cross-AZ (in 또는 out)$0.01/GB
인터넷 송신 첫 100 GB/월무료
인터넷 송신 100 GB 초과$0.126/GB
인터넷 수신 (사용자 → RDS)무료

데이터가 같은 AZ($0.00) → cross-AZ($0.01/GB) → 인터넷 송신(첫 100GB 무료 → 서울 $0.126/GB)으로 이동하면서 DTO 청구가 단계별로 갈라지는 흐름 도식

언제 RDS 비용이 자동의 가치를 넘기는가

RDS란 무엇인가: 관리형 DB의 의미에서 RDS가 답이 아닌 환경 셋(단일 인스턴스 사이드 프로젝트, 최신 마이너 즉시 사용, OS root 필요)을 적어 두었다. 그 셋 중 첫 번째 환경을 여기서 짚은 다섯 라인 단위로 다시 보면 구조가 또렷이 드러난다.

월 청구 시뮬레이션을 한 번 짚는다. RDS for MySQL db.t4g.micro 단일 AZ + gp3 20 GB + 자동 백업 default(retention 7일, baseline 안 변경량) + 인터넷 트래픽 1 GB/월의 한 달 청구는 다음과 같이 나눠 둔다.

  • 인스턴스 라인: 730시간 × $0.022/시간 = $16.06
  • 스토리지 라인: 20 GB × $0.115/GB-월 = $2.30 (gp3 baseline 무료, 추가 IOPS·throughput 0)
  • 백업 라인: 0 (인스턴스 storage 20 GB의 100% = 20 GB 자동 백업 무료 한도 안)
  • DTO 라인: 0 (1 GB/월은 인터넷 송신 100 GB 무료 구간 안)
  • 합계: 약 $18.36/월

같은 워크로드를 EC2 t4g.micro + EBS gp3 20 GB + self-host MySQL로 옮기면 다음과 같이 나뉘어 든다.

  • EC2 인스턴스: 730시간 × $0.0084/시간(서울 t4g.micro on-demand) = $6.13
  • EBS gp3 20 GB: 20 GB × $0.0912/GB-월 = $1.82
  • 백업: EBS snapshot $0.05/GB-월 × 20 GB = $1.00 (수동 운영)
  • 합계: 약 $8.95/월

차이는 약 $9.40/월, 1년이면 약 113 USD다. 이 113 USD가 자동 7갈래(provisioning·patching·backup·failure detection·recovery·monitoring·scaling)의 가치보다 작다고 판단되는 운영 환경(단일 인스턴스, 비프로덕션, 백업 자동화가 운영자에게 큰 부담이 아닌 환경)에서 RDS는 답이 아니다. 같은 113 USD가 운영자가 직접 patching·backup·monitoring을 하지 않는 자유와 비교되는 운영 환경에서 RDS는 답이다. 단가의 차이가 자동의 가치를 어디에서 넘기는지가 이 기준의 가운데다.

db.t4g.micro 단일 인스턴스 사이드 프로젝트 한 달 청구 비교. 왼쪽 RDS 막대 약 $18.36(인스턴스+스토리지+백업+DTO), 오른쪽 EC2+self-host 막대 약 $8.95(EC2+EBS+Snapshot)

다음으로

RDS의 청구 다섯 라인은 관리형의 자동이 끝나는 지점에서 운영자가 워크로드의 어떤 면적을 프로비저닝했는가를 따라 자라난다. baseline의 무료 구간과 그 위의 청구 영역이 라인마다 다른 구조로 그어져 있고, 한 라인이 다른 라인보다 비례적으로 큰 청구는 워크로드의 그 면적이 어떻게 짜였는지를 그대로 반영한다. 다음으로는 관계형 DB 자체에서 키-값 스토어로 시점을 이동한다. DynamoDB가 RDS와는 다른 갈래에서 키와 분산이라는 한 가지 기준으로 데이터를 정리하는 구조를, 같은 AWS 안의 다른 면에서 따라간다.

YouTube 영상

채널 보기
AI는 왜 수백 차원의 벡터를 사용할까? 고차원 공간과 행렬 | 선형대수학
투영과 예측, 그리고 선형 결합 | 선형대수학
AI는 데이터를 어떻게 분류할까? 벡터의 거리와 KNN 알고리즘 | 선형대수학
스칼라 곱셈과 내적의 기하학적 의미 | 선형대수학
트라이(Trie) 자료구조: 파이썬으로 삽입(Insert) 연산 구현하기 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
행렬의 가장 중요한 연산 - 행렬 곱셈 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학