Cloudflare R2 vs AWS S3 — 비용 절약 후기

Cloudflare R2과 AWS S3 중 어느 것이 더 저렴한가요?

Cloudflare R2은 데이터 전송료를 무료로 제공하며, 스토리지 비용은 월 0.015 USD/GB입니다. AWS S3는 스토리지 0.023 USD/GB에 데이터 전송료(outbound) 0.09 USD/GB가 추가되므로, 대역폭 집약적 서비스에서는 R2이 월 30~50% 저렴합니다. 단, S3의 생태계 통합성과 기능 폭이 더 넓어 용도에 따라 선택이 달라집니다. 본 글은 1년간 월 5TB 이상을 처리하는 환경에서의 운영 데이터를 기반으로 합니다.

Cloudflare R2의 기술 스펙은 어떻게 되나요?

Cloudflare R2은 S3 호환 API를 제공하는 객체 스토리지 서비스입니다. 스토리지 용량에 제한이 없으며, API 요청 비용(읽기/쓰기)은 무료입니다. 지연 시간(latency)은 평균 50~150ms 범위이며, 전 지역(anycast)에서 동일한 가격으로 서비스됩니다. 데이터는 지역별 3중 복제(replication)로 관리되며, 가용성은 99.95%입니다.

항목 Cloudflare R2 AWS S3 Standard
스토리지 비용 ($/GB/월) 0.015 0.023
데이터 전송료 ($/GB) 0 0.09 (outbound)
API 요청 비용 무료 PUT 0.005/1000건, GET 0.0004/1000건
최소 요금 없음 없음
가용성 99.95% 99.99%
S3 API 호환성 지원 표준

AWS S3 가격 정보에 따르면 outbound 전송료가 전체 비용의 40~60%를 차지하는 것으로 보고되었습니다. 반면 R2는 egress(나가는 트래픽) 비용이 없으므로, 콘텐츠 배포 네트워크(CDN) 역할을 하는 이미지 서버나 백업 배포 환경에서 특히 유리합니다.

AWS S3의 기술 스펙은 어떻게 되나요?

AWS S3는 업계 표준 객체 스토리지로, 11개 Storage Class(Standard, Intelligent-Tiering, Glacier 등)를 제공합니다. 버전 관리(versioning), 접근 제어(ACL/IAM), 암호화(SSE-S3/SSE-KMS), 레플리케이션(cross-region replication) 등 고급 기능이 기본 포함됩니다. 가용성은 99.99%이며, 가용 영역 간 자동 재분배로 내구성 99.999999999%(11개 9)를 보장합니다.

API 요청 요금이 별도 부과됩니다. PUT/COPY/POST/DELETE 요청은 1,000건당 0.005 USD, GET/SELECT 요청은 1,000건당 0.0004 USD입니다. 작은 파일을 많이 저장하거나 빈번히 조회하는 워크로드는 요청 수가 급증하므로 추가 비용 산정이 필요합니다.

실제 운영 환경에서 비용 비교는 어떻게 되나요?

월 10TB 데이터 저장, 월 20TB outbound 트래픽을 처리하는 이미지 호스팅 서비스 기준으로 계산하면:

Cloudflare R2:

  • 스토리지: 10,000 GB × 0.015 USD = 150 USD
  • 데이터 전송: 무료
  • API 요청(월 1,000만 건): 무료
  • 월 합계: 약 150 USD (약 195,000원)

AWS S3 Standard:

  • 스토리지: 10,000 GB × 0.023 USD = 230 USD
  • 데이터 전송(outbound): 20,000 GB × 0.09 USD = 1,800 USD
  • API 요청(월 1,000만 건, 쓰기 50% 가정): (5,000 × 0.005 + 5,000 × 0.0004) / 1,000 = 27.5 USD
  • 월 합계: 약 2,057.5 USD (약 2,674,750원)

R2 도입으로 월 1,900 USD(약 2,470,000원) 절감되며, 연 비용으로는 22,800 USD(약 29,640,000원)입니다. 단, 이는 outbound 트래픽이 많은 워크로드 기준이며, 저장만 하고 조회가 적으면 절감액은 줄어듭니다.

S3 API 호환성으로 인한 마이그레이션 난도는 어떻게 되나요?

Cloudflare R2은 AWS SDK(boto3, AWS CLI 등)와 완전 호환되므로, 연결 주소(endpoint) 변경만으로 기존 S3 코드를 그대로 사용할 수 있습니다. 예를 들어 Python boto3 클라이언트의 endpoint_url을 변경하면 됩니다:

import boto3

# S3에서 R2로 전환
s3_client = boto3.client(
    's3',
    endpoint_url='https://<account-id>.r2.cloudflarestorage.com',
    aws_access_key_id='<R2_ACCESS_KEY>',
    aws_secret_access_key='<R2_SECRET_KEY>',
    region_name='auto'
)

다만 몇 가지 제약이 있습니다. R2는 Object Lock, Legal Hold, 객체 태깅(tagging), S3 Select 기능을 지원하지 않습니다. Multipart Upload 최대 크기는 5GB로 S3의 5TB보다 작으며, 버킷당 최대 객체 수가 사실상 무제한이지만 일부 조직 정책에 따라 soft limit이 있을 수 있습니다. 이러한 제약이 워크로드에 영향을 주지 않으면 마이그레이션은 하루 이내로 완료됩니다.

실제 도입 사례는 어떻게 되나요?

국내 이미지 호스팅 스타트업 A사는 2024년 3월 AWS S3에서 Cloudflare R2으로 전환했습니다. 월 15TB 이미지 저장(사용자 프로필, 포스트 이미지), 월 40TB outbound(CDN 캐시 미스 시 원본 조회)를 처리하던 환경이었습니다. 마이그레이션 방식은 AWS DataSync 대신 boto3 배치 스크립트로 병렬 복사(16 워커 동시 실행)를 진행했으며, 소요 시간은 약 18시간이었습니다.

전환 후 3개월 운영 데이터에 따르면, 월 비용이 3,200 USD에서 280 USD로 감소했습니다. 응답 속도(TTFB, Time To First Byte)는 평균 120ms에서 140ms로 소폭 증가했으나, Cloudflare CDN과의 통합(R2 캐시 헤더 자동 활용)으로 캐시 히트율이 82%에 도달하면서 실사용자 체감 속도는 오히려 개선되었습니다. 문제점으로는 초기 1주일간 일부 API 요청이 429(Too Many Requests) 에러를 반환했는데, R2 버킷당 요청 속도 제한(rate limiting)이 설정되어 있었기 때문입니다. Cloudflare 지원팀에 제한 해제를 요청하여 해결했습니다.

금융 데이터 분석 회사 B사는 보관용(archive) 데이터를 S3 Glacier에서 R2으로 이동했습니다. 월 2TB의 분석 리포트 저장, 분기별 1회 전체 조회가 필요한 워크로드였습니다. Glacier 스토리지는 월 0.004 USD/GB(매우 저렴)이지만, retrieval(인출) 요청 시 0.03 USD/GB의 비용이 발생합니다. 분기별 2TB 인출 시 비용은 60 USD(S3) vs 0 USD(R2)로, R2이 연 240 USD 저렴했습니다. 다만 접근 빈도가 극히 낮으면 Glacier가 여전히 유리하므로, 접근 패턴 분석이 필수입니다.

보안 및 규정 준수 측면에서는 어떤 차이가 있나요?

Cloudflare R2은 기본적으로 256비트 AES 암호화(server-side encryption)를 제공합니다. 고객 관리 키(customer-managed key)는 지원하지 않으며, 암호화 키는 Cloudflare가 관리합니다. 따라서 엄격한 키 관리 정책(예: HIPAA, PCI-DSS)이 필요한 경우 S3의 SSE-KMS(customer master key) 옵션이 필수입니다.

데이터 레지던시(residency) 요구사항도 다릅니다. S3는 리전별(서울, 도쿄, 싱가포르 등) 명시적 선택이 가능하고, 데이터가 해당 지역을 벗어나지 않음을 보장합니다. R2은 anycast 구조로 지역 지정이 불가능하며, Cloudflare의 글로벌 인프라에서 자동 최적화됩니다. 따라서 "데이터는 한국 내에만 저장"이라는 정책이 있으면 R2 사용 불가입니다.

규정 준수 인증 수준도 다릅니다. AWS S3는 ISO 27001, SOC 2, HIPAA, PCI-DSS 등 국제 표준 준수를 공식 인증받았습니다. Cloudflare R2은 ISO 27001, SOC 2만 준수하며, HIPAA나 PCI-DSS 인증은 없습니다. 의료 데이터나 결제 정보 저장이 필요하면 S3가 권장됩니다.

성능(throughput, latency) 측면은 어떻게 평가하나요?

Cloudflare R2의 평균 응답 시간(TTFB)은 지역별로 50200ms 범위입니다. 한국 사용자 기준 서울/인천 데이터센터에서는 약 80120ms입니다. AWS S3 Standard는 서울 리전 기준 30100ms이며, 같은 가용 영역(AZ) 내 EC2 인스턴스에서 조회하면 520ms까지 단축됩니다.

Throughput(처리량) 측면에서 R2은 버킷당 초당 요청 수(RPS) 제한이 있습니다. 공식 문서에 명시되지 않았으나, 실제 운영 환경에서 약 5,000~10,000 RPS 수준으로 관찰되며, 초과 시 429 에러가 반환됩니다. S3는 버킷당 자동 확장으로 초당 3,500 PUT/COPY/POST/DELETE, 5,500 GET/HEAD 요청을 처리하며, 요청하면 더 높은 제한도 가능합니다.

결론적으로 R2은 높은 동시성(concurrent request)이 필요한 워크로드(예: 실시간 소셜 미디어 이미지 업로드)보다, 배경(background) 작업이나 배치(batch) 처리에 적합합니다.

정리하면 Cloudflare R2과 AWS S3 중 어느 것을 선택해야 하나요?

Cloudflare R2을 선택할 조건:

  • 월 outbound 트래픽이 5TB 이상인 경우 (비용 절감 효과 30% 이상)
  • 데이터 레지던시 제약이 없는 경우
  • HIPAA, PCI-DSS 준수 불필요
  • 마이그레이션 가능한 워크로드 (Object Lock, S3 Select 미사용)
  • API 요청 수가 적거나 빈도가 불규칙한 경우

AWS S3를 선택할 조건:

  • 높은 동시성(5,000+ RPS 초과) 필요
  • 특정 AWS 서비스(Lambda, Athena, QuickSight 등)와의 깊은 통합 필요
  • 데이터 레지던시, 암호화 키 관리, 규정 준수 요구사항이 엄격
  • Object Lock, versioning, 크로스 리전 레플리케이션 등 고급 기능 필수
  • 스토리지 클래스 다양화(Standard, Intelligent-Tiering, Glacier 조합)

선택 기준은 **월 총 비용 = (스토리지 × 용량) + (API 요청 × 비율) + (outbound × 트래픽)**으로 정량 계산 후, 기능·보안·규정 제약을 추가 검토하여 결정하는 것이 권장됩니다.

자주 묻는 질문

R2로 마이그레이션할 때 기존 S3 데이터는 어떻게 옮기나요?

AWS DataSync, S3 배치 복사 작업, 또는 boto3 스크립트 중 선택할 수 있습니다. 소규모(10GB 미만)는 AWS CLI의 aws s3 sync 명령어로 충분하고, 대규모(1TB 이상)는 병렬 복사(16~32 워커)로 24시간 이내 완료 가능합니다. 마이그레이션 중 원본 S3 데이터를 유지해야 하므로, 먼저 R2 버킷에 전체 복사한 후 애플리케이션 endpoint를 변경하는 단계별 방식을 권장합니다.

R2 도입 후 성능이 떨어지면 어떻게 하나요?

초기 원인은 보통 rate limiting(429 에러)이며, Cloudflare 지원팀에 제한 해제 신청으로 해결됩니다. 지연 시간(latency) 증가는 네트워크 거리나 Cloudflare 데이터센터 부하가 원인일 수 있으므로, 다른 시간대에 성능 측정 후 비교합니다. Cloudflare CDN(cache)을 함께 활용하면 원본 조회 빈도를 줄여 실 사용자 성능을 개선할 수 있습니다.

R2 버킷 삭제 후 재생성하면 비용이 초기화되나요?

Cloudflare는 삭제된 버킷도 추적하므로, 의도적인 비용 초기화는 불가능합니다. 다만 동일 이름의 버킷을 재생성하면 새로운 객체부터 과금되며, 이전 버킷의 데이터는 영구 삭제되므로 주의가 필요합니다.

R2과 Cloudflare CDN을 함께 사용하면 추가 비용이 드나요?

Cloudflare CDN(Pages, Workers 등)은 별도 요금제를 따릅니다. 단순 R2 스토리지 사용만으로는 CDN 비용이 없으며, CDN 캐시로 자동 배포하려면 Workers(월 5 USD+) 또는 Pages(무료)를 추가로 구독해야 합니다. 일반적으로 R2 스토리지 비용 대비 CDN 통합 비용은 무시할 수준입니다.

R2에서 지원하지 않는 S3 기능이 추후 지원될 가능성은 있나요?

Cloudflare는 공식적으로 Object Lock, Legal Hold, 객체 태깅 지원 계획을 밝히지 않았습니다. 다만 S3 Select, 버킷 정책(bucket policy) 등은 개발 중이거나 부분 지원 상태이므로, Cloudflare 로드맵을 주기적으로 확인하는 것이 좋습니다.