
Amazon S3와 Cloudflare R2 중 파일 저장소를 고를 때 저장 용량 단가만 비교하면 결론이 달라질 수 있습니다. 고객이 파일을 얼마나 자주 내려받는지, CDN을 거치는지, AWS 권한·암호화 기능에 얼마나 의존하는지를 함께 봐야 합니다. 외부 다운로드가 많은 서비스라면 R2의 전송료 구조를 검토할 가치가 있고, AWS 안에서 이미 운영 중인 파일 처리 체계가 있다면 S3를 유지하는 비용과 이전 비용을 먼저 비교하는 편이 합리적입니다. 이 글은 일반적인 첨부 파일·이미지·다운로드 서비스의 선택 기준을 정리합니다.
1. 저장량과 다운로드량을 먼저 분리하세요
저장량은 보관하고 있는 객체의 크기이고, 다운로드량은 이용자에게 전달한 데이터의 합계입니다. 100GB를 저장해도 같은 파일을 여러 번 내려받으면 월간 전송량은 훨씬 커집니다. 원본 요청 수, 업로드·목록 조회 수, CDN 캐시 적중률도 별도 항목입니다. 선택 전에 한 달 사용 기록을 “평균 보관량 / 읽기 요청 / 쓰기 요청 / 전달량 / 캐시에서 처리한 비율”로 나누어 적으세요.
R2 공식 요금 안내는 저장량과 Class A·B 작업을 구분하며, R2에서 직접 나가는 송신 대역폭에는 전송료를 부과하지 않는다고 설명합니다. 다만 연결한 Workers 등 별도 과금 서비스의 요금까지 없어지는 것은 아닙니다. S3 공식 요금 안내에서는 저장 클래스·요청·검색 및 전송 경로·부가 기능에 따라 비용 항목이 달라집니다. “R2는 전부 무료”, “S3는 모든 전송에 같은 요금”이라고 단순화하면 견적이 어긋납니다.
2. S3와 R2를 같은 서비스 범위로 비교하기
| 점검 항목 | Amazon S3 | Cloudflare R2 |
| 견적의 출발점 | 리전·저장 클래스·요청·전송 경로 확인 | 저장 클래스·Class A/B 작업·연결 서비스 확인 |
| 기존 애플리케이션 연동 | AWS 권한·암호화·이벤트 연동 의존성 점검 | S3 호환 API와 Workers 연동 범위 점검 |
| 인터넷 다운로드 | 직접 배포와 CDN 배포의 견적을 나누기 | R2 자체 송신료와 다른 서비스 요금을 나누기 |
| 접근 제어 | 기존 IAM·버킷 정책과 임시 접근 방식 확인 | R2 자격 증명·임시 URL과 앱 권한 설계 확인 |
| 이전에서 놓치기 쉬운 것 | 객체 메타데이터·버전·권한·연동 작업 | 지원 API·헤더·업로드 방식의 차이 |
| 파일럿에서 볼 지표 | 업로드/다운로드 성공률·지연·실제 비용 | 같은 파일과 같은 호출 경로로 측정 |
표는 특정 상품의 성능 우위를 말하는 것이 아니라 검토 순서를 정리한 것입니다. 동일한 파일 집합, 접근 권한과 CDN 조건으로 시험해야 비용과 사용자 경험을 비교할 수 있습니다. 국내 이용자 대상 서비스도 위치 이름만 보고 지연 시간을 확정하지 말고 실제 다운로드 경로에서 측정하세요.
3. 월간 파일 호스팅 견적의 가상 예시
예를 들어 평균 2MB 파일 5만 개를 보관하고, 한 달에 200만 번 파일 전체를 내려받는 서비스를 가정해 보겠습니다. 1MB를 1,000,000바이트로 계산하면 원본 파일은 약 100GB, 전달하는 본문은 약 4,000GB입니다. 이는 요금이 아니라 비교용 작업량입니다. 공급자의 과금 단위, 무료 구간, 헤더·재시도·부분 다운로드 조건을 적용하면 청구량이 달라질 수 있습니다.
가상 작업량(십진 단위)
보관량 = 50,000개 × 2MB = 100GB
월간 전달량 = 2,000,000회 × 2MB = 4,000GB
비교 견적 = 저장 + 원본 요청 + 전송 경로 + CDN/Workers + 운영·이전 비용
만약 CDN이 읽기 요청의 90%를 처리한다면 단순 모델에서 원본 읽기 요청은 20만 회가 됩니다. 그래도 이용자에게 전달되는 4,000GB 자체가 사라지는 것은 아니며, CDN 쪽 사용료와 캐시 정책을 따로 봐야 합니다. 캐시 적중률에 따른 실제 바이트 절감은 객체 크기별로 달라집니다. 현재 구조를 파악할 때는 기존 CloudFront·Cloudflare CDN 비교 글도 함께 참고하세요.
4. S3 호환은 기능이 모두 같다는 뜻이 아닙니다
R2의 S3 API 호환 표에는 API별 구현 여부와 헤더의 지원 상태가 정리돼 있습니다. 애플리케이션에서 실제 쓰는 GetObject·PutObject·목록 조회·멀티파트 업로드·메타데이터 처리 등을 목록으로 만든 뒤 지원 상태를 대조하세요. 엔드포인트만 바꾸고 운영 트래픽을 이동하기 전에 실패 조건도 확인해야 합니다.
이전 시험용으로 작은 파일, 큰 파일, 한글·공백이 들어간 객체 키, 사용자 정의 메타데이터가 있는 파일을 준비합니다. 업로드 후 크기와 내용 해시를 대조하고, 브라우저 다운로드와 부분 범위 요청이 필요한 기능을 실제 클라이언트에서 확인하세요. ETag를 모든 상황에서 파일 내용의 MD5 값으로 간주해 무결성을 판정하지 말고 별도의 검증 기준을 정하는 편이 안전합니다.
비공개 첨부 파일은 저장소 선택과 별도로 앱의 권한 확인이 필요합니다. R2의 서명 URL 문서가 설명하듯 임시 URL은 특정 객체 작업을 일정 시간 허용하며 URL을 가진 사람이 사용할 수 있습니다. 만료 전·후 접근, 다른 사용자의 파일 요청, 로그에 URL이 남는 범위를 시험하세요. CORS 설정이 사용자별 파일 접근 권한을 대신하는 것도 아닙니다.
5. 이전 전 체크리스트와 되돌리기 기준
① 지금 쓰는 API·권한·암호화·이벤트 의존성을 적습니다. ② 같은 사용량을 두 공식 요금 체계에 넣고 CDN과 앱 서버 비용을 더합니다. ③ 시험 파일의 업로드·다운로드·내용 해시·메타데이터를 비교합니다. ④ 임시 URL 만료와 비인가 접근을 확인합니다. ⑤ 읽기 경로를 일부만 전환해 오류율과 지연을 관찰합니다. ⑥ 새 업로드의 저장 위치와 되돌릴 때 동기화할 파일 목록을 정합니다.
전환 시점에 원본 파일을 바로 지우는 방식은 피하고, 두 저장소에 어떤 파일이 최신인지 판단할 기준을 먼저 정하세요. 복제 완료 건수만으로 검수를 끝내기보다 실제 다운로드 내용까지 확인하는 것이 중요합니다. 비용 차이가 작고 AWS 기능 의존성이 크다면 이전하지 않는 선택도 합리적입니다. 장기 보관 클래스가 핵심인 경우에는 S3 스토리지 클래스 비교 글에서 보관 기간과 검색 조건부터 점검하세요.
6. 자주 묻는 질문
R2는 다운로드가 많으면 무조건 더 저렴한가요?
R2 자체 송신료 구조는 검토 가치가 있지만 작업 수·연결 서비스·현재 CDN·이전 비용에 따라 총액이 달라집니다. 같은 월간 사용량으로 비교해야 합니다.
S3 SDK를 그대로 쓰면 이전이 끝나나요?
엔드포인트와 자격 증명뿐 아니라 실제 API와 헤더, 서명 URL, 메타데이터의 호환 여부를 확인해야 합니다. 지원 표와 실패 시험을 함께 보세요.
비공개 파일도 CDN에 올리면 되나요?
사용자별 권한과 캐시 정책을 먼저 설계해야 합니다. 임시 다운로드 URL의 노출·만료·캐시 동작을 확인한 뒤 해당 용도에 맞는 배포 경로를 선택하세요.
자료 확인: 2026년 10월 1일. 본문의 사용량은 선택 방법을 설명하는 가상 예시이며 실제 과금 또는 성능 측정 결과가 아닙니다. 도입 직전 공식 요금·지원 API·계정 조건을 다시 확인하세요.
'소프트웨어개발' 카테고리의 다른 글
| PostgreSQL deadlock detected 해결: 40P01·잠금 순서·트랜잭션 재시도 (0) | 2026.09.30 |
|---|---|
| Kubernetes OOMKilled 해결: 메모리 limit·request·노드 압박 점검 순서 (0) | 2026.09.30 |
| Amazon MSK와 Confluent Cloud 비교: 관리형 Kafka 비용·네트워크·운영 기준 (0) | 2026.09.30 |