배포 자동화 — Vercel + GitHub 원클릭 배포

@JavaPark · April 04, 2026 · 18 min read

안녕하세요, 자바파커입니다.

지난 포스팅에서 Next.js와 Supabase로 풀스택 서비스를 개발했습니다. 이제 만든 서비스를 세상에 내놓을 차례입니다. 하지만 배포라는 단어만 들어도 머리가 아프신 분들이 많을 겁니다. 서버 세팅, SSL 인증서, CI/CD 파이프라인 구성... 과거에는 이 모든 것을 직접 해야 했습니다.

2026년 현재, Vercel을 사용하면 git push 한 번으로 배포가 끝납니다. 이번 포스팅에서는 Vercel과 GitHub를 연동해서 완전 자동 배포 환경을 구축하는 방법을 단계별로 알려드리겠습니다.

왜 Vercel인가?

1인 개발자에게 Vercel이 최적인 이유는 명확합니다.

  • Next.js 최적화: Vercel은 Next.js를 만든 회사입니다. App Router, Server Components, Edge Runtime 등 Next.js의 모든 기능을 가장 먼저, 가장 잘 지원합니다.
  • 무료 티어가 넉넉합니다: Hobby 플랜으로 월 100GB 대역폭, 무제한 배포, 커스텀 도메인까지 무료로 사용할 수 있습니다.
  • 자동 배포: GitHub에 push하면 자동으로 빌드하고 배포합니다. CI/CD 파이프라인을 따로 구성할 필요가 없습니다.
  • 프리뷰 배포: PR을 올리면 자동으로 프리뷰 URL이 생성됩니다. 코드 리뷰 없이도 변경 사항을 눈으로 확인할 수 있습니다.
  • 글로벌 Edge Network: 전 세계 어디서든 빠르게 접속할 수 있습니다.

Vercel vs Netlify vs GitHub Pages 비교

배포 플랫폼을 고민하시는 분들을 위해 비교표를 준비했습니다.

항목 Vercel Netlify GitHub Pages
Next.js 지원 완벽 (공식) 좋음 (플러그인) 정적만 가능
서버리스 함수 지원 (Edge/Node) 지원 (Node) 미지원
무료 대역폭 100GB/월 100GB/월 100GB/월
빌드 시간 6,000분/월 300분/월 2,000분/월
프리뷰 배포 자동 자동 미지원
커스텀 도메인 무료 무료 무료
SSL 자동 자동 자동
Edge Functions 지원 지원 미지원
분석 도구 내장 유료 애드온 미지원

결론: Next.js 프로젝트라면 Vercel이 압도적으로 유리합니다. Netlify도 훌륭하지만, Next.js의 최신 기능을 100% 활용하려면 Vercel이 최선입니다. GitHub Pages는 정적 사이트 전용이므로 풀스택 프로젝트에는 적합하지 않습니다.

Vercel 계정 생성 및 GitHub 연동

1단계: Vercel 가입

vercel.com에 접속해서 Sign Up 버튼을 클릭합니다. GitHub 계정으로 가입하는 것을 추천합니다. 연동이 자동으로 이루어지기 때문입니다.

1. vercel.com 접속
2. "Sign Up" 클릭
3. "Continue with GitHub" 선택
4. GitHub 권한 허용
5. Hobby (무료) 플랜 선택

2단계: GitHub 저장소 권한 설정

가입 후 Vercel이 GitHub 저장소에 접근할 수 있도록 권한을 설정합니다.

GitHub Settings → Applications → Vercel
→ "Repository access" 에서 배포할 저장소 선택
→ 전체 저장소를 허용하거나, 특정 저장소만 선택 가능

보안을 위해 특정 저장소만 선택하는 것을 추천합니다. 필요할 때 저장소를 추가하면 됩니다.

프로젝트 Import -- 첫 배포

3단계: 프로젝트 가져오기

Vercel 대시보드에서 "Add New Project" 를 클릭하고 GitHub 저장소를 선택합니다.

1. Vercel 대시보드 → "Add New Project"
2. "Import Git Repository" 에서 저장소 선택
3. Framework Preset: Next.js (자동 감지됨)
4. Root Directory: ./ (기본값)
5. "Deploy" 클릭

Vercel은 package.json을 분석해서 프레임워크를 자동으로 감지합니다. Next.js 프로젝트라면 별도 설정 없이 바로 배포가 시작됩니다.

4단계: 빌드 설정 확인

대부분의 경우 기본 설정으로 충분하지만, 필요하다면 빌드 설정을 커스터마이징할 수 있습니다.

// vercel.json (프로젝트 루트에 생성)
{
  "buildCommand": "next build",
  "outputDirectory": ".next",
  "installCommand": "npm install",
  "framework": "nextjs"
}

첫 배포가 완료되면 https://프로젝트명.vercel.app 형태의 URL이 자동으로 생성됩니다. 이 URL로 바로 접속해서 서비스를 확인할 수 있습니다.

환경변수 설정

서비스가 정상 작동하려면 Supabase URL, API Key 등의 환경변수가 필요합니다. 로컬에서 .env.local 파일에 넣었던 값들을 Vercel에도 설정해야 합니다.

Vercel 대시보드에서 설정

1. Vercel 대시보드 → 프로젝트 선택
2. Settings → Environment Variables
3. 환경변수 추가

아래 환경변수들을 추가합니다.

# Supabase 연동
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...

# OpenAI API (서버 사이드 전용)
OPENAI_API_KEY=sk-...

# 기타 설정
NEXT_PUBLIC_APP_URL=https://yourdomain.com

환경변수 스코프 설정

Vercel은 환경변수를 환경별로 분리할 수 있습니다.

환경 용도 예시
Production 실제 서비스 실제 Supabase 프로젝트
Preview PR 프리뷰 테스트용 Supabase 프로젝트
Development 로컬 개발 로컬 환경변수
Environment Variables 설정 화면에서:
→ 각 변수마다 Production / Preview / Development 체크박스로 스코프 지정
→ OPENAI_API_KEY 같은 민감한 키는 "Sensitive" 옵션 활성화

주의사항: NEXT_PUBLIC_ 접두사가 붙은 변수는 클라이언트에 노출됩니다. API 시크릿 키에는 절대 NEXT_PUBLIC_을 붙이지 마세요.

Vercel CLI로 환경변수 관리

터미널에서도 환경변수를 관리할 수 있습니다.

# Vercel CLI 설치
npm i -g vercel

# 로그인
vercel login

# 환경변수 추가
vercel env add OPENAI_API_KEY production
# 프롬프트에서 값 입력

# 환경변수 목록 확인
vercel env ls

# 환경변수를 로컬 .env.local로 가져오기
vercel env pull .env.local

vercel env pull 명령은 팀원과 환경변수를 공유할 때 매우 유용합니다. .env.local 파일을 직접 주고받을 필요 없이, Vercel에서 바로 가져올 수 있습니다.

커스텀 도메인 연결

프로젝트명.vercel.app 도 좋지만, 자신만의 도메인으로 서비스하면 훨씬 전문적으로 보입니다.

도메인 구매

도메인은 다양한 곳에서 구매할 수 있습니다.

  • Vercel Domains: Vercel 대시보드에서 바로 구매 가능
  • Namecheap: 저렴한 가격
  • Cloudflare: DNS와 함께 관리 편리
  • 가비아: 한국 도메인(.kr) 등록 시

DNS 설정

도메인을 구매했다면 DNS 레코드를 설정합니다.

1. Vercel 대시보드 → 프로젝트 → Settings → Domains
2. 도메인 입력 (예: myapp.com)
3. "Add" 클릭
4. Vercel이 안내하는 DNS 레코드를 도메인 관리 사이트에 추가

일반적으로 아래 두 가지 레코드를 추가하면 됩니다.

# A 레코드 (루트 도메인)
Type: A
Name: @
Value: 76.76.21.21

# CNAME 레코드 (www 서브도메인)
Type: CNAME
Name: www
Value: cname.vercel-dns.com

SSL 인증서 -- 자동 발급

Vercel은 도메인을 연결하면 Let's Encrypt SSL 인증서를 자동으로 발급합니다. 별도의 설정이 필요 없습니다. 인증서 갱신도 자동으로 처리됩니다.

도메인 연결 후 약 1~5분 내에:
→ SSL 인증서 자동 발급
→ HTTP → HTTPS 자동 리다이렉트 설정
→ www → non-www (또는 반대) 자동 리다이렉트

프리뷰 배포 -- PR마다 자동 미리보기 URL

프리뷰 배포는 Vercel의 가장 강력한 기능 중 하나입니다. Pull Request를 올리면 자동으로 해당 변경 사항이 적용된 별도의 URL이 생성됩니다.

작동 방식

1. 새 브랜치 생성: git checkout -b feature/new-ui
2. 코드 수정 후 push: git push origin feature/new-ui
3. GitHub에서 PR 생성
4. Vercel이 자동으로 프리뷰 빌드 시작
5. PR 코멘트에 프리뷰 URL 자동 게시
   → https://프로젝트-git-feature-new-ui-username.vercel.app

프리뷰 배포 활용법

# 기능 브랜치 생성
git checkout -b feature/dark-mode

# 코드 수정
# ...

# 커밋 및 푸시
git add .
git commit -m "feat: 다크모드 추가"
git push origin feature/dark-mode

# GitHub에서 PR 생성 후 Vercel 프리뷰 URL로 확인
# → 모바일에서도 접속해서 테스트 가능
# → 팀원이나 지인에게 URL 공유해서 피드백 받기

1인 개발자라도 프리뷰 배포를 적극 활용하세요. 프로덕션에 바로 머지하기 전에 실제 환경에서 테스트할 수 있어서 실수를 크게 줄일 수 있습니다.

프리뷰 배포 환경변수 분리

프리뷰 배포에서는 테스트용 환경변수를 사용하는 것이 안전합니다.

Vercel 대시보드 → Settings → Environment Variables
→ NEXT_PUBLIC_SUPABASE_URL 변수를 Preview 환경에만 따로 설정
→ 테스트용 Supabase 프로젝트 URL 입력

이렇게 하면 프리뷰 배포에서 실수로 프로덕션 데이터를 건드리는 일을 방지할 수 있습니다.

배포 최적화

빌드 캐시 활용

Vercel은 빌드 캐시를 자동으로 관리합니다. 하지만 next.config.js에서 추가 최적화가 가능합니다.

// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  // 이미지 최적화
  images: {
    formats: ['image/avif', 'image/webp'],
    remotePatterns: [
      {
        protocol: 'https',
        hostname: '*.supabase.co',
      },
    ],
  },

  // 헤더 설정 (캐시 최적화)
  async headers() {
    return [
      {
        source: '/api/:path*',
        headers: [
          { key: 'Cache-Control', value: 's-maxage=60, stale-while-revalidate=300' },
        ],
      },
      {
        source: '/:path*.(jpg|jpeg|png|gif|ico|svg)',
        headers: [
          { key: 'Cache-Control', value: 'public, max-age=31536000, immutable' },
        ],
      },
    ];
  },
};

module.exports = nextConfig;

Edge Functions 활용

API 응답 속도를 높이고 싶다면 Edge Functions를 활용합니다. Edge Functions는 사용자와 가장 가까운 서버에서 실행되므로 지연 시간이 크게 줄어듭니다.

// app/api/hello/route.ts
export const runtime = 'edge'; // Edge Runtime 사용

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);
  const name = searchParams.get('name') || 'World';

  return new Response(
    JSON.stringify({ message: `Hello, ${name}!` }),
    {
      headers: { 'Content-Type': 'application/json' },
    }
  );
}
// app/api/og/route.tsx
// OG 이미지 동적 생성 (Edge에서 실행)
import { ImageResponse } from 'next/og';

export const runtime = 'edge';

export async function GET(request: Request) {
  const { searchParams } = new URL(request.url);
  const title = searchParams.get('title') || '기본 제목';

  return new ImageResponse(
    (
      <div style={{
        display: 'flex',
        fontSize: 48,
        background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
        color: 'white',
        width: '100%',
        height: '100%',
        alignItems: 'center',
        justifyContent: 'center',
        padding: 48,
      }}>
        {title}
      </div>
    ),
    { width: 1200, height: 630 }
  );
}

빌드 시간 단축 팁

// package.json
{
  "scripts": {
    "build": "next build",
    "vercel-build": "next build"
  }
}
// next.config.js에 추가
const nextConfig = {
  // 빌드 시 불필요한 페이지 제외 (개발용 페이지 등)
  experimental: {
    // 병렬 빌드 최적화
    workerThreads: true,
    cpus: 4,
  },
};

롤백 -- 문제 발생 시 이전 버전 복원

배포 후 문제가 발생했을 때 빠르게 이전 버전으로 되돌리는 것은 매우 중요합니다. Vercel은 이 과정을 매우 간단하게 만들어 줍니다.

대시보드에서 롤백

1. Vercel 대시보드 → 프로젝트 → Deployments 탭
2. 정상 작동하던 이전 배포를 찾기
3. 해당 배포의 "..." 메뉴 클릭
4. "Promote to Production" 선택
5. 즉시 이전 버전으로 복원 완료

CLI로 롤백

# 배포 목록 확인
vercel ls

# 특정 배포를 프로덕션으로 승격
vercel promote [deployment-url]

# 예시
vercel promote myapp-abc123.vercel.app

롤백 전략

1인 개발자에게 추천하는 롤백 전략입니다.

1. 배포 전: 현재 프로덕션 URL 메모
2. 배포 후: 핵심 기능 5분 내 수동 테스트
3. 문제 발견: 즉시 이전 버전으로 롤백
4. 원인 분석: 로컬에서 디버깅 후 수정 배포

자동 배포 워크플로 전체 요약

최종적으로 완성된 배포 워크플로를 정리합니다.

[코드 수정] → [git push] → [Vercel 자동 빌드]
                                    ↓
                            [빌드 성공?]
                           /            \
                        Yes              No
                         ↓                ↓
                  [자동 배포]      [빌드 로그 확인]
                       ↓                  ↓
              [헬스 체크 통과?]    [코드 수정 후 재push]
                     ↓
            [프로덕션 반영 완료]
단계 작업 소요 시간
push git push origin main 즉시
빌드 Next.js 빌드 + 최적화 1~3분
배포 Edge Network 배포 30초
SSL 인증서 확인 자동
완료 프로덕션 반영 총 2~4분

자주 묻는 질문 (FAQ)

Q1. Vercel 무료 플랜으로 실제 서비스 운영이 가능한가요?

네, 가능합니다. Vercel Hobby 플랜은 월 100GB 대역폭, 무제한 배포를 제공합니다. 일일 방문자가 수천 명 수준이라면 무료 플랜으로 충분합니다. 다만, 상업적 용도(팀 프로젝트, 유료 서비스)라면 Pro 플랜을 권장합니다. Hobby 플랜은 비상업적/개인 프로젝트 용도입니다.

Q2. 환경변수를 변경하면 자동으로 재배포되나요?

아닙니다. 환경변수를 변경한 후에는 수동으로 재배포해야 합니다. Vercel 대시보드에서 Deployments 탭의 최신 배포에서 "Redeploy" 를 클릭하거나, 빈 커밋을 push하면 됩니다.

# 빈 커밋으로 재배포 트리거
git commit --allow-empty -m "chore: trigger redeploy"
git push origin main

Q3. 빌드가 실패했을 때 어떻게 디버깅하나요?

Vercel 대시보드에서 실패한 배포를 클릭하면 전체 빌드 로그를 확인할 수 있습니다. 가장 흔한 빌드 실패 원인은 다음과 같습니다.

  1. 환경변수 미설정: 로컬에서는 .env.local에 있지만 Vercel에 등록하지 않은 경우
  2. 타입 에러: 로컬에서는 무시했지만 next build 시 에러가 발생하는 경우
  3. 의존성 문제: package-lock.json이 커밋되지 않은 경우

로컬에서 next build를 먼저 실행해서 빌드 에러를 확인하는 습관을 들이세요.


다음 포스팅에서는 서비스를 출시한 후 반드시 해야 할 운영과 모니터링 에 대해 다룹니다. 에러 트래킹, 사용자 분석, 비용 관리까지 -- 1인 개발자가 서비스를 안정적으로 운영하는 방법을 알려드리겠습니다.

@JavaPark
AI 시대의 개발자 도구, 실전 경험을 공유합니다