클라우드 스토리지 10개사의 업로드 상한·요금·특징을 철저히 비교|S3/GCS/Azure/R2
클라우드 스토리지 서비스를 선택할 때, 단일 업로드 상한·멀티파트 업로드 대응·무료 티어·요금·이그레스(전송) 비용은 중요한 비교 포인트입니다. AWS S3가 사실상의 업계 표준이지만, 비용·엣지 배신·특정 용도에 따라 더 적합한 옵션이 있습니다. 본 기사에서는 주요 10개 서비스의 사양과 용도별 추천을 정리합니다.
단일 업로드 제한, 멀티파트 제한, 무료 한도 비교표
| 서비스 | 단일 객체 한도 | 멀티파트 업로드 제한 | 무료 계획 | 월별 예상 금액 (100GB) |
|---|---|---|---|---|
| AWS S3 | 5 GB | 5 TB | 5GB·2,000 요청/월(12개월) | $2.30〜 |
| Google Cloud Storage | 5 TB (단일 객체) | 5 TB | 5GB (Standard, US 동부) | $2.00〜 |
| Azure Blob Storage | 블록: 4.75TB, 페이지: 8TB | 195GB/블록 × 50,000블록 | 12개월 5GB (LRS) | $1.84〜 |
| Cloudflare R2 | 5 GB | 5 TB | 10GB/월·100만 작업/월 (영구) | $1.50(이그레스 무료) |
| Backblaze B2 | 5 GB | 10 TB | 10GB (영구) | $0.60〜 |
| DigitalOcean Spaces | 5 GB | 5 TB | 250GB + 1TB 전송/월 ($5~) | $5(250GB까지 포함) |
| Wasabi | 1 TB | 1 TB | 없음 (평가판만) | $0.68(이그레스 무료) |
| MinIO | 5 TB (구현 종속) | 5 TB | 셀프 호스팅(무제한) | 인프라 비용만 |
| Firebase Storage | 사실상 무제한(GCS 이용) | GCS 준수 | 5GB (Spark 플랜) | $0.026/GB〜 |
| Supabase Storage | 50MB(Free)/ 50GB(Pro) | Pro 이상에서 지원 | 1GB(Free 플랜) | $0.021/GB(Pro) |
※요금은 2026년 4월 기준의 예상치입니다. 리전, 스토리지 클래스, 사용량에 따라 변동합니다. 에그레스(데이터 전송) 비용은 대부분 위 표에 포함되지 않습니다.
각 서비스의 특징과 선택 방법
AWS S3
클라우드 스토리지의 사실상의 표준입니다. 많은 서비스가 S3 호환 API를 구현하고 있으며, 라이브러리와 도구의 에코시스템이 가장 충실합니다. 멀티파트 업로드는 <code>aws-sdk</code>로 자동화할 수 있으며, 최소 청크 크기 5MB·최대 10,000파트로 최대 5TB의 객체를 업로드할 수 있습니다. CloudFront와의 연계로 엣지 배송도 용이합니다. 다만 이그레스 비용이 높고($0.09/GB〜), 대량 전송이 있는 서비스에서는 비용이 과제가 됩니다.
Google Cloud Storage(GCS)
단일 객체 제한이 5TB로 크기 때문에 대용량 파일을 단일 객체로 관리하려는 사용 사례에 적합합니다. BigQuery, Vertex AI 등의 GCP 서비스와의 원활한 연계가 강점이며, 데이터 분석 파이프라인을 구축하는 경우의 최우선 선택입니다. 전송 비용은 S3보다 다소 저렴한 경향이 있습니다.
Azure Blob Storage
Microsoft 에코시스템(Office 365·Active Directory·Azure Functions 등)과의 호환성이 뛰어나며, 엔터프라이즈급 인증·컴플라이언스 기능이 충실합니다. 블록 Blob은 최대 4.75TB의 객체를 지원하고, 페이지 Blob(가상 디스크용)은 최대 8TB를 지원합니다. Hot·Cool·Archive 티어로 비용을 최적화할 수 있습니다.
Cloudflare R2
주요 특징은 엣그레스 비용이 무료라는 점입니다. S3 호환 API를 사용하므로 기존 S3 클라이언트를 거의 그대로 사용할 수 있습니다. Workers(엣지 컴퓨팅)와의 통합이 강력하여 엣지에서 직접 스토리지를 조작하는 아키텍처가 가능합니다. 영구적으로 월 10GB의 무료 계층을 제공하므로 개인 개발 및 소규모 서비스 출발점에 최적입니다.
Backblaze B2
업계 최저가 수준의 요금($0.006/GB/월)으로 비용 중심의 백업·미디어 아카이브 용도에 적합합니다. Cloudflare와의 "Bandwidth Alliance"로 B2에서 Cloudflare로의 이그레스가 무료가 되는 조합이 인기입니다. S3 호환 API를 제공하므로 마이그레이션도 쉽습니다.
DigitalOcean Spaces
월 $5부터 250GB 스토리지 + 1TB 전송 대역폭이 포함된 정액 요금제가 특징입니다. 소규모 서비스에서 예산을 예측하기 쉬운 것이 장점입니다. CDN이 표준으로 포함되어 있으며 설정이 간단합니다. DigitalOcean Droplets(가상 머신)와 같은 리전에서 사용하면 전송이 무료가 됩니다.
Wasabi
S3 호환이며 에그레스 무료(Wasabi에서 직접 다운로드 시), 저렴한 스토리지 비용($0.0068/GB/월)입니다. 다만 최소 보관 기간 규칙이 있어 90일 내 삭제된 데이터도 90일분 요금이 발생한다는 점에 주의가 필요합니다. 백업·콜드 데이터의 장기 보관에 적합합니다.
MinIO
온프레미스 또는 프라이빗 클라우드에 자체 호스팅할 수 있는 오픈소스 S3 호환 객체 스토리지입니다. Kubernetes와의 호환성이 우수하며 공식 Helm 차트가 제공됩니다. 데이터를 클라우드로 보내고 싶지 않은 규제 산업이나 온프레미스 환경의 개발·테스트 용도로 활용됩니다.
Firebase Storage
내부적으로 GCS를 사용하며, Firebase SDK를 사용한 모바일/웹앱에서의 직접 업로드를 쉽게 구현할 수 있습니다. Firebase Authentication과 연동된 세분화된 액세스 제어(Security Rules)가 강점입니다. 다만 Spark(무료) 플랜에서는 단일 파일의 상한이 사실상 낮게 설정되어 있을 수 있습니다.
Supabase Storage
PostgreSQL 기반의 BaaS(Backend as a Service)인 Supabase의 스토리지 기능입니다. Supabase Auth와의 RLS(Row Level Security) 기반 접근 제어가 고유의 강점입니다. Free 플랜은 파일 크기 제한이 50MB로 낮으므로 대용량 파일에는 Pro 플랜(50GB/파일) 이상이 필요합니다.
용도별 추천
| 용도 | 1순위 후보 | 이유 |
|---|---|---|
| 소규모 SaaS의 출발점 | Cloudflare R2 | 이그레스 무료·무료 티어 영구적·S3 호환 |
| 대용량 미디어 아카이브 | Backblaze B2 + Cloudflare | 최저가 스토리지 + 무료 이그레스 조합 |
| 엣지 배포·글로벌 전개 | Cloudflare R2 / AWS S3 + CloudFront | CDN 통합·저 레이턴시 배송 |
| 비용 최우선 | Wasabi / Backblaze B2 | 업계 최저가 수준의 스토리지 요금 |
| 엔터프라이즈 컴플라이언스 | AWS S3 / Azure Blob | 풍부한 인증·암호화·감사 기능 |
| 모바일 앱 직접 업로드 | Firebase Storage / Supabase Storage | SDK와 인증의 통합이 용이 |
| 온프레미스·프라이빗 클라우드 | MinIO | S3 호환·셀프호스트·오픈소스 |
| GCP 서비스와의 연동 | Google Cloud Storage | BigQuery・Vertex AI와의 원활한 통합 |
멀티파트 업로드란
멀티파트 업로드는 대용량 파일을 작은 부분으로 나누어 병렬로 업로드하는 메커니즘입니다. S3에서는 100MB를 초과하는 파일에 권장되며, 5GB를 초과하는 파일에는 필수입니다. 주요 이점은 다음과 같습니다.
- 병렬 업로드에 의한 처리량 향상
- 네트워크 단절 시 실패한 부분만 재전송 가능 (재개 가능)
- 단일 요청의 5GB 제한을 우회하여 최대 5TB까지 전송 가능
// AWS SDK v3 でのマルチパートアップロード例
import { S3Client, CreateMultipartUploadCommand,
UploadPartCommand, CompleteMultipartUploadCommand } from '@aws-sdk/client-s3';
const s3 = new S3Client({ region: 'ap-northeast-1' });
async function multipartUpload(bucket, key, file) {
// アップロードの開始
const { UploadId } = await s3.send(new CreateMultipartUploadCommand({
Bucket: bucket, Key: key,
}));
const chunkSize = 10 * 1024 * 1024; // 10MB
const parts = [];
for (let i = 0; i * chunkSize < file.size; i++) {
const chunk = file.slice(i * chunkSize, (i + 1) * chunkSize);
const { ETag } = await s3.send(new UploadPartCommand({
Bucket: bucket, Key: key,
UploadId, PartNumber: i + 1,
Body: chunk,
}));
parts.push({ ETag, PartNumber: i + 1 });
}
// パーツの結合(完了)
await s3.send(new CompleteMultipartUploadCommand({
Bucket: bucket, Key: key,
UploadId, MultipartUpload: { Parts: parts },
}));
}
이 기사에서 사용할 수 있는 테스트 파일 (무료)
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">경계값 테스트 파일 목록</a> — 다양한 클라우드 스토리지의 상한선 근처에서 업로드 테스트
- → <a href="/ja/files/images/png/" class="text-primary-600 dark:text-primary-400 hover:underline">PNG 테스트 이미지 목록</a> — 다양한 크기의 이미지로 스토리지 동작 확인
관련 기사
- → <a href="/ja/blog/s3-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">AWS S3・CloudFront 파일 업로드 제한 정리</a>
- → <a href="/ja/blog/how-to-test-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">파일 업로드 제한을 올바르게 테스트하는 방법</a>
- → <a href="/ja/blog/mb-vs-mib-file-size/" class="text-primary-600 dark:text-primary-400 hover:underline">MB 와 MiB 의 차이|파일 크기 단위의 올바른 이해</a>