- AWS S3의 치명적 단점: 저장 요금보다 방문자가 이미지를 다운로드할 때 발생하는 아웃바운드(Egress) 트래픽 요금이 훨씬 무섭습니다.
- Cloudflare R2의 장점: 매월 10GB 스토리지 무료 + Egress 트래픽 수수료 0원(완전 무료).
- 결론: 커스텀 도메인(Custom Domain)만 연결하면 글로벌 엣지 CDN 캐싱까지 무료로 적용되어 블로그 이미지 호스팅용으로 완벽한 대안입니다.
블로그를 운영하다 보면 글의 수가 늘어날수록 이미지 용량과 호스팅 비용 관리가 큰 과제로 다가옵니다. 특히 개발 블로그나 기술/정보성 블로그는 고해상도 스크린샷과 다이어그램이 많이 들어가기 때문에 이미지 전송량이 빠르게 증가합니다.
많은 분들이 처음에는 익숙한 AWS S3를 떠올리지만, 구글 검색 유입이나 바이럴로 트래픽이 폭증하는 순간 '데이터 전송 비용(Egress Fee)'이라는 숨겨진 복병을 만나게 됩니다. 오늘은 AWS S3의 완벽한 대체재로 떠오른 Cloudflare R2를 활용해 평생 무료에 가까운 고성능 블로그 이미지 호스팅을 구축하는 방법을 상세히 알아보겠습니다.
1. 왜 AWS S3 대신 Cloudflare R2인가? (비용 및 스펙 비교)
Cloudflare R2가 블로그 생태계에서 '치트키'로 불리는 가장 결정적인 이유는 바로 아웃바운드 데이터 전송 수수료(Egress Fee)가 $0이라는 점입니다.
| 비교 항목 | AWS S3 | Cloudflare R2 |
|---|---|---|
| 무료 저장 용량 | 가입 후 1년만 5GB (이후 유료) | 매월 10GB (영구 무료) |
| 데이터 전송료 (Egress) | GB당 약 $0.09 (트래픽 증가 시 과금 폭탄) | 무제한 0원 ($0) |
| 읽기 요청 (Class B / GET) | 20,000건/월 (1년 한정) | 매월 1,000만 건 무료 |
| API 호환성 | 오리지널 S3 API | S3 API 100% 호환 |
💡 참고: 개인 블로그에서 월 10GB의 이미지는 최적화(WebP 기준) 시 수만 장에 달하며, 월 1,000만 회 이상의 조회가 일어나지 않는 한 사실상 영구 무료로 운영할 수 있습니다.
2. Cloudflare R2 이미지 호스팅 4단계 구축 실전 가이드
Step 1: Cloudflare R2 버킷(Bucket) 생성
- Cloudflare 대시보드에 로그인합니다.
- 좌측 메뉴에서 [스토리지 및 데이터베이스] > [R2]를 클릭합니다. (최초 이용 시 결제 카드 등록이 필요할 수 있으나, 무료 티어 초과 전까지는 0원 청구됩니다.)
- [버킷 생성(Create Bucket)] 버튼을 클릭합니다.
- 버킷 이름(예:
my-blog-images)을 입력하고 위치(Location)는 자동(Automatic) 또는 한국과 가까운 아시아-태평양 지역(APAC)으로 지정 후 생성을 완료합니다.
Step 2: 퍼블릭 접근(Public Access) 및 커스텀 도메인 연결
이미지를 블로그 글에 <img src="..."> 형태로 띄우려면 외부 방문자가 읽을 수 있도록 공개 설정과 연결 도메인이 필요합니다.
🌟 최고 추천 방법 (커스텀 도메인 연결):
생성된 버킷의 [설정(Settings)] > [공용 액세스(Public Access)] 탭으로 이동하여 [커스텀 도메인 연결(Connect Domain)]을 클릭합니다.
예: img.myblog.com 또는 cdn.myblog.com을 입력하면 Cloudflare DNS에 자동으로 레코드가 등록되고, 즉시 무료 SSL 인증서(HTTPS)와 전 세계 엣지 캐시가 적용됩니다.
Step 3: CORS(Cross-Origin Resource Sharing) 규칙 설정
블로그 본문 내 캔버스 처리나 외부 도메인 로딩 시 발생할 수 있는 이미지 차단 문제를 방지하기 위해 CORS 규칙을 등록해 둡니다.
버킷의 [설정] > [CORS 정책]에서 아래 JSON을 붙여넣고 저장합니다:
[
{
"AllowedOrigins": ["*"],
"AllowedMethods": ["GET", "HEAD"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 86400
}
]
Step 4: API 토큰 발급 (자동 업로드용 / S3 호환 클라이언트)
웹 대시보드에서 직접 드래그 앤 드롭으로 업로드해도 되지만, PicGo, ShareX 같은 업로더 도구나 Node.js / Python 자동화 스크립트를 쓰려면 S3 호환 API 토큰이 필요합니다.
- R2 개요 화면 우측 상단의 [R2 API 토큰 관리(Manage R2 API Tokens)] 클릭
- 권한: 관리자(읽기 및 쓰기) 선택
- 발급 후 나타나는
Access Key ID,Secret Access Key, 그리고Endpoint URL을 안전한 곳에 복사해 둡니다.
3. 코드 예시: Next.js / Node.js에서 R2로 이미지 업로드하기
Cloudflare R2는 기존 @aws-sdk/client-s3 라이브러리를 그대로 재사용할 수 있습니다. 엔드포인트 URL만 R2 주소로 변경해주면 끝납니다.
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
// 1. R2 클라이언트 초기화 (S3 SDK와 100% 호환)
const s3 = new S3Client({
region: "auto",
endpoint: `https://${process.env.CLOUDFLARE_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: process.env.R2_ACCESS_KEY_ID!,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
},
});
// 2. 이미지 업로드 함수 예시
export async function uploadImage(fileBuffer: Buffer, fileName: string, mimeType: string) {
const command = new PutObjectCommand({
Bucket: process.env.R2_BUCKET_NAME,
Key: `blog/${Date.now()}-${fileName}`,
Body: fileBuffer,
ContentType: mimeType,
});
await s3.send(command);
// 커스텀 도메인 URL 반환
return `https://img.myblog.com/blog/${Date.now()}-${fileName}`;
}
4. 구글 SEO 관점에서의 이미지 최적화 팁 (Core Web Vitals)
스토리지 구축이 끝났다면, 검색 순위를 높이기 위한 이미지 테크니컬 SEO 3원칙을 함께 적용해야 합니다.
PNG나 원본 JPG 대신 WebP 포맷으로 변환 후 R2에 업로드하세요. 동일한 품질 대비 용량을 30~50% 줄여 LCP(Largest Contentful Paint) 속도를 획기적으로 향상시킵니다.
블로그 이미지는 한번 업로드하면 거의 바뀌지 않습니다. 업로드 시 Cache-Control: public, max-age=31536000, immutable 헤더를 부여하여 브라우저 및 CDN 캐시 효율을 100% 활용하세요.
구글 이미지 검색 노출을 위한 서술형 alt 속성은 필수이며, 레이아웃 이동(CLS 방지)을 위해 HTML 태그에 고유 비율이나 가로/세로 크기를 지정해 두는 것이 좋습니다.
5. 자주 묻는 질문 (FAQ)
Q. 카드를 등록해야 하나요? 요금이 부과되지는 않나요?
A. Cloudflare 악용 방지를 위해 카드 등록이 필요할 수 있지만, 월 10GB 용량 및 1,000만 회 읽기 요청 미만일 경우 단 1원도 청구되지 않습니다.
Q. Cloudflare에 도메인이 등록되어 있지 않아도 쓸 수 있나요?
A. 기본적으로 제공되는 pub-xxxxxxxx.r2.dev 형태의 공개 URL을 바로 사용할 수 있습니다. 다만 정식 커스텀 도메인 연결을 원하신다면 네임서버를 Cloudflare로 연결해 두는 것을 강력히 권장합니다.
Q. 이미지를 쉽게 올릴 수 있는 GUI 데스크톱 툴이 있나요?
A. 네, PicGo 또는 Cyberduck에 R2 S3 토큰을 등록해 두면 바탕화면에서 이미지를 드래그하는 즉시 클라우드에 업로드되고 마크다운 링크가 클립보드에 자동 복사됩니다.
💡 마치며
더 이상 블로그 방문자가 늘어날 때마다 클라우드 데이터 전송료를 걱정할 필요가 없습니다. Cloudflare R2와 커스텀 도메인을 결합하여 비용 걱정 없는 안정적이고 빠른 이미지 CDN 환경을 직접 경험해 보시기 바랍니다!
