GitHub Pages vs Vercel vs Netlify 무료 호스팅 실전 비교 정적 사이트 배포 가이드

정적 사이트를 배포하려고 GitHub Pages에 푸시했는데 폼 기능이 필요해서 Netlify로 옮기고, Next.js 프로젝트는 Vercel로 다시 마이그레이션한 경험이 있습니까? 플랫폼마다 강점이 다르기 때문에 프로젝트 특성에 맞는 선택이 중요합니다. 이 글에서는 GitHub Pages, Vercel, Netlify를 중심으로 무료 호스팅 서비스의 실전 비교와 배포 시 주의사항을 정리합니다.


GitHub Pages vs Vercel vs Netlify 무료 호스팅 실전 비교 정적 사이트 배포 가이드




1. 플랫폼별 핵심 특징 및 적합한 사용 사례

정적 사이트 호스팅 플랫폼은 지원하는 기능과 최적화 대상에 따라 명확히 구분됩니다. 아래는 각 플랫폼의 핵심 특징입니다.

GitHub Pages

  • 최적 사용 사례: 포트폴리오, 기술 문서, 개인 블로그 등 순수 정적 사이트
  • 배포 방식: Git 푸시 시 자동 배포 (gh-pages 브랜치 또는 main 브랜치 설정)
  • 커스텀 도메인: 무료 제공 (CNAME 파일 설정 필요)
  • 제약사항: 서버 사이드 로직 불가, 빌드 자동화 제한적 (Jekyll 기본 지원)
  • 주의사항: SPA(Single Page Application) 배포 시 404 에러 발생 가능. 404.html을 index.html과 동일하게 설정하거나, Hash Router 사용 권장

Netlify

  • 최적 사용 사례: React/Vue 등 SPA, JAMstack 아키텍처, 폼 기능이 필요한 정적 사이트
  • 배포 방식: Git 연동 자동 배포 또는 Drag & Drop
  • 핵심 기능: 빌드 자동화, 무료 SSL, 폼 처리, 서버리스 함수(Functions), CDN
  • 필수 설정: netlify.toml 파일로 빌드 명령 정의, _redirects 파일로 SPA 라우팅 처리

_redirects 파일 예시 (SPA 필수):

/*    /index.html   200

netlify.toml 예시:

[build]
  command = "npm run build"
  publish = "build"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Vercel

  • 최적 사용 사례: Next.js, React, SvelteKit 등 모던 프레임워크 기반 프로젝트
  • 배포 방식: Git 연동 자동 배포, 실시간 프리뷰 URL 제공
  • 핵심 강점: Next.js 최적화 (ISR, SSR 지원), Edge Functions, 빠른 CDN
  • 제약사항: 무료 플랜은 빌드 시간 제한 (월 100GB 대역폭)
  • 주의사항: 환경 변수는 Vercel 대시보드에서 설정해야 하며, .env 파일은 빌드 시 자동 인식되지 않음

2. 실전 배포 프로세스 및 트러블슈팅

React 기반 SPA를 배포할 때 공통적으로 겪는 문제와 해결책을 정리합니다.

빌드 및 로컬 테스트

  1. 프로덕션 빌드 생성: npm run build 실행 후 "The build folder is ready to be deployed." 메시지 확인
  2. 로컬 서빙 테스트: npx serve -s build -l 4173로 빌드 결과물 확인 (전역 설치 대신 npx 사용 권장)
  3. Prerender 설정 (선택): SEO 개선이 필요하면 react-snap 사용

package.json 스크립트 예시:

"scripts": {
  "build": "react-scripts build",
  "preview:static": "npx serve -s build -l 4173",
  "postbuild": "concurrently -k \"npm:preview:static\" \"sleep 2 && npx react-snap\""
},
"reactSnap": {
  "crawl": true,
  "inlineCss": true,
  "saveAs": "html",
  "include": ["/", "/about", "/products"]
}

핵심 포인트: react-snap 같은 프리렌더 도구는 빌드 결과물을 서빙하는 임시 서버가 필요합니다. concurrently의 -k 옵션으로 자식 프로세스 중단 시 전체 프로세스를 안전하게 종료할 수 있습니다.

SPA 라우팅 문제 해결

SPA는 클라이언트 사이드 라우팅을 사용하기 때문에, 서버에서 모든 경로를 index.html로 리다이렉트하도록 설정해야 합니다.

  • Netlify: _redirects 파일 또는 netlify.toml에 리다이렉트 규칙 추가
  • Vercel: vercel.json에 rewrites 설정 (Next.js는 자동 처리)
  • GitHub Pages: 404.html을 index.html과 동일하게 복사하거나 HashRouter 사용

vercel.json 예시:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/index.html" }
  ]
}

3. 플랫폼 선택 기준 및 확장 옵션

프로젝트 요구사항에 따라 최적 플랫폼을 선택하는 기준을 정리합니다.

정적 사이트만 필요한 경우

  • GitHub Pages: 포트폴리오, 문서 사이트 (무료, 안정적, Git 기반 워크플로우)
  • Cloudflare Pages: 글로벌 CDN + 빠른 배포 속도, 일부 Functions 지원
  • Surge: CLI 한 줄로 배포 (surge ./build), 프로토타입 테스트에 적합

SPA/React/Next.js 프로젝트

  • Netlify: 폼 기능, 서버리스 함수, A/B 테스트 필요 시
  • Vercel: Next.js 최적화, 실시간 프리뷰, Edge Functions 필요 시
  • Firebase Hosting: Firebase Auth, Firestore 연동 필요 시 (학습 곡선 있음)

백엔드/API/DB가 필요한 경우

  • Render: 정적 + Node.js/Python 백엔드 + PostgreSQL 무료 제공 (콜드 스타트 있음)
  • Replit: 웹 IDE에서 개발 및 배포 (Flask/Express 등), 학습용 적합
  • Firebase: 호스팅 + Cloud Functions + Firestore 올인원 솔루션

WordPress 또는 PHP 기반 사이트

  • 000WebHost: cPanel, FTP, MySQL 제공 (간혹 속도 저하 및 광고 표시 가능성)
  • InfinityFree: 무료 SSL, 무제한 스토리지 주장 (백엔드 트래픽 제약 주의, inode 제한 있음)

주의사항: 000WebHost와 InfinityFree는 무료 플랜 특성상 속도 제한, 광고 삽입, 트래픽 제약이 있습니다. 프로덕션 환경보다는 학습 또는 프로토타입 용도로 권장합니다.

4. 배포 최적화 및 실무 팁

배포 전 반드시 확인해야 할 최적화 항목과 실무 팁입니다.

빌드 최적화

  • 이미지 최적화: WebP 포맷 사용, lazy loading 적용, CDN 활용
  • 번들 크기 분석: npm run build 후 source-map-explorer 또는 webpack-bundle-analyzer로 분석
  • 코드 스플리팅: React.lazy()와 Suspense로 초기 로딩 속도 개선

SEO 및 메타 태그

  • index.html의 title, meta description, og:image 태그 설정
  • react-helmet 또는 Next.js Head 컴포넌트로 동적 메타 태그 관리
  • Prerender 또는 SSR로 검색 엔진 크롤링 개선

Netlify 폼 기능 활용

Netlify는 HTML 폼에 data-netlify="true" 속성만 추가하면 백엔드 없이 폼 제출을 처리합니다.

<form name="contact" method="POST" data-netlify="true">
  <input type="text" name="name" required />
  <input type="email" name="email" required />
  <textarea name="message"></textarea>
  <button type="submit">전송</button>
</form>

주의: React에서 사용 시 숨겨진 input 필드(<input type="hidden" name="form-name" value="contact" />)를 추가해야 정상 작동합니다.

환경 변수 관리

  • Netlify: Site settings → Build & deploy → Environment variables
  • Vercel: Project Settings → Environment Variables (프로덕션/프리뷰/개발 환경 분리 가능)
  • GitHub Pages: 환경 변수 지원 안 함 (빌드 시점에 .env 값을 번들에 포함해야 함)

보안 팁: API 키는 절대 클라이언트 번들에 포함하지 마십시오. 서버리스 함수(Netlify Functions, Vercel Serverless Functions)를 프록시로 사용하여 백엔드에서 API 호출을 처리하는 것을 권장합니다.

결론

정적 포트폴리오는 GitHub Pages, 폼이나 CI/CD가 필요하면 Netlify, Next.js 프로젝트는 Vercel을 선택하십시오. SPA 배포 시 반드시 라우팅 리다이렉트 설정을 확인하고, 빌드 최적화와 환경 변수 관리를 철저히 해야 배포 후 트러블슈팅 시간을 줄일 수 있습니다. 지금 당장 실행할 Action Item: 프로젝트에 _redirects 또는 vercel.json 파일을 추가하고, npm run buildnpx serve -s build로 로컬 테스트를 완료한 뒤 배포하십시오.


#함께 읽으면 좋은 글

GitHub Copilot vs ChatGPT Plus 코딩 보조 AI 실사용 비교 분석 : 바로보기

댓글