Vercel, Cloudflare Pages, GitHub Pages 중 어디에 올릴까?

Vercel, Cloudflare Pages, GitHub Pages의 무료 호스팅 한도, 비용, 정적 사이트 배포 기능, 확장성, 마이그레이션 기준을 공식 문서 수치로 비교했습니다.

무료 정적 배포 플랫폼은 겉으로 보면 비슷합니다. Git에 push하면 빌드되고, 커스텀 도메인을 붙일 수 있고, CDN에서 파일을 서빙합니다. 하지만 트래픽이 늘거나, 서버리스 함수가 필요해지거나, 팀원이 붙거나, 빌드가 무거워지는 순간 성격이 갈립니다.

이 글은 “어디가 제일 좋다”를 고르는 글이 아닙니다. 어느 시점까지 어떤 플랫폼을 쓰고, 언제 옮겨야 하는지를 판단하기 위한 비교입니다. 수치는 공식 문서와 가격 페이지를 기준으로 확인했습니다.

현재 조건이 “정적 HTML로 끝나는 기술 블로그”라면 GitHub Pages가 맞습니다. 서버를 운영할 이유가 없고, 트래픽 비용을 걱정할 단계도 아니기 때문입니다. 반대로 월 수십만 PV가 안정적으로 나오거나, Cloudflare의 WAF/cache/Workers까지 함께 쓰게 되면 Cloudflare Pages로 옮기는 편이 더 자연스럽습니다.

결론부터

개인 기술 블로그나 작은 문서 사이트라면 GitHub Pages로 시작해도 충분합니다. 서버가 없고, 콘텐츠가 정적 HTML로 끝나며, 월 100GB 수준의 소프트 대역폭 한도 안에 있다면 가장 단순합니다.

정적 사이트지만 트래픽이 커질 수 있고, Cloudflare DNS/WAF/Workers/R2/D1 같은 주변 기능까지 쓸 계획이라면 Cloudflare Pages가 더 오래 버팁니다. 특히 정적 asset 요청이 무료이자 unlimited라는 점은 광고형 콘텐츠 사이트에 큰 장점입니다.

Next.js 앱, preview 중심 협업, 서버리스 함수, ISR, 관측성, 팀 기능이 중요해지면 Vercel이 편합니다. 대신 편의 기능이 늘수록 비용 구조가 세밀해집니다. “그냥 무료 배포”로 쓰기보다 앱 플랫폼으로 보는 편이 맞습니다.

상황 추천
개인 기술 블로그, 문서, 포트폴리오 GitHub Pages
정적 콘텐츠 + 트래픽 증가 + Cloudflare 생태계 Cloudflare Pages
Next.js 앱, preview 협업, 서버리스/ISR Vercel
광고형 블로그를 거의 0원으로 오래 운영 GitHub Pages로 시작, 트래픽이 커지면 Cloudflare Pages
로그인, 결제, 대시보드가 붙는 제품 앱 Vercel 또는 Cloudflare Workers/Pages 조합

숫자로 보는 기본 비교

항목 GitHub Pages Cloudflare Pages Vercel
기본 가격 GitHub Free 공개 저장소에서 사용 가능 Free 플랜 가능 Hobby $0/mo, Pro $20/mo
정적 트래픽 월 100GB soft bandwidth limit 정적 asset 요청 무료/무제한 Hobby Fast Data Transfer 100GB, Pro 1TB
사이트 크기 published site 1GB Free 20,000 files, paid 100,000 files CLI static upload Hobby 100MB, Pro 1GB
빌드 제한 Pages 배포 10분 timeout Free 500 builds/month, 20분 timeout build time 45분
빌드 빈도 Pages 기본 빌드 10/hour soft limit Free 1 concurrent, Pro 5 concurrent Hobby 100 deployments/day, 100/hour
서버리스 없음 Pages Functions = Workers quota 사용 Vercel Functions
함수 무료 한도 해당 없음 Workers Free 100,000 requests/day Hobby 1M invocations/month
커스텀 도메인 가능 Free 기준 project당 100개 Hobby project당 50개
리다이렉트/헤더 정적 파일/프레임워크 빌드 중심 _redirects, _headers 지원 redirects, rewrites, headers, middleware
가장 강한 지점 단순함과 GitHub 통합 정적 트래픽 비용과 엣지 생태계 Next.js/DX/preview/앱 기능
약한 지점 동적 기능 없음, 상업 서비스 제한 Workers 모델 이해 필요 사용량이 늘면 비용 모델을 봐야 함

위 표에서 특히 조심해야 할 부분은 한도의 성격입니다. GitHub Pages의 월 100GB와 시간당 10 builds는 soft limit이고, 사이트 1GB와 배포 10분 timeout은 실제로 막히는 제약에 가깝습니다. Vercel의 100GB/1TB는 포함 사용량이고, 초과하면 요금 항목을 봐야 합니다. Cloudflare Pages의 정적 asset 요청은 Functions를 호출하지 않는 요청일 때 무료/무제한입니다.

그래서 표만 보면 Cloudflare Pages가 압도적으로 좋아 보일 수 있습니다. 하지만 실제 선택은 숫자 하나로 끝나지 않습니다. 운영자가 무엇을 덜 신경 쓰고 싶은지가 더 중요합니다.

GitHub Pages: 블로그와 문서에 가장 단순하다

GitHub Pages는 HTML, CSS, JavaScript 파일을 저장소에서 가져와 정적 사이트로 호스팅하는 서비스입니다. 개인 블로그, 프로젝트 문서, 포트폴리오처럼 “빌드 결과물이 파일이면 끝나는” 사이트와 잘 맞습니다.

장점은 단순함입니다. 저장소, 이슈, Actions, Pages가 모두 GitHub 안에 있습니다. Astro나 Jekyll로 HTML을 만들고 Pages에 올리면 별도 런타임 서버가 없습니다.

하지만 GitHub Pages는 무료 웹호스팅 서비스나 SaaS 운영 플랫폼이 아닙니다. GitHub 문서는 Pages가 온라인 비즈니스, 전자상거래, 상업 거래를 주 목적으로 하는 사이트에 쓰이는 것을 의도하지 않는다고 설명합니다. 또한 published site는 1GB 이하, 대역폭은 월 100GB soft limit, Pages 배포는 10분을 넘으면 timeout, 기본 Pages 빌드는 시간당 10회 soft limit가 있습니다.

GitHub Pages가 좋은 경우 피해야 하는 경우
글, 문서, 포트폴리오 로그인/결제/대시보드
정적 HTML로 충분한 사이트 서버리스 API가 필요한 앱
GitHub Actions로 빌드 자동화 월 100GB를 꾸준히 넘는 트래픽
운영 비용을 거의 0원으로 유지 상업 거래가 핵심인 서비스

활용법: 블로그는 GitHub Pages로 시작하고, 이미지는 너무 크게 넣지 않으며, sitemap/RSS/canonical을 빌드에 포함합니다. 트래픽이 월 100GB 근처로 가거나, GitHub Support에서 CDN 사용/호스팅 이전을 권할 정도가 되면 Cloudflare Pages로 옮기는 편이 자연스럽습니다.

Cloudflare Pages: 정적 트래픽이 커질수록 유리하다

Cloudflare Pages의 가장 큰 장점은 정적 asset 요청 비용입니다. Cloudflare 문서는 Pages의 정적 asset 요청이 free와 paid plan 모두에서 무료이자 unlimited라고 설명합니다. 광고형 블로그, 문서 사이트, 이미지가 많지 않은 콘텐츠 사이트라면 이 차이가 큽니다.

빌드 한도도 명확합니다. Free는 500 builds/month, 1 concurrent build, build timeout 20분입니다. Pro는 5,000 builds/month와 5 concurrent builds, Business는 20,000 builds/month와 20 concurrent builds를 제공합니다. 파일 수는 Free 20,000개, paid 100,000개이고, 단일 asset 파일 크기는 25MiB입니다.

동적 기능은 Pages Functions를 통해 Workers로 넘어갑니다. 여기서부터는 정적 호스팅이 아니라 Cloudflare Workers 요금과 한도를 이해해야 합니다. Workers Free는 100,000 requests/day, Workers Paid는 최소 $5/month이고 10 million requests/month가 포함됩니다. Cloudflare는 Workers Paid에 대해 추가 data transfer 또는 bandwidth charge가 없다고 설명합니다.

Cloudflare Pages가 좋은 경우 주의할 점
정적 트래픽이 커질 수 있는 블로그 빌드 500/month 한도
Cloudflare DNS, WAF, R2, D1, Workers를 같이 쓸 계획 Functions는 Workers quota와 과금 모델을 따른다
redirect/header를 정적 파일로 관리하고 싶음 단일 asset 25MiB 제한
preview deployment가 많이 필요함 Workers/D1/KV까지 쓰면 구조 설계가 필요

활용법: 블로그가 커지고 트래픽 비용이 걱정되면 Cloudflare Pages로 옮기는 게 좋습니다. 정적 페이지는 Pages가 맡고, 폼 처리나 간단한 API는 Pages Functions로 시작합니다. 데이터가 필요해지면 D1, 파일은 R2, 캐시는 KV를 검토합니다.

Vercel: 블로그 호스팅보다 앱 플랫폼에 가깝다

Vercel은 정적 사이트도 잘 배포하지만, 진짜 강점은 Next.js와 앱 개발 경험입니다. preview deployment, branch 기반 협업, 함수, ISR, analytics, middleware, rewrite, rollback 같은 기능이 자연스럽게 이어집니다.

가격은 Hobby $0/month, Pro $20/month입니다. Hobby에도 100GB Fast Data Transfer, 1M function invocations/month, 4 CPU-hours, 360 GB-hours provisioned memory가 포함됩니다. Pro는 1TB Fast Data Transfer가 포함되고, 초과분은 Fast Data Transfer 기준으로 GB당 과금이 붙습니다. Vercel 가격 페이지는 Pro의 included usage credit과 pay-as-you-go 모델도 함께 설명합니다.

한도도 앱 플랫폼답게 세분화되어 있습니다. build time per deployment는 45분이고, Hobby는 deployments/day 100, deployments/hour 100입니다. 함수 실행 시간은 프로젝트 설정과 Fluid compute 적용 여부에 따라 달라질 수 있으므로, 단순 블로그 비교에서는 “함수를 얼마나 오래 실행할 수 있나”보다 “함수와 이미지 최적화, analytics, 로그가 비용 항목으로 분리된다”는 점을 먼저 봐야 합니다.

Vercel이 좋은 경우 주의할 점
Next.js 앱과 블로그가 같은 제품 안에 있음 사용량 기반 과금 항목이 많다
preview deployment가 협업의 중심 단순 정적 블로그에는 과할 수 있음
ISR, middleware, serverless functions가 필요 Hobby는 Git organization repo 연결 제한이 있음
팀, 관측성, rollback, 보안 기능이 중요 트래픽/함수/이미지 최적화 비용을 봐야 함

활용법: “블로그”만이면 Vercel은 과할 수 있습니다. 하지만 블로그가 제품 앱의 일부이고, 로그인 후 대시보드, 실험 페이지, 서버리스 API, Next.js 렌더링 전략이 필요하다면 Vercel은 개발 속도가 빠릅니다.

비용 시나리오로 보면 더 선명하다

1. 월 1만 방문 기술 블로그

대부분 GitHub Pages로 충분합니다. 글은 정적 HTML이고, 이미지 최적화만 신경 쓰면 월 100GB soft limit 근처에도 가기 어렵습니다. 비용은 도메인 비용을 제외하면 거의 0원에 가깝습니다.

예를 들어 페이지 1회 로드에 HTML, CSS, JavaScript, 이미지까지 합쳐 평균 1MB가 전송된다고 가정하면 1만 PV는 약 10GB입니다. 같은 글이라도 이미지가 많아 평균 3MB가 되면 3만 PV만으로 약 90GB에 가까워집니다. GitHub Pages에서 중요한 기준은 방문자 수 자체가 아니라 PV × 페이지당 전송량입니다.

2. 월 50만 PV 광고형 블로그

트래픽과 정적 asset 요청이 중요해집니다. 이 구간부터는 Cloudflare Pages가 매력적입니다. 정적 asset 요청이 무료/무제한이고, Cloudflare DNS/WAF/cache 생태계를 같이 쓸 수 있습니다.

월 50만 PV에 페이지당 평균 1MB만 잡아도 약 500GB 전송량입니다. GitHub Pages의 soft bandwidth limit를 안정적으로 넘는 구간이고, Vercel Hobby의 100GB 포함량도 초과합니다. 이때는 “무료 배포가 되느냐”보다 정적 요청을 Functions로 태우지 않고, 이미지와 큰 파일을 어떻게 분리할지가 더 중요합니다.

3. 블로그 + 회원 기능 + 대시보드

이제 단순 호스팅 비교가 아닙니다. Vercel과 Cloudflare Workers/Pages 중 앱 구조에 맞춰 골라야 합니다. Next.js 중심이면 Vercel이 빠르고, edge-first API와 Cloudflare 스토리지를 함께 쓸 계획이면 Cloudflare가 강합니다.

4. SaaS로 확장

GitHub Pages는 이 단계의 플랫폼이 아닙니다. Cloudflare Pages도 정적 shell + Workers 앱 구조를 설계해야 합니다. Vercel은 앱 배포와 팀 협업은 좋지만, 비용 항목이 세분화되어 있으므로 트래픽, 함수, 이미지, 로그, analytics를 따로 추적해야 합니다.

기능 지원 비교

기능 GitHub Pages Cloudflare Pages Vercel
Static hosting 좋음 좋음 좋음
Custom domain 지원 지원 지원
HTTPS 지원 지원 지원
Preview deployments 제한적 강함 강함
Serverless functions 미지원 Pages Functions/Workers Vercel Functions
Edge runtime 미지원 Workers Edge/Functions 계열
Redirects 빌드/정적 방식 _redirects vercel.json, framework config
Headers 제한적 _headers vercel.json, framework config
Built-in analytics 없음 Web Analytics 별도 사용 가능 Web Analytics/Speed Insights
Rollback Git/Actions 기반 지원 지원
대형 정적 트래픽 soft limit 고려 강함 포함량/과금 고려
Next.js 최적 DX 보통 가능하지만 별도 고려 매우 강함

언제까지 쓰고, 언제 옮길까

GitHub Pages를 계속 써도 되는 기준

Cloudflare Pages로 옮길 기준

Vercel로 옮길 기준

마이그레이션은 어떻게 하면 좋을까

처음부터 플랫폼 종속 기능을 많이 쓰면 나중에 옮기기 어렵습니다. 그래서 정적 블로그는 다음 원칙을 지키는 편이 좋습니다.

  1. 콘텐츠는 Markdown 또는 CMS 데이터로 분리한다.
  2. URL 구조를 플랫폼 이름과 무관하게 설계한다.
  3. canonical, sitemap, RSS를 프레임워크 레벨에서 만든다.
  4. 이미지와 큰 파일은 나중에 별도 스토리지로 뺄 수 있게 둔다.
  5. redirect 규칙은 문서화한다.
  6. 환경 변수와 secret은 플랫폼별 이름에 의존하지 않게 정리한다.

GitHub Pages에서 Cloudflare Pages로 옮길 때는 보통 repository 연결, build command, output directory, custom domain, DNS 전환 순서로 진행합니다. Astro 기준이라면 build command는 pnpm build, output directory는 dist입니다.

Cloudflare Pages로 옮길 가능성을 열어두려면 redirect 규칙도 코드 옆에 남겨두는 편이 좋습니다. 다만 언어별 URL을 운영한다면 와일드카드 redirect를 함부로 걸면 안 됩니다. 예를 들어 /ko/posts/foo/posts/foo로 보내면 정적 파일이 없어서 404가 날 수 있습니다. 루트 언어 선택 페이지만 정리하려면 다음처럼 범위를 좁히는 편이 안전합니다.

# public/_redirects
/ko / 301

반대로 /ko/posts/*까지 루트로 옮기려면 먼저 새 URL을 실제로 만들고, slug 단위 redirect 표를 따로 관리해야 합니다. “대충 패턴으로 한 번에 넘기기”는 블로그 마이그레이션에서 검색 유입을 잃는 가장 쉬운 방법입니다.

GitHub Pages에서 Vercel로 옮길 때도 핵심은 비슷합니다. 다만 Next.js로 갈 계획이 아니라면 Vercel의 장점 일부를 못 씁니다. Astro 정적 블로그만 올린다면 Vercel은 “빠른 preview와 편한 dashboard”가 장점이고, Cloudflare Pages는 “정적 트래픽 비용 구조”가 장점입니다.

현재 조건에서의 선택

현재 조건이 기술 블로그라면 GitHub Pages가 가장 가벼운 출발점입니다. 아직 앱이 아니고, 글은 정적 HTML로 충분하며, 서버를 운영할 이유가 없기 때문입니다.

하지만 이 선택이 영구적이라는 뜻은 아닙니다. 트래픽이 커지고 광고형 콘텐츠가 늘면 Cloudflare Pages가 다음 후보입니다. 작은 제품이 실제 앱으로 커지고 로그인/대시보드/서버 API가 붙으면 Vercel 또는 Cloudflare Workers 기반 앱 구조를 다시 비교해야 합니다.

좋은 선택은 “가장 강한 플랫폼”을 고르는 것이 아닙니다. 지금의 복잡도에 맞는 플랫폼을 쓰다가, 복잡도가 바뀌는 순간 옮길 수 있게 경계를 남기는 것입니다.

자주 묻는 질문

개인 블로그도 처음부터 Cloudflare Pages로 가는 게 낫지 않나?

Cloudflare Pages도 좋은 선택입니다. 특히 Cloudflare DNS를 이미 쓰고 있고, 나중에 Workers/R2/D1까지 붙일 계획이 있다면 처음부터 Cloudflare Pages로 시작해도 됩니다. 다만 GitHub에 글을 쓰고 Actions로 빌드하는 흐름이 이미 편하다면 GitHub Pages가 더 단순합니다.

Vercel 무료 플랜으로 블로그를 운영하면 안 되나?

가능합니다. 다만 정적 블로그만 운영한다면 Vercel의 강점인 Next.js 통합, preview workflow, serverless functions를 충분히 쓰지 못할 수 있습니다. 블로그가 제품 앱과 같은 생명주기를 갖거나 Next.js 앱으로 커질 가능성이 크다면 Vercel이 더 설득력 있습니다.

광고형 블로그는 어느 시점에 옮겨야 하나?

방문자 수보다 전송량을 봐야 합니다. 이미지가 많은 글이 많아져서 월 100GB 근처로 가거나, GitHub Pages의 soft limit를 안정적으로 넘는 흐름이 보이면 Cloudflare Pages를 검토하는 편이 좋습니다. 이때는 sitemap, canonical, URL 구조를 유지한 채 DNS와 배포 플랫폼만 바꾸는 계획이 중요합니다.

참고 자료

이어서 읽기

GitHub Pages로 시작할 때 확인해야 할 SEO 기준은 GitHub Pages 블로그 SEO: 검색 노출에 불리할까?에서 다룹니다. 프레임워크 선택 관점은 Astro vs Next.js: 기술 블로그에 Next.js를 쓰지 않은 이유를 보면 이어집니다.