Cloudflare R2 vs AWS S3 한국 리전 실측 지연시간·비용 비교와 사이드 프로젝트 전환 후기

월 2만 원이면 끝날 줄 알았던 스토리지 비용이 어느 날 15만 원 청구서로 돌아왔어요. 범인은 AWS S3 이그레스 요금. 데이터를 저장하는 건 싸지만, 꺼내는 순간 돈이 나가는 구조거든요.
사이드 프로젝트 개발자들 사이에서 Cloudflare R2가 실질적인 선택지로 떠오른 게 이 맥락이에요. 2022년 출시 당시엔 조용했는데, 2025년부터 국내 커뮤니티에서 실전 전환 후기가 쏟아지면서 달라졌어요.
단순 스펙 비교 아니에요. 실측 지연시간 데이터, 실제 비용 구조, 전환 후 체감 차이를 데이터 기반으로 풀어볼게요.
핵심 요약
- Cloudflare R2는 이그레스 요금이 완전 무료이며, 월 10GB 저장 + 100만 회 쓰기까지 무료 티어로 제공돼요.
- AWS S3 서울 리전 업로드 지연시간은 평균 80-120ms, R2는 90-140ms. 업로드는 비슷해요.
- 다운로드는 달라요. R2는 Cloudflare CDN이 기본 포함이라 S3 단독 대비 체감 속도 차이가 커요.
- 월 50GB 트래픽 기준, S3+CloudFront 대비 R2 단독 사용 시 비용이 약 60-70% 절감돼요.
- S3 호환 API라 엔드포인트와 자격증명만 바꾸면 전환 끝이에요.
R2가 갑자기 주목받은 이유
AWS S3는 2006년 출시 후 클라우드 스토리지의 사실상 표준이 됐어요. S3 호환 API는 스토리지 세계의 공용어처럼 쓰이고요. 문제는 가격 구조예요.
저장 자체는 GB당 월 약 $0.025(서울 리전)로 저렴해요. 그런데 데이터를 꺼낼 때, 이그레스 트래픽에 GB당 $0.09(첫 10TB 기준)가 붙어요. 이미지 서비스는 조회가 쓰기보다 수십 배 많으니까, 결국 트래픽 비용이 전체를 지배하는 구조예요.
Cloudflare가 2022년 R2를 내놓으면서 내건 조건은 단순했어요. 이그레스 요금 없음. 저장은 GB당 월 $0.015, 쓰기 요청은 100만 건당 $4.50, 읽기 요청은 100만 건당 $0.36이에요(2026년 4월 공식 가격 기준). 무료 티어로 저장 10GB, 쓰기 100만 회, 읽기 1,000만 회까지 매달 제공돼요.
사이드 프로젝트 개발자 입장에서 이 조건은 꽤 다른 그림이었어요.
실측 지연시간: 숫자로 보는 차이
업로드 속도: 거의 비슷해요
marinesnow34의 측정 데이터(2023년, 국내 환경 기준) 기준으로, AWS S3 서울 리전 직접 업로드 지연시간은 평균 80-120ms예요. Cloudflare R2는 당시 아시아 최근접 PoP인 도쿄 경유로 90-150ms를 기록했고요.
2026년 현재 Cloudflare는 아시아 태평양 네트워크를 확장하고 한국 통신사 피어링도 개선했어요. 그 결과 업로드 지연시간 차이는 체감상 거의 없는 수준으로 좁혀졌어요.
다운로드 속도: 여기서 갈려요
이미지 서비스에서 사용자가 경험하는 건 로딩 속도, 즉 다운로드 성능이에요.
- AWS S3 단독: S3 엔드포인트 지연 + 이그레스 요금 발생
- AWS S3 + CloudFront: 지연시간은 개선되지만 추가 비용 구조 발생
- Cloudflare R2: Cloudflare CDN 기본 포함, 추가 설정 없이 엣지 캐싱 작동
R2는 전 세계 300개 이상 PoP를 통해 콘텐츠를 배포해요. 한국에서 접근하면 서울 인근 PoP가 응답하니까, 다운로드 체감 속도는 S3 단독 대비 크게 달라요.
| 항목 | AWS S3 서울 (단독) | AWS S3 + CloudFront | Cloudflare R2 |
|---|---|---|---|
| 업로드 지연 | 80-120ms | 80-120ms | 90-140ms |
| 다운로드 지연 | 150-300ms+ | 20-60ms | 20-60ms |
| 이그레스 요금 | GB당 $0.09 | CF $0.085 + S3 포함 | 무료 |
| CDN 포함 | ❌ 별도 설정 | ✅ 별도 비용 | ✅ 기본 포함 |
| 무료 티어 | 첫 12개월 5GB | 별도 | 매달 10GB |
| S3 API 호환 | — | — | ✅ |
비용 직접 계산해봤어요
가정: 저장 30GB, 월 다운로드 트래픽 50GB, 요청 300만 회(읽기 270만, 쓰기 30만).
AWS S3 서울 단독
- 저장: 30GB × $0.025 = $0.75
- 이그레스: 50GB × $0.09 = $4.50
- PUT 요청: $1.50 / GET 요청: $1.08
- 합계: 약 $7.83/월
AWS S3 + CloudFront
- S3 기본 $2.33 + CloudFront 트래픽/요청 추가 약 $5-7
- 합계: 약 $8-10/월
Cloudflare R2
- 저장: 20GB 과금 × $0.015 = $0.30 (10GB 무료 제외)
- 이그레스: $0
- PUT 요청: 약 $1.35 / GET 요청: 약 $0.97
- 합계: 약 $2.62/월
트래픽이 늘수록 차이는 더 벌어져요. 100GB 트래픽이면 AWS는 이그레스만 $9, R2는 그 부분이 $0이에요.
마이그레이션 난이도
코드 변경은 거의 없어요. @aws-sdk/client-s3를 그대로 쓰면서 엔드포인트만 바꾸면 돼요.
// 변경 전 (AWS S3)
const client = new S3Client({ region: "ap-northeast-2" });
// 변경 후 (Cloudflare R2)
const client = new S3Client({
region: "auto",
endpoint: "https://<ACCOUNT_ID>.r2.cloudflarestorage.com",
credentials: { accessKeyId: R2_KEY, secretAccessKey: R2_SECRET }
});
버킷 생성, 자격증명 발급, 엔드포인트 교체. 기존 업로드/다운로드 로직은 손댈 필요 없어요.
실전에서 주의해야 할 세 가지
첫째, 퍼블릭 접근 설정이 S3와 달라요. R2에서 이미지를 퍼블릭으로 제공하려면 커스텀 도메인 연결 또는 r2.dev 서브도메인 활성화가 필요해요. Cloudflare 대시보드에서 2-3단계면 해결되지만, S3 방식에 익숙하면 처음엔 헷갈릴 수 있어요.
둘째, 서울 리전이 명시적으로 없어요. R2는 region: "auto"로 Cloudflare가 자동으로 가장 가까운 데이터센터를 결정해요. 데이터 주권 규정이 있는 서비스라면 법무팀과 먼저 확인이 필요해요.
셋째, 모니터링 도구가 AWS보다 약해요. CloudWatch 수준의 세밀한 관제는 R2에서 제공되지 않아요. 요청 수와 저장량 기본 지표는 있지만, 세부 로그 분석이 필요한 규모라면 부족할 수 있어요.
어떤 선택이 맞을까요
- 사이드 프로젝트, 스타트업 초기: R2가 거의 모든 면에서 유리해요. 비용 절감 효과 크고, 전환 난이도도 낮아요.
- AWS 생태계에 깊이 묶인 서비스: Lambda, RDS, IAM이 촘촘하게 연결된 구조라면 전환 비용이 절감액을 상쇄할 수 있어요.
- 이그레스 트래픽이 많은 미디어 서비스: R2 전환이 가장 빠르게 ROI를 회수하는 케이스예요.
참고로, 2026년 하반기에 Cloudflare가 데이터 로케이션 힌트 기능을 강화할 것으로 예고했어요. 한국 리전 명시 지정이 가능해지면 데이터 주권 이슈도 해소될 가능성이 높아요.
지금 S3 청구서가 예상보다 높게 나오고 있다면, 이그레스 요금만 따로 뽑아서 계산해 보세요. 그 숫자가 생각보다 크면, R2 전환에 걸리는 시간은 반나절도 안 걸려요.
참고자료
Photo by Ales Nesetril on Unsplash


