들어가며
웹 서비스를 개발하다 보면 이미지, 문서, HTML 파일 등을 저장할 스토리지가 필요합니다. 예전에는 AWS S3가 거의 유일한 선택지였지만, 이제는 다양한 옵션이 있습니다.
이 글에서는 Vercel Blob, AWS S3, Cloudflare R2를 비교하고, 어떤 상황에서 어떤 서비스를 선택하면 좋을지 정리해보겠습니다.
서비스 개요
Vercel Blob
Vercel에서 제공하는 파일 스토리지 서비스입니다. Next.js와의 연동이 매우 쉽고, Vercel 프로젝트에 자동으로 환경 변수가 설정됩니다.
AWS S3
클라우드 스토리지의 사실상 표준입니다. 가장 오래되었고, 가장 많은 기능을 제공합니다. 다른 스토리지 서비스들도 대부분 S3 호환 API를 제공할 정도입니다.
Cloudflare R2
Cloudflare에서 제공하는 S3 호환 스토리지입니다. 가장 큰 특징은 데이터 전송 비용(Egress)이 무료라는 점입니다.
비교 표
| 항목 | Vercel Blob | AWS S3 | Cloudflare R2 |
|---|---|---|---|
| 스토리지 비용 | $0.023/GB/월 | $0.023/GB/월 | $0.015/GB/월 |
| 데이터 전송 | $0.05/GB | $0.09/GB | 무료 |
| 요청 비용 | 포함 | $0.0004/1000건 | $0.36/100만건 |
| 무료 티어 | Hobby 플랜 내 포함 | 5GB/12개월 | 10GB 영구 무료 |
| S3 호환 | ❌ | ✅ | ✅ |
| 글로벌 CDN | ✅ 자동 | CloudFront 별도 | ✅ 자동 |
| 설정 난이도 | 매우 쉬움 | 복잡함 | 보통 |
각 서비스의 장단점
Vercel Blob
장점
- Vercel + Next.js 환경에서 설정이 가장 간단
- 대시보드에서 파일 관리 가능
- 글로벌 CDN 자동 적용
- SDK가 직관적
단점
- Vercel 생태계에 종속
- S3 호환 API 미지원 (마이그레이션 시 코드 수정 필요)
- 다른 서비스 대비 기능이 제한적
적합한 경우
- Vercel에 배포된 Next.js 프로젝트
- 빠른 구축이 필요한 경우
- 파일 수가 많지 않은 소규모 프로젝트
AWS S3
장점
- 가장 성숙한 서비스, 안정성 검증됨
- 풍부한 기능 (버저닝, 수명주기 정책, 이벤트 트리거 등)
- 다른 AWS 서비스와 연동 용이
- 거의 모든 언어/프레임워크에서 SDK 지원
단점
- 설정이 복잡 (IAM, 버킷 정책, CORS 등)
- CDN은 CloudFront를 별도로 설정해야 함
- 데이터 전송 비용이 비쌈
적합한 경우
- 대규모 서비스
- AWS 생태계를 이미 사용 중인 경우
- 복잡한 파일 관리 정책이 필요한 경우
Cloudflare R2
장점
- 데이터 전송 비용 무료 (대용량 파일 서빙에 유리)
- S3 호환 API (기존 코드 재사용 가능)
- Cloudflare CDN 자동 연동
- 스토리지 비용도 저렴
단점
- S3 대비 기능이 제한적
- Cloudflare 생태계 학습 필요
- 일부 S3 기능 미지원
적합한 경우
- 이미지/동영상 등 대용량 파일 서빙
- 데이터 전송량이 많은 서비스
- 비용 최적화가 중요한 경우
가격 시뮬레이션
시나리오: 10GB 저장, 월 100GB 전송
| 서비스 | 스토리지 | 전송 | 합계 |
|---|---|---|---|
| Vercel Blob | $0.23 | $5.00 | $5.23 |
| AWS S3 | $0.23 | $9.00 | $9.23 |
| Cloudflare R2 | $0.15 | $0.00 | $0.15 |
데이터 전송이 많다면 R2가 압도적으로 저렴합니다.
시나리오: 1GB 저장, 월 5GB 전송 (소규모)
| 서비스 | 스토리지 | 전송 | 합계 |
|---|---|---|---|
| Vercel Blob | 무료 티어 | 무료 티어 | $0 |
| AWS S3 | $0.02 | $0.45 | $0.47 |
| Cloudflare R2 | 무료 티어 | $0.00 | $0 |
소규모라면 Vercel Blob이나 R2 모두 무료로 사용 가능합니다.
선택 가이드
Vercel + Next.js 사용?
├── Yes → 소규모/빠른 구축 → Vercel Blob ✅
│ 대용량 전송 필요 → Cloudflare R2
└── No → AWS 생태계 사용 중?
├── Yes → AWS S3
└── No → 비용 중요 → Cloudflare R2 ✅
기능 중요 → AWS S3
마치며
저는 현재 Vercel Blob을 사용하고 있습니다. Next.js 프로젝트에서 설정이 너무 간단하고, 소규모 프로젝트에서는 무료 티어로 충분하기 때문입니다.
다만 파일 수가 많아지거나 데이터 전송량이 늘어나면 Cloudflare R2로 마이그레이션을 고려할 예정입니다. R2는 S3 호환 API를 제공하기 때문에 전환도 비교적 수월합니다.
여러분의 상황에 맞는 스토리지를 선택하시길 바랍니다!