Cloudflare R2 vs S3: VPS 호스트용 객체 스토리지

발행: (2026년 4월 29일 PM 04:11 GMT+9)
14 분 소요
원문: Dev.to

Source: Dev.to

Cloudflare R2 vs S3 Object Storage for VPS Hosts

VPS(가상 사설 서버)를 운영하면서 대용량 파일을 저장하고 서빙해야 할 때, 객체 스토리지는 필수입니다. 가장 널리 쓰이는 두 서비스가 Amazon S3Cloudflare R2인데, 각각의 장단점을 이해하고 자신의 워크로드에 맞는 선택을 하는 것이 중요합니다.


1️⃣ 가격 구조 비교

항목Amazon S3Cloudflare R2
저장 비용$0.023/GB (표준)$0.015/GB
데이터 전송(아웃바운드)$0.09/GB (첫 10TB)$0.00/GB (같은 Cloudflare 네트워크 내)
PUT/GET 요청$0.005/1,000 PUT, $0.0004/1,000 GET$0.005/1,000 PUT, $0.0004/1,000 GET
삭제 비용$0.01/GB (삭제 시)없음

핵심 포인트: R2는 동일한 Cloudflare 네트워크 내에서 전송되는 트래픽에 대해 비용을 부과하지 않으므로, Cloudflare Workers와 함께 사용할 경우 비용 절감 효과가 큽니다.


2️⃣ 성능 및 지연 시간

  • Amazon S3

    • 전 세계에 걸친 리전(Region) 배포로, 대부분의 경우 수십 밀리초 수준의 응답 시간을 제공합니다.
    • 특정 리전(예: us-east-1)에 트래픽을 집중시키면 레이턴시가 더 낮아집니다.
  • Cloudflare R2

    • Cloudflare의 전역 에지 네트워크에 직접 연결되므로, 사용자와 가장 가까운 엣지 포인트에서 데이터를 제공할 수 있습니다.
    • 특히 동적 콘텐츠를 Workers와 결합할 때 5~15ms 수준의 초저지연을 경험할 수 있습니다.

3️⃣ API 호환성

  • S3 호환 API

    • R2는 완전한 S3 호환 API를 제공하므로, 기존에 S3 SDK(예: aws-sdk, boto3)를 사용하던 코드를 거의 그대로 사용할 수 있습니다.
    • 다만, 일부 고급 기능(예: S3 Event Notifications, S3 Batch Operations)은 아직 R2에서 지원되지 않습니다.
  • 전용 R2 API

    • Cloudflare는 R2 전용 APIWorkers KV와의 통합을 강조합니다.
    • 최신 기능(예: Object Lifecycle Rules, Automatic Image Optimization)을 활용하려면 R2 전용 SDK를 사용하는 것이 좋습니다.

4️⃣ 보안 및 접근 제어

기능Amazon S3Cloudflare R2
IAM 정책상세한 리소스 기반 정책 지원현재는 R2 Access TokensWorkers KV와 연동된 제한적인 정책만 제공
버킷 정책지원지원 (S3 호환 API를 통해 동일하게 설정 가능)
암호화서버 측 암호화(SSE‑S3, SSE‑KMS)서버 측 암호화(SSE‑R2) 제공, KMS와 직접 연동은 아직 미지원
퍼블릭 액세스 차단가능가능 (R2 Access Tokens 사용 권장)

5️⃣ 사용 사례 예시

✅ Cloudflare Workers + R2

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const object = await R2_BUCKET.get('example.jpg')
  return new Response(object.body, {
    headers: { 'Content-Type': object.httpMetadata.contentType }
  })
}
  • 장점: Workers와 동일한 엣지에서 객체를 직접 읽어와, 레이지 로딩이나 이미지 변환 같은 작업을 초저지연으로 수행 가능.

✅ VPS + S3 (전통적인 백업)

aws s3 sync /var/www/html s3://my-backup-bucket --delete
  • 장점: 기존에 구축된 CI/CD 파이프라인과 쉽게 연동 가능하고, 버전 관리수명 주기 정책을 활용해 오래된 백업을 자동 삭제할 수 있음.

6️⃣ 마이그레이션 팁

  1. 데이터 복제

    • rclone 혹은 aws s3 sync 명령을 사용해 S3 → R2 혹은 그 반대로 데이터를 복제합니다.
    • 예시: rclone sync s3:my-bucket r2:my-r2-bucket --progress
  2. DNS 설정

    • R2에 커스텀 도메인을 연결하려면 Cloudflare 대시보드에서 CNAME 레코드*.r2.cloudflarestorage.com 으로 지정합니다.
  3. 테스트

    • 작은 파일(예: 1KB 텍스트 파일)부터 업로드/다운로드 테스트를 진행해 응답 시간요금 청구을 확인합니다.

7️⃣ 결론

항목Amazon S3Cloudflare R2
가격전송 비용이 높음전송 비용 무료 (같은 네트워크 내)
레이지 레이턴시평균 20‑30ms평균 5‑15ms
에코시스템풍부한 도구와 서비스Workers와의 긴밀한 통합
마이그레이션 난이도기존 인프라와 호환성 최상S3 호환 API 덕분에 비교적 쉬움
  • VPS에서 전통적인 백업·아카이브 용도로는 Amazon S3가 여전히 강력한 선택입니다.
  • 엣지에서 바로 파일을 제공하거나 Workers와 결합해 서버리스 아키텍처를 구현하고 싶다면 Cloudflare R2가 비용·성능 면에서 더 유리합니다.

추천: 현재 사용 중인 워크로드와 비용 구조를 먼저 분석하고, 필요에 따라 하이브리드 전략(핵심 데이터는 S3, 캐시 및 빈번히 접근되는 파일은 R2)으로 전환하는 것을 고려해 보세요.

VPS 호스트를 위한 객체 스토리지 사용 사례

  • 정적 자산 및 미디어 업로드
  • 백업 / 스냅샷 (앱 수준, 하이퍼바이저 수준이 아님)
  • 로그 아카이브 및 데이터 내보내기
  • 웹사이트용 CDN 오리진

DigitalOcean나 Hetzner와 같은 제공업체에 호스팅할 때, 일반적으로 비용을 예측 가능하게 유지하면서도 전 세계적인 성능을 얻으려 합니다. 객체 스토리지는 이를 실수로 크게 늘리기 가장 쉬운 곳입니다.

비용 비교

S3 경제성

  • 스토리지: 경쟁력 있는 가격.
  • 이그레스: 가장 큰 비용 항목; 전송된 GB당 비용을 지불합니다.
  • 요청 및 기능: 라이프사이클 전환, 복제, 이벤트 알림 등은 추가 요금을 발생시킵니다.
  • CDN: S3를 CloudFront 뒤에 두면 전달이 개선될 수 있지만, 여전히 AWS 청구 체계에 포함됩니다.

R2 경제성

  • 스토리지: 저장된 GB당 청구됩니다.
  • 작업: 요청당 청구됩니다 (PUT, GET, LIST 등).
  • 이그레스: $0 이그레스 from R2; 퍼블릭 인터넷으로 전송되는 데이터는 Cloudflare 엣지 네트워크 내부에서 처리됩니다.
  • 주의사항: “이그레스 없음”이 모든 네트워크 비용을 없애는 것은 아니며, VPS 제공업체가 여전히 아웃바운드(또는 인바운드) 대역폭에 대해 요금을 부과할 수 있습니다.

성능 및 아키텍처 영향

  • S3는 지역 중심입니다. CDN 레이어를 추가하지 않으면 요청은 선택한 지역으로 이동합니다.
  • R2는 Cloudflare 엣지에 가깝게 위치하며 Cloudflare 캐싱과 특히 잘 작동하여 별도 설정 없이 전 세계적으로 낮은 지연 시간의 읽기를 제공합니다.

일반적인 시나리오

시나리오최적 선택
앱 서버와 사용자가 대부분 하나의 AWS 리전(예: us‑east‑1)에 위치함S3
전 세계 방문자이며 이미 Cloudflare를 DNS/WAF/CDN으로 사용 중R2
공개 읽기가 없는 내부 워크로드(백업, 데이터 파이프라인)S3 (지역 모델이면 충분합니다)

Choosing between S3 and R2

When to pick S3When to pick R2
전체 S3 기능 세트가 필요합니다 (이벤트 알림, 객체 잠금, 여러 스토리지 클래스, 엄격한 규정 준수)공개 다운로드/스트리밍 트래픽이 많을 것으로 예상됩니다
컴퓨팅이 AWS에서 실행되고 데이터 로컬리티가 중요합니다예측 가능한 비용과 CDN 친화적인 아키텍처를 원합니다
에지 전달의 혜택을 받지 못하는 무거운 내부 워크플로우이미 Cloudflare를 DNS, WAF, CDN으로 사용하고 있습니다

Practical checklist for VPS hosting

  1. API compatibility – R2는 S3 API를 구현하지만 모든 희귀 기능을 지원하는 것은 아닙니다. 먼저 R2 엔드포인트에 대해 도구를 테스트하세요.
  2. Tooling – S3와 통신하는 대부분의 백업 유틸리티와 SDK는 사용자 지정 엔드포인트와 액세스 키를 제공하면 R2에서도 작동합니다.
  3. Lock‑in considerations
    • S3: “중력에 의한 락인” – 사실상 모든 클라우드 서비스가 이를 지원합니다.
    • R2: “워크플로에 의한 락인” – 해당 기능에 크게 의존하면 Cloudflare의 엣지 기능에 종속됩니다.

Rule of thumb: 고급 규정 준수 제어나 특수한 S3 기능이 필요하면 S3를 사용하세요. 파일 제공에 대해 비용이 크게 부과되지 않는 객체 스토리지만 필요하다면 R2가 일반적으로 더 좋은 기본 선택입니다.

R2용 최소 AWS‑CLI‑스타일 설정

# 1) Configure a named profile for R2
aws configure set aws_access_key_id "$R2_ACCESS_KEY" --profile r2
aws configure set aws_secret_access_key "$R2_SECRET_KEY" --profile r2
aws configure set region auto --profile r2

# 2) Upload a backup (R2 is S3‑compatible, so use the S3 commands)
aws s3 cp ./backup.tar.gz s3://my-bucket/backups/backup.tar.gz \
  --endpoint-url https://.r2.cloudflarestorage.com \
  --profile r2

# 3) (Optional) List objects
aws s3 ls s3://my-bucket/backups/ \
  --endpoint-url https://.r2.cloudflarestorage.com \
  --profile r2

이 마이그레이션은 몇 분이면 완료됩니다—며칠이 아니라—앱이 S3 전용 기능에 의존하지 않는 한.

일반적인 VPS‑호스팅 사이트에 대한 권장 사항

  • WordPress, Laravel, Node, Django 애플리케이션처럼 많은 공개 자산을 제공하는 경우: R2는 아웃바운드 트래픽이 큰 비용 요인인 점에서 강력한 기본 옵션이며, Cloudflare가 R2를 구축한 이유도 바로 그 고통을 없애기 위해서입니다.
  • S3 선택: 전체 기능 세트가 필요하거나, 엄격한 규정 준수가 요구되거나, 컴퓨팅 환경이 이미 AWS에 있는 경우.
  • R2 선택: 공개 다운로드량이 많을 것으로 예상되고, 비용을 예측 가능하게 유지하고 싶으며, 이미 Cloudflare 네트워크를 사용하고 있는 경우.

일반적인 VPS‑호스팅 패턴:

VPS on Hetzner or DigitalOcean → object storage on R2 for user uploads and backups → stateless app. If you later outgrow the VPS, the storage separation makes migration easier—without a hard commitment today.

이 글의 일부 링크는 제휴 링크입니다. 해당 링크를 통해 구매하시면 추가 비용 없이 커미션을 받을 수 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »