- 공유 링크 만들기
- X
- 이메일
- 기타 앱
정적 사이트를 배포하려고 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를 배포할 때 공통적으로 겪는 문제와 해결책을 정리합니다.
빌드 및 로컬 테스트
- 프로덕션 빌드 생성:
npm run build실행 후 "The build folder is ready to be deployed." 메시지 확인 - 로컬 서빙 테스트:
npx serve -s build -l 4173로 빌드 결과물 확인 (전역 설치 대신 npx 사용 권장) - 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 build 후 npx serve -s build로 로컬 테스트를 완료한 뒤 배포하십시오.
#함께 읽으면 좋은 글
GitHub Copilot vs ChatGPT Plus 코딩 보조 AI 실사용 비교 분석 : 바로보기
댓글
댓글 쓰기