🚀 첫 웹사이트 배포하기
📖 정의
**웹사이트 배포(Deployment)**는 로컬 컴퓨터에서 개발한 웹사이트를 인터넷에 공개하여 누구나 접속할 수 있게 만드는 과정입니다. Vercel과 Netlify는 무료로 정적 웹사이트와 프론트엔드 애플리케이션을 배포할 수 있는 플랫폼으로, GitHub과 연동하면 코드를 푸시할 때마다 자동으로 배포됩니다.
🎯 비유로 이해하기
책 출판하기
웹사이트 배포를 책 출판에 비유하면:
로컬 개발 = 원고 작성
├─ 컴퓨터에서만 볼 수 있음
└─ 수정과 실험 자유롭게
GitHub = 출판사에 원고 제출
├─ 버전 관리 (초고, 2차 수정...)
└─ 협업자와 공유
배포 플랫폼 = 인쇄 및 배포
├─ Vercel/Netlify = 출판사
├─ 도메인 = 책 제목과 ISBN
└─ 누구나 접근 가능
자동 배포 = 자동 재인쇄
└─ 원고 수정하면 자동으로 새 판 출간
상점 오픈
개발 환경 (localhost:3000)
└─ 집에서 만든 시제품
배포 환경 (yoursite.com)
└─ 거리에 오픈한 실제 상점
누구나 방문 가능!
24시간 365일 운영!
전 세계 어디서든 접속!
⚙️ 작동 원리
1. 배포 프로세스
1. 코드 작성 (로컬)
└─ HTML, CSS, JavaScript 개발
2. Git 커밋
└─ 변경사항 저장
3. GitHub 푸시
└─ 원격 저장소에 업로드
4. 자동 배포 트리거
├─ Vercel/Netlify가 푸시 감지
├─ 코드 다운로드
├─ 빌드 실행 (필요시)
└─ 서버에 배포
5. 배포 완료
└─ URL로 접속 가능!
2. Vercel vs Netlify
Vercel
├─ Next.js 최적화
├─ 서버리스 함수 지원
├─ Edge Network (빠른 속도)
├─ 자동 HTTPS
└─ GitHub 자동 배포
Netlify
├─ 모든 프레임워크 지원
├─ Form 처리 내장
├─ Identity (인증) 기능
├─ 자동 HTTPS
└─ GitHub 자동 배포
공통점: 무료, 쉬움, 빠름!
💡 실제 예시
준비물 확인
# 1. Node.js 설치 확인
node --version
# v18.0.0 이상 권장
# 2. Git 설치 확인
git --version
# 2.0 이상
# 3. GitHub 계정 생성
# https://github.com 에서 무료 가입
# 4. 텍스트 에디터
# VS Code 추천 (https://code.visualstudio.com/)
방법 1: 정적 HTML 사이트 배포 (가장 간단)
Step 1: 프로젝트 생성
# 1. 프로젝트 폴더 생성
mkdir my-first-website
cd my-first-website
# 2. HTML 파일 생성
cat > index.html << 'EOF'
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>내 첫 웹사이트</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.container {
background: white;
padding: 60px 40px;
border-radius: 20px;
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
text-align: center;
max-width: 500px;
}
h1 {
color: #667eea;
font-size: 2.5em;
margin-bottom: 20px;
}
p {
color: #555;
font-size: 1.2em;
margin-bottom: 30px;
line-height: 1.6;
}
.button {
background: #667eea;
color: white;
padding: 15px 40px;
border: none;
border-radius: 50px;
font-size: 1.1em;
cursor: pointer;
transition: transform 0.2s;
}
.button:hover {
transform: scale(1.05);
background: #764ba2;
}
.counter {
font-size: 3em;
color: #667eea;
font-weight: bold;
margin: 20px 0;
}
</style>
</head>
<body>
<div class="container">
<h1>🎉 환영합니다!</h1>
<p>이것은 제가 배포한 첫 번째 웹사이트입니다.</p>
<div class="counter" id="counter">0</div>
<button class="button" onclick="incrementCounter()">
클릭해보세요!
</button>
<p style="margin-top: 30px; font-size: 0.9em; color: #999;">
Vercel/Netlify로 배포됨
</p>
</div>
<script>
let count = 0;
function incrementCounter() {
count++;
document.getElementById('counter').textContent = count;
// 애니메이션 효과
const counter = document.getElementById('counter');
counter.style.transform = 'scale(1.2)';
setTimeout(() => {
counter.style.transform = 'scale(1)';
}, 200);
}
// 부드러운 전환을 위한 CSS
document.getElementById('counter').style.transition = 'transform 0.2s';
</script>
</body>
</html>
EOF
# 3. 로컬에서 테스트
# VS Code에서 Live Server 확장 설치 후 실행
# 또는 Python으로 간단한 서버 실행
python3 -m http.server 8000
# 브라우저에서 http://localhost:8000 접속
Step 2: GitHub에 업로드
# 1. Git 저장소 초기화
git init
# 2. .gitignore 생성 (선택사항)
cat > .gitignore << EOF
.DS_Store
Thumbs.db
node_modules/
.env
EOF
# 3. 파일 추가 및 커밋
git add .
git commit -m "첫 커밋: 웹사이트 초기 버전"
# 4. GitHub에서 새 저장소 생성
# https://github.com/new 에서 저장소 생성
# 저장소 이름: my-first-website
# Public으로 설정
# README, .gitignore 추가하지 않음
# 5. 원격 저장소 연결 (GitHub에서 제공하는 명령어 사용)
git remote add origin https://github.com/YOUR_USERNAME/my-first-website.git
git branch -M main
git push -u origin main
# 성공! GitHub에서 코드 확인 가능
Step 3: Vercel로 배포
# 방법 A: Vercel CLI 사용
# 1. Vercel CLI 설치
npm install -g vercel
# 2. 로그인
vercel login
# 이메일로 인증 링크 전송됨
# 3. 배포
vercel
# 프롬프트 답변:
# Set up and deploy? [Y/n] y
# Which scope? (본인 계정 선택)
# Link to existing project? [y/N] N
# What's your project's name? my-first-website
# In which directory is your code located? ./
# Want to override the settings? [y/N] N
# 🎉 배포 완료!
# Preview: https://my-first-website-xxx.vercel.app
# 4. 프로덕션 배포
vercel --prod
# 최종 URL: https://my-first-website.vercel.app
# 방법 B: Vercel 웹사이트 사용 (더 쉬움!)
# 1. https://vercel.com 접속
# 2. GitHub로 로그인
# 3. "Add New Project" 클릭
# 4. GitHub 저장소 import
# └─ my-first-website 선택
# 5. 설정 확인
# Framework Preset: Other (정적 HTML)
# Build Command: (비워둠)
# Output Directory: .
# 6. "Deploy" 클릭
#
# ⏱️ 30초 후 배포 완료!
# 🌐 URL: https://my-first-website-xxx.vercel.app
#
# ✨ 이제부터 GitHub에 푸시하면 자동 배포!
Step 4: Netlify로 배포
# 방법 A: Netlify CLI 사용
# 1. Netlify CLI 설치
npm install -g netlify-cli
# 2. 로그인
netlify login
# 브라우저에서 인증
# 3. 배포
netlify deploy
# 프롬프트 답변:
# Create & configure a new site? y
# Team: (본인 팀 선택)
# Site name: my-first-website
# Publish directory: .
# 🎉 Draft URL 생성 (미리보기)
# https://random-id--my-first-website.netlify.app
# 4. 프로덕션 배포
netlify deploy --prod
# 최종 URL: https://my-first-website.netlify.app
# 방법 B: Netlify 웹사이트 사용 (추천!)
# 1. https://netlify.com 접속
# 2. GitHub로 로그인
# 3. "Add new site" → "Import an existing project"
# 4. GitHub 연결 및 저장소 선택
# └─ my-first-website 선택
# 5. 빌드 설정
# Build command: (비워둠)
# Publish directory: .
# 6. "Deploy site" 클릭
#
# ⏱️ 1분 후 배포 완료!
# 🌐 URL: https://random-name.netlify.app
#
# 💡 팁: Site settings에서 도메인 이름 변경 가능
# random-name → my-first-website
방법 2: React 앱 배포
Step 1: React 프로젝트 생성
# 1. Create React App으로 프로젝트 생성
npx create-react-app my-react-app
cd my-react-app
# 2. 로컬에서 실행 테스트
npm start
# http://localhost:3000 에서 확인
# 3. 간단한 수정 (src/App.js)
cat > src/App.js << 'EOF'
import React, { useState } from 'react';
import './App.css';
function App() {
const [count, setCount] = useState(0);
const [name, setName] = useState('');
return (
<div className="App">
<header className="App-header">
<h1>🚀 내 첫 React 앱</h1>
<div style={{ margin: '30px 0' }}>
<input
type="text"
placeholder="이름을 입력하세요"
value={name}
onChange={(e) => setName(e.target.value)}
style={{
padding: '10px',
fontSize: '16px',
borderRadius: '5px',
border: '2px solid #61dafb',
marginBottom: '20px',
width: '250px'
}}
/>
{name && <p style={{ fontSize: '20px' }}>안녕하세요, {name}님! 👋</p>}
</div>
<div style={{
background: 'rgba(255,255,255,0.1)',
padding: '30px',
borderRadius: '15px',
margin: '20px 0'
}}>
<p style={{ fontSize: '48px', fontWeight: 'bold' }}>{count}</p>
<div style={{ display: 'flex', gap: '10px', marginTop: '20px' }}>
<button
onClick={() => setCount(count + 1)}
style={{
padding: '15px 30px',
fontSize: '18px',
background: '#61dafb',
color: '#282c34',
border: 'none',
borderRadius: '10px',
cursor: 'pointer',
fontWeight: 'bold'
}}
>
증가
</button>
<button
onClick={() => setCount(count - 1)}
style={{
padding: '15px 30px',
fontSize: '18px',
background: '#ff6b6b',
color: 'white',
border: 'none',
borderRadius: '10px',
cursor: 'pointer',
fontWeight: 'bold'
}}
>
감소
</button>
<button
onClick={() => setCount(0)}
style={{
padding: '15px 30px',
fontSize: '18px',
background: '#888',
color: 'white',
border: 'none',
borderRadius: '10px',
cursor: 'pointer',
fontWeight: 'bold'
}}
>
리셋
</button>
</div>
</div>
<p style={{ marginTop: '30px', opacity: 0.7 }}>
Vercel/Netlify로 배포된 React 앱
</p>
</header>
</div>
);
}
export default App;
EOF
# 4. 빌드 테스트
npm run build
# build 폴더 생성됨 (배포할 파일들)
Step 2: GitHub에 업로드
# 1. Git 저장소 초기화 (이미 되어있음)
git add .
git commit -m "React 앱 초기 버전"
# 2. GitHub 저장소 생성 및 푸시
git remote add origin https://github.com/YOUR_USERNAME/my-react-app.git
git branch -M main
git push -u origin main
Step 3: Vercel 배포 (React 최적화)
# Vercel CLI로 배포
vercel
# 자동으로 감지:
# - Framework: Create React App
# - Build Command: npm run build
# - Output Directory: build
# 🎉 자동 배포 완료!
# https://my-react-app.vercel.app
Step 4: Netlify 배포
# Netlify 웹사이트에서 배포
# 1. Import from Git
# 2. 저장소 선택
# 3. 빌드 설정 (자동 감지됨)
# Build command: npm run build
# Publish directory: build
# 4. Deploy
#
# 🎉 배포 완료!
# https://my-react-app.netlify.app
커스텀 도메인 연결
Vercel에서 도메인 연결
# 1. 도메인 구매 (권장 사이트)
# - Namecheap (https://namecheap.com)
# - GoDaddy (https://godaddy.com)
# - Gabia (국내, https://gabia.com)
# 2. Vercel 대시보드
# Project Settings → Domains → Add Domain
# 3. 도메인 입력
# 예: myawesomesite.com
# 4. DNS 설정 (도메인 제공업체에서)
# A Record:
# Type: A
# Name: @
# Value: 76.76.21.21
# CNAME Record:
# Type: CNAME
# Name: www
# Value: cname.vercel-dns.com
# 5. 검증 대기 (최대 24시간)
# ✅ SSL 자동 설정됨
# https://myawesomesite.com 으로 접속!
Netlify에서 도메인 연결
# 1. Site settings → Domain management → Add domain
# 2. 도메인 입력
# 예: myawesomesite.com
# 3. DNS 설정
# Netlify Nameservers 사용 (권장):
# dns1.p01.nsone.net
# dns2.p01.nsone.net
# dns3.p01.nsone.net
# dns4.p01.nsone.net
# 또는 기존 DNS 사용:
# A Record:
# Type: A
# Name: @
# Value: 75.2.60.5
# CNAME Record:
# Type: CNAME
# Name: www
# Value: your-site.netlify.app
# 4. HTTPS/SSL 자동 활성화
# Let's Encrypt 인증서 자동 발급
# 🎉 커스텀 도메인 완료!
환경변수 설정 (API 키 등)
Vercel 환경변수
# 방법 A: CLI
vercel env add API_KEY
# 프롬프트:
# What's the value of API_KEY? your-secret-key
# Add to which Environments? Production, Preview, Development
# 방법 B: 웹 대시보드
# Project Settings → Environment Variables
#
# Key: API_KEY
# Value: your-secret-key
# Environments: Production, Preview, Development
# React에서 사용 (.env.local)
# REACT_APP_API_KEY=your-secret-key
# 코드에서 접근
const apiKey = process.env.REACT_APP_API_KEY;
# ⚠️ 주의: .env 파일은 .gitignore에 추가!
Netlify 환경변수
# Netlify 대시보드
# Site settings → Build & deploy → Environment
# Environment variables:
# Key: REACT_APP_API_KEY
# Value: your-secret-key
# 저장 후 재배포
# Deploys → Trigger deploy → Deploy site
# React에서 사용
const apiKey = process.env.REACT_APP_API_KEY;
자동 배포 워크플로우
# 개발 → 배 포 사이클
# 1. 로컬에서 개발
# 코드 수정
# 로컬 테스트 (npm start)
# 2. 커밋 및 푸시
git add .
git commit -m "기능 추가: 다크모드"
git push origin main
# 3. 자동 배포 시작 🚀
# Vercel/Netlify가 자동으로:
# - GitHub 푸시 감지
# - 코드 다운로드
# - 의존성 설치 (npm install)
# - 빌드 실행 (npm run build)
# - 배포
# 4. 배포 완료 알림
# 이메일/Slack 알림 (설정 가능)
# GitHub 커밋에 배포 상태 표시
# 5. 실시간 확인
# https://your-site.vercel.app
# 변경사항 즉시 반영!
# 평균 배포 시간: 30초 ~ 2분
배포 상태 확인 및 롤백
# Vercel: 배포 히스토리
# 웹 대시보드
# Deployments 탭에서 모든 배포 확인
# 각 배포마다:
# ✅ Status (Success/Failed)
# ⏱️ Duration (빌드 시간)
# 🔗 Preview URL
# 📝 Commit Message
# 👤 Author
# 이전 버전으로 롤백
# 1. 원하는 배포 선택
# 2. "Promote to Production" 클릭
# 3. 즉시 이전 버전으로 복구!
# CLI로 확인
vercel ls
vercel inspect [deployment-url]
# Netlify: 배포 관리
# Deploys 탭
# - Production deploys
# - Deploy previews (PR)
# - Branch deploys
# 롤백 방법
# 1. 이전 배포 선택
# 2. "Publish deploy" 클릭
# 3. 10초 만에 롤백 완료!
# CLI
netlify deploy --prod
netlify open:site
프리뷰 배포 (Pull Request)
# 자동 프리뷰 배포 설정
# 1. 새 브랜치에서 작업
git checkout -b feature/new-design
# 2. 코드 수정 및 푸시
git add .
git commit -m "새 디자인 적용"
git push origin feature/new-design
# 3. GitHub에서 Pull Request 생성
# 4. 자동으로 프리뷰 배포 생성! 🎉
# Vercel: https://my-site-git-feature-new-design.vercel.app
# Netlify: https://deploy-preview-123--my-site.netlify.app
# 5. PR 코멘트에 프리뷰 URL 자동 추가
# 팀원들이 실제 작동하는 사이트 확인 가능!
# 6. PR 머지하면
# - 프리뷰 삭제
# - Production 자동 배포
성능 최적화 및 모니터링
# Vercel Analytics 설정
# 1. package.json에 추가
npm install @vercel/analytics
# 2. _app.js 또는 index.js에 추가
import { Analytics } from '@vercel/analytics/react';
function MyApp({ Component, pageProps }) {
return (
<>
<Component {...pageProps} />
<Analytics />
</>
);
}
# 3. Vercel 대시보드에서 확인
# Analytics 탭
# - 페이지 뷰
# - 방문자 수
# - 성능 점수
# - Web Vitals (LCP, FID, CLS)
# 무료: 월 10만 이벤트
# Netlify Analytics
# Site settings → Analytics → Enable
# 제공 정보:
# - 페이지 뷰
# - 고유 방문자
# - 상위 페이지
# - 리퍼러
# - 대역폭 사용량
# 💰 유료 ($9/월)
# 하지만 Google Analytics 무료 대안 사용 가능
🤔 자주 묻는 질문
Q1. Vercel과 Netlify 중 어느 것을 선택해야 하나요?
A:
# Vercel을 선택하는 경우:
✅ Next.js 프로젝트
✅ Vercel의 Edge Network 활용
✅ 서버리스 함수 많이 사용
✅ React 중심 프로젝트
예시 프로젝트:
- Next.js 블로그
- React 포트폴리오
- SaaS 랜딩 페이지
# Netlify를 선택하는 경우:
✅ 정적 사이트 (HTML/CSS)
✅ 다양한 프레임워크 (Vue, Svelte...)
✅ Form 처리 필요
✅ Identity/인증 기능 필요
✅ CMS 연동 (Netlify CMS)
예시 프로젝트:
- Gatsby 블로그
- Vue.js 앱
- 정적 포트폴리오
- 문서 사이트
# 공통점:
✅ 무료 플랜 충분
✅ 자동 HTTPS
✅ 글로벌 CDN
✅ GitHub 자동 배포
✅ 커스텀 도메인
💡 팁: 둘 다 써보고 결정하세요!
프로젝트마다 다르게 사용해도 OK
Q2. 배포가 실패하면 어떻게 해결하나요?
A:
# 일반적인 배포 실패 원인과 해결법
# 1. 빌드 에러
❌ Error: Build failed
✅ 해결: 로컬에서 빌드 테스트
npm run build
# 에러 메시지 확인 및 수정
# 2. 의존성 문제
❌ Error: Cannot find module 'react'
✅ 해결: package.json 확인
npm install
# package-lock.json도 커밋하기
git add package-lock.json
git commit -m "Fix dependencies"
# 3. 환경변수 누락
❌ Error: API_KEY is not defined
✅ 해결: 플랫폼에 환경변수 추가
# Vercel/Netlify 대시보드에서 설정
# 4. Node 버전 불일치
❌ Error: Node version not supported
✅ 해결: package.json에 engines 명시
{
"engines": {
"node": "18.x"
}
}
# 5. 빌드 시간 초과
❌ Error: Build timeout
✅ 해결:
# - 불필요한 의존성 제거
# - 빌드 최적화
# - 유료 플랜 고려 (빌드 시간 제한 증가)
# 디버깅 팁:
# 1. 배포 로그 자세히 읽기
# 2. 로컬과 동일한 환경 만들기
# 3. 단계별로 커밋하며 테스트
# 4. GitHub Actions로 CI 설정