파일 저장소 비용 비교: Amazon S3와 Cloudflare R2, 무엇을 선택할까?

웹 서비스에는 첨부 파일, 프로필 이미지, 업무 문서, 내보내기 파일과 백업 데이터를 저장할 공간이 필요하다. 대표적인 선택지는 Amazon S3와 Cloudflare R2다. 두 서비스 모두 안정적인 객체 스토리지지만 비용 구조와 강점은 꽤 다르다.

결론부터 말하면 외부 다운로드가 많거나 트래픽을 예측하기 어렵다면 R2가 유리하다. 백엔드가 AWS 안에 있고 IAM, KMS, Object Lock 같은 기능이 필요하다면 S3가 유리하다. 장기 백업과 아카이브는 S3 Glacier 계열이 강하다.

이 글의 요금은 2026년 7월 공개 가격 기준이며 세금과 환율은 제외했다. 실제 청구액은 리전, 계정의 무료 구간, 요청 유형과 연결한 서비스에 따라 달라질 수 있다.

기본 과금 구조 비교

항목 | Amazon S3 Standard, 서울 | Cloudflare R2 Standard
저장 공간 | GB당 월 $0.025 | GB당 월 $0.015
쓰기 요청 | 100만 회당 $4.50 | Class A 100만 회당 $4.50
읽기 요청 | 100만 회당 약 $0.35 | Class B 100만 회당 $0.36
인터넷 다운로드 | 월 100GB 초과분부터 첫 10TB 구간 GB당 $0.126 | 무료
매월 무료 저장 공간 | 계정 조건에 따라 다름 | Standard 10GB
매월 무료 요청 | 계정 조건에 따라 다름 | Class A 100만 회, Class B 1,000만 회

R2 Standard의 저장 비용은 S3 서울 리전 Standard보다 약 40% 낮다. 쓰기와 읽기 요청 단가는 거의 비슷하다. 실제 비용을 크게 가르는 항목은 인터넷으로 파일을 내려보낼 때 발생하는 전송료다.

Cloudflare R2는 Standard와 Infrequent Access 모두 R2 자체 인터넷 전송료가 없다. Workers처럼 별도로 과금되는 서비스를 연결하면 해당 서비스 비용은 추가될 수 있다. 자세한 조건은 Cloudflare R2 요금표에서 확인할 수 있다.

S3는 AWS 전체 서비스와 리전을 합산해 인터넷 전송량 월 100GB까지 무료다. 서울 리전에서 그 이후 첫 10TB 구간은 GB당 $0.126이다. Amazon S3 요금표와 AWS 데이터 전송 정책에 최신 조건이 정리되어 있다.

작은 사내 서비스에서는 차이가 크지 않다

저장 공간 100GB, 월 업로드 10만 회, 월 다운로드 요청 100만 회, 다운로드 트래픽 100GB인 업무 시스템을 가정해 보자.

S3를 직접 사용하면 저장 공간 $2.50, 쓰기 요청 $0.45, 읽기 요청 $0.35로 합계는 약 $3.30이다. 다운로드 트래픽은 월 100GB 무료 구간 안에 있다.

R2에서는 무료 구간을 제외한 저장 공간 90GB에 $1.35가 발생한다. 쓰기와 읽기는 무료 요청 구간 안에 있고 전송료도 없다. 합계는 약 $1.35다.

월 차이는 약 $2다. 직원 수십 명이 사용하는 사내 시스템이라면 이 정도 차이보다 기존 인프라와의 연결, 권한 관리, 백업 방식이 더 중요한 선택 기준이다.

다운로드가 많아지면 R2가 유리해진다

이번에는 저장 공간 500GB, 월 업로드 50만 회, 다운로드 요청 100만 회, 다운로드 트래픽 2,000GB인 서비스를 가정해 보자.

S3에서 직접 배포

저장 공간: $12.50

쓰기 요청: $2.25

읽기 요청: $0.35

전송료: 1,900GB × $0.126 = $239.40

합계: 약 $254.50

R2에서 배포

무료 구간을 제외한 저장 공간: $7.35

쓰기와 읽기 요청: 무료 구간

전송료: $0

합계: 약 $7.35

파일을 스토리지에서 사용자에게 직접 내려보내는 구조라면 약 $247의 차이가 난다. R2의 핵심적인 비용 장점은 저장료보다 전송료에서 만들어진다.

S3에는 CloudFront라는 선택지가 있다

운영 환경에서는 S3 파일을 인터넷에 직접 공개하기보다 CloudFront를 앞에 두는 경우가 많다. 현재 CloudFront 정액제는 배포 단위로 다음과 같은 구간을 제공한다.

요금제 | 월 요금 | 전송 허용량 | 요청 허용량 | S3 저장 크레딧
Free | $0 | 100GB | 100만 회 | 5GB
Pro | $15 | 50TB | 1,000만 회 | 50GB
Business | $200 | 50TB | 1억 2,500만 회 | 1TB

정액제는 초과 요금을 청구하지 않지만, 허용량을 여러 달 계속 크게 초과하면 AWS가 전달 방식을 조정할 수 있다. 따라서 무제한 요금제라기보다 평소 사용량에 맞춰 등급을 선택하는 상품으로 보는 편이 정확하다. CloudFront 정액제 안내에서 기능과 제한을 함께 확인해야 한다.

앞의 500GB 저장, 2TB 전송 사례에 CloudFront Pro를 적용하면 CloudFront $15, 저장 크레딧을 제외한 S3 저장료 $11.25, 쓰기 요청 $2.25, 읽기 요청 최대 $0.35로 약 $28.85다. 캐시가 적용되면 S3 원본까지 도달하는 읽기 요청은 더 줄어들 수 있다.

따라서 운영 환경의 정확한 비교는 S3 직접 배포와 R2가 아니라 S3와 CloudFront 조합, R2와 Cloudflare Cache 조합 사이에서 이루어져야 한다.

R2를 선택할 때 얻는 장점

다운로드 경로와 관계없이 R2 전송료가 없다

S3 호환 API, Workers API, 공개 URL을 통한 다운로드에는 R2 자체 전송료가 없다. 이미지와 동영상이 많거나 대용량 문서 다운로드를 제공하는 서비스, 사용량을 예측하기 어려운 공개 파일, 서명 URL을 이용한 직접 다운로드에서 효과가 크다.

Cloudflare 캐시와 연결하기 쉽다

R2 버킷에 사용자 도메인을 연결하면 Cloudflare Cache를 적용할 수 있다. WAF, Access와 같은 Cloudflare 기능도 함께 구성할 수 있다. r2.dev 주소는 개발용이며 속도 제한이 있기 때문에 운영에서는 사용자 도메인을 연결하는 것이 좋다. R2 공개 버킷과 사용자 도메인 문서에 구성 방법이 나와 있다.

기존 S3 코드를 상당 부분 재사용할 수 있다

R2는 S3 호환 API를 제공한다. AWS SDK를 계속 사용하면서 엔드포인트와 인증 정보를 바꾸는 방식으로 전환할 수 있다.

다만 S3와 완전히 같지는 않다. ACL, AWS KMS 연동, Object Lock 등 일부 API와 헤더는 지원하지 않으므로 기존 애플리케이션이 사용하는 기능을 먼저 확인해야 한다. R2 S3 API 호환 범위에 지원 상태가 정리되어 있다.

S3에서 단계적으로 이관할 수 있다

R2의 Sippy 기능은 요청된 파일부터 기존 S3 버킷에서 R2로 복사한다. 모든 데이터를 한 번에 옮기지 않고 자주 사용하는 파일부터 이전할 수 있어 초기 전송 비용과 전환 부담을 줄일 수 있다. Cloudflare Sippy 안내에서 동작 방식과 주의점을 확인할 수 있다.

비용을 예측하기 쉽다

R2 Standard는 저장 공간, Class A 요청, Class B 요청을 중심으로 계산하면 된다. 인터넷 전송량을 별도로 예측하지 않아도 되므로 이미지와 파일 사용량이 갑자기 늘어나는 서비스에서 청구액을 관리하기 쉽다.

S3가 더 유리한 상황

AWS 안에서 서비스를 운영한다

EC2, ECS, Lambda 같은 AWS 서비스와 S3가 같은 리전에 있으면 S3와 AWS 서비스 사이의 직접 데이터 전송료가 없다. 네트워크 지연과 IAM 권한 관리도 단순해진다.

보안과 규정 준수 기능이 중요하다

S3는 IAM, AWS KMS, VPC 엔드포인트, 복제, 감사와 Object Lock을 포함한 AWS 생태계와 깊게 연결된다. Object Lock은 일정 기간 파일을 삭제하거나 덮어쓰지 못하게 하는 WORM 방식과 규정 준수 모드를 제공한다. 자세한 내용은 S3 Object Lock 안내에서 확인할 수 있다.

장기 백업과 아카이브가 많다

S3에는 Standard-IA, Intelligent-Tiering, Glacier Instant Retrieval, Glacier Flexible Retrieval과 Glacier Deep Archive가 있다. 접근 빈도가 낮은 데이터는 수명 주기 정책으로 더 저렴한 계층에 보낼 수 있다. S3 스토리지 클래스 안내에 각 계층의 최소 보관 기간과 복구 특성이 정리되어 있다.

서울 리전에서 1,000GB를 보관할 때 저장료만 비교하면 R2 Infrequent Access는 월 $10, S3 Glacier Instant Retrieval은 약 $5, S3 Glacier Flexible Retrieval은 약 $4.50이다. 거의 꺼내지 않는 백업은 S3 Glacier 계열이 유리하다. 반대로 백업 전체를 자주 복구하거나 다른 클라우드로 내려받는다면 R2의 무료 전송이 유리할 수 있다.

R2 Infrequent Access에는 무료 구간이 적용되지 않고 요청 과금 단위가 올림 처리된다. 최소 보관 기간도 30일이므로 처음부터 적용하기보다 Standard로 시작한 뒤 실제 접근 패턴을 보고 전환하는 편이 안전하다.

어떤 서비스를 선택해야 할까?

Vercel, Supabase와 외부 컨테이너를 조합한 서비스라면 기본 파일 저장소로 R2 Standard가 잘 맞는다. 공개 이미지와 썸네일은 사용자 도메인과 Cloudflare Cache를 연결하고, 비공개 문서는 비공개 버킷과 서명 URL 또는 인증 계층을 사용하는 구성이 현실적이다.

백엔드가 AWS에 집중되어 있거나 삭제하면 안 되는 감사 자료를 보관해야 한다면 S3가 더 자연스럽다. 장기 보관 백업은 S3 Glacier, 사용자에게 자주 제공하는 이미지와 첨부 파일은 R2로 나누는 혼합 구성도 가능하다.

소규모 서비스에서는 두 서비스 모두 월 몇 달러 수준에서 시작할 가능성이 크다. 초기에는 운영이 단순한 하나의 저장소로 시작하고, 다운로드 트래픽이나 규정 준수 요구가 실제로 커질 때 두 번째 저장소를 추가하는 편이 비용과 복잡성을 함께 줄여준다.