Next.js를 Vercel에 처음 배포할 때 환경변수와 Production URL은 어떻게 연결하나요?
Vercel 첫 배포는 저장소를 연결한 뒤 설치·빌드 명령과 환경변수를 맞추고 공개 URL에서 결과를 확인하는 작업입니다. 로컬 빌드부터 통과시키고 Preview와 Production의 설정을 나누세요.
적용 조건·범위: 환경변수를 추가하거나 수정한 뒤 이미 만들어진 deployment가 자동으로 과거 값을 다시 읽는다고 가정하지 않습니다. 새 설정이 반영된 deployment에서 다시 확인합니다.
본문 근거: vercel.com/docs/deployments · vercel.com/docs/environment-variables · vercel.com/docs/projects/domains
배포 전 로컬 확인
클라우드 배포 전에 로컬에서 설치와 build를 먼저 확인합니다.
npm ci
npm run build
이 단계에서 실패한다면 Vercel 설정을 먼저 바꾸기보다 로컬 오류를 해결하는 편이 좋습니다.
배포 플랫폼은 애플리케이션 코드 오류를 자동으로 고쳐 주지 않습니다.
Vercel 프로젝트 연결
일반적인 흐름은 다음과 같습니다.
GitHub repository
↓
Vercel project import
↓
Framework 감지
↓
Install
↓
Build
↓
Deployment 생성
프로젝트가 monorepo이거나 package.json이 저장소 루트에 없다면 Root Directory 설정이 중요해질 수 있습니다.
단일 Next.js 프로젝트라면 프레임워크 설정을 불필요하게 수동 변경하기보다 먼저 자동 감지 결과와 실제 package.json scripts를 확인합니다.
Preview와 Production
Vercel은 Git 기반 작업에서 브랜치와 환경을 나눠 배포할 수 있습니다.
main
→ Production
feature/* 또는 PR
→ Preview
Preview URL은 변경 사항을 합치기 전에 검토하는 데 유용합니다.
Production은 실제 사용자에게 제공하는 환경이므로 환경변수와 외부 서비스 callback URL도 Production 기준으로 따로 확인해야 합니다.
환경변수 등록
환경변수는 코드 저장소에 실제 Secret을 넣지 않고 배포 환경에서 주입합니다.
예를 들어 다음 변수가 있다고 가정합니다.
NEXT_PUBLIC_API_BASE_URL
API_SECRET
NEXT_PUBLIC_ 접두사가 있는 값은 Next.js에서 브라우저에 노출될 수 있으므로 서버 Secret을 넣으면 안 됩니다.
NEXT_PUBLIC_API_BASE_URL
→ 공개 가능한 URL
API_SECRET
→ 서버 전용
Vercel에서는 각 환경변수를 Production, Preview, Development 등 필요한 범위에 연결할 수 있습니다.
환경변수를 추가하거나 수정한 뒤 이미 만들어진 deployment가 자동으로 과거 값을 다시 읽는다고 가정하지 않습니다. 새 설정이 반영된 deployment에서 다시 확인합니다.
첫 Production 배포
Git 연결을 완료하고 Production branch에 배포를 만들면 Vercel이 install과 build를 실행합니다.
대시보드에서 성공 상태가 보이더라도 다음 항목까지 확인합니다.
1. Production deployment 상태
2. build log
3. Production URL
4. 주요 route
5. 브라우저 console
6. Network 요청
7. 서버 기능
예를 들어 홈페이지가 열리더라도 /api/tasks 같은 Route Handler가 실패할 수 있습니다.
Production URL 검증
최소한 다음 URL은 직접 확인하는 편이 좋습니다.
/
/tasks
/login
핵심 API 또는 서버 기능
프로젝트에 없는 경로를 억지로 추가하지 말고 실제 사용자 흐름에서 중요한 경로를 고릅니다.
CLI나 터미널에서 상태 코드만 확인할 수도 있습니다.
curl -I https://example.vercel.app/
Windows PowerShell에서는 curl이 다른 명령 별칭으로 해석될 수 있으므로 필요하면 다음처럼 사용할 수 있습니다.
curl.exe -I https://example.vercel.app/
실제 URL은 자신의 Production URL로 바꿉니다.
deployment와 commit을 같이 기록합니다
운영 장애가 발생하면 “지금 배포된 코드가 어떤 commit인가?”를 확인할 수 있어야 합니다.
commit A
→ deployment A
commit B
→ deployment B
브라우저에서 문제가 생겼을 때 단순히 최신 main을 보는 것보다 실제 deployment가 연결된 commit을 확인하는 편이 정확합니다.
자주 발생하는 실수
Preview 환경변수만 넣고 Production을 확인하지 않습니다
Preview에서 정상이어도 Production 값이 없으면 운영 배포에서 실패할 수 있습니다.
로컬 .env.local이 클라우드에도 자동으로 있다고 생각합니다
로컬 파일은 로컬 환경에만 존재합니다. 필요한 값은 배포 환경에 별도로 설정합니다.
build 성공을 기능 정상으로 봅니다
build가 성공해도 API, 인증, callback URL, 외부 DB 연결은 실제 런타임에서 실패할 수 있습니다.
Secret을 문서나 스크린샷에 노출합니다
환경변수 이름과 역할만 문서화하고 실제 값은 비밀 저장소에서 관리합니다.
이 주제만 따로 연습하기
Vercel 계정 없이 다음 배포 기록을 검토합니다. 입력: commit A의 Preview는 /와 /tasks가 200, Production은 commit B이고 /는 200이지만 /api/tasks가 500입니다. 필수 API 변수는 Preview 범위에만 등록된 것으로 기록돼 있습니다.
| 관찰 | 판정과 다음 행동 |
|---|---|
| Preview 성공 | commit A와 Preview 범위에서의 결과 |
| Production /api/tasks 500 | commit B의 런타임 로그와 Production 변수 존재 여부 확인 |
| 대시보드 Success | 빌드/배포 단계 증거이며 핵심 API 정상 증거는 아님 |
완료 기록에는 환경·commit·URL·상태·남은 실패를 따로 적습니다. 자가 확인: Preview 성공 기록을 Production 성공 칸에 복사하면 어떤 차이를 놓칠까요? 코드 버전과 환경변수 범위가 모두 다릅니다.
학습 완료 체크리스트
- GitHub 저장소와 Vercel deployment 관계를 설명할 수 있습니다.
- Preview와 Production 환경을 구분할 수 있습니다.
- 환경변수를 범위별로 설정할 수 있습니다.
- Production URL에서 핵심 route를 확인할 수 있습니다.
- deployment와 commit을 함께 추적해야 하는 이유를 이해했습니다.
선택 실습: 할 일 앱에 적용하기
TaskFlow는 작업을 관리하는 예제 앱입니다. 이 선택 실습에서는 앱을 배포하고 서버·설정·운영 결과를 확인합니다.
이번 주제: Vercel Next.js 첫 배포: 환경변수와 Production URL 연결.
선택: 연재 프로젝트와 전체 자료
연재 프로젝트를 이어 만드는 분을 위한 자료입니다. 이 글의 개념과 예제만 찾으셨다면 필요한 파일과 실행 방법만 펼쳐보세요.
TaskFlow 프로젝트 적용
이 글부터 시작하는 전체 프로젝트
시작 ZIP — deploy-step-02-artifact-strategy-full-20260928을 새 폴더에 풀고, 이번 단계 완료 ZIP은 다른 폴더에 풀어 비교합니다. ZIP 안 프로젝트 폴더의 package.json 위치가 실행 루트입니다.
출발점은 Next.js 누적 TaskFlow와 같은 38단계 소스입니다. 프로젝트에는 홈·로그인·개인 작업 화면, 작업 추가·완료·삭제, Route Handler와 캐시 예제가 들어 있습니다. 설치 버전을 고정한 package-lock.json도 포함합니다.
이번 변경 이유: Vercel에서 실제 사용하는 환경변수 이름과 배포 결과 기록란을 준비합니다.
docs/deployment-plan.mddocs/server-access-runbook.md
- 시작 ZIP을 풀고
npm ci로 의존성을 설치합니다. Node.js 24와 npm을 사용합니다. - 위 변경 파일을 아래 전체 내용 또는 완료 ZIP의 같은 경로와 대조해 적용합니다. 다른 앱 파일은 유지합니다.
npm run typecheck,npm run build를 실행합니다. 오류가 있으면 첫 오류의 파일·명령을 기록하고 해결한 뒤 진행합니다.npm run setup-auth로 일회용 로컬 학습 계정을 설정한 후npm run dev를 실행합니다. 생성된.env.local과 입력 값은 공유하지 않습니다.
예상 결과: 홈과 로그인 화면은 공개됩니다. 로그인 전 /tasks는 로그인 화면으로 이동하고 /api/tasks는 401을 반환합니다. 로그인 후 작업 목록에서 추가·완료·삭제를 확인합니다. /cache-lab의 별도 캐시 실습은 npm run cache-api가 필요합니다.
3단계 SSH는 선택 학습입니다. 필수 시작본은 2단계이며, 완료 ZIP에 있는 서버 runbook은 참고 문서입니다. 앱 파일은 동일합니다.
저장·운영 범위: 작업은 단일 Node 프로세스 메모리에 저장되고 인증은 학습용 계정 예제입니다. 서버 재시작·서버리스 인스턴스 사이의 데이터 유지는 보장하지 않습니다. 로컬 실행 확인과 실제 운영 서비스 구축은 구분하며, 원격 배포·DNS·SSH·CI·롤백 결과는 직접 실행한 항목만 문서에 기록합니다.
전체 파일·코드 보기
이번 단계의 변경 파일 전체
docs/deployment-plan.md
# TaskFlow Deployment Plan
## Build
- package manager: npm
- install: npm ci
- build: npm run build
## Primary deployment
- platform: Vercel
- environment: Production
## Alternative deployment
- Firebase Hosting: static output일 때 검토
- Firebase App Hosting: server runtime이 필요할 때 검토
## Verification
- Production URL 응답
- 주요 화면 확인
- 환경변수 확인
- 주요 route 확인
- 현재 commit 확인
- rollback 가능 여부 확인
## Runtime decision
- static-only: no
- server runtime required: yes
- reasons:
- Route Handler
- server-side environment variables
## Primary
Vercel Production
## Firebase alternative
App Hosting 우선 검토
## Static variant
정적 결과물로 분리할 경우 Firebase Hosting 검토
## Production deployment
- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인
docs/server-access-runbook.md
# Server Access Runbook
## Connection
- host: 저장하지 않음
- user: 환경별 문서에서 별도 관리
- authentication: SSH key 우선
- private key: 저장소에 포함 금지
## Before upload
1. 대상 서버 확인
2. 현재 경로 확인
3. 배포 대상 경로 확인
4. 기존 파일 상태 확인
## After upload
1. 파일 존재 확인
2. owner / permission 확인
3. 서비스가 실제 경로를 읽는지 확인
4. HTTP 결과 확인
## Never commit
- private key
- password
- access token
- production secret
나머지 앱 소스와 잠금 파일은 전체 완료 ZIP에 있습니다. 기존 코드 조각은 설명용이며 위 전체 변경 파일과 ZIP이 이 누적 실습의 기준입니다. 다음 글에는 이번 완료 ZIP을 시작본으로 가져갑니다.
필수 선수는 1·2편입니다. 3편은 선택 참고이며 SSH 실행 없이 2편 체크포인트에서 시작할 수 있습니다. 누적 ZIP에 포함된 서버 runbook은 참고 문서입니다. 선택 확장 자료인 deploy-step-03-server-access는 서버 접속 참고용이며 필수 시작점이 아닙니다.
이 회차는 아래 전체 TaskFlow 시작 ZIP을 기준으로 진행합니다. 이전 글의 코드를 모으지 않아도 되며, 완료 ZIP에는 이번 변경과 기존 앱 기능이 함께 들어 있습니다.
.env.example
# 기존 앱에서 실제 사용하는 변수만 설정하세요. 값은 개발/운영 플랫폼에서 별도 관리합니다.
NEXT_PUBLIC_API_URL=
API_SECRET=
docs/deployment-plan.md
# TaskFlow Deployment Plan
## Build
- package manager: npm
- install: npm ci
- build: npm run build
## Primary deployment
- platform: Vercel
- environment: Production
## Alternative deployment
- Firebase Hosting: static output일 때 검토
- Firebase App Hosting: server runtime이 필요할 때 검토
## Verification
- Production URL 응답
- 주요 화면 확인
- 환경변수 확인
- 주요 route 확인
- 현재 commit 확인
- rollback 가능 여부 확인
## Runtime decision
- static-only: no
- server runtime required: yes
- reasons:
- Route Handler
- server-side environment variables
## Primary
Vercel Production
## Firebase alternative
App Hosting 우선 검토
## Static variant
정적 결과물로 분리할 경우 Firebase Hosting 검토
## Production deployment
- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인
docs/server-access-runbook.md
# Server Access Runbook
## Connection
- host: 저장하지 않음
- user: 환경별 문서에서 별도 관리
- authentication: SSH key 우선
- private key: 저장소에 포함 금지
## Before upload
1. 대상 서버 확인
2. 현재 경로 확인
3. 배포 대상 경로 확인
4. 기존 파일 상태 확인
## After upload
1. 파일 존재 확인
2. owner / permission 확인
3. 서비스가 실제 경로를 읽는지 확인
4. HTTP 결과 확인
## Never commit
- private key
- password
- access token
- production secret
README.md
# 배포·서버 04 — deploy-step-04-vercel-production
이 ZIP은 배포 준비·운영 문서와 해당 회차 설정/코드 조각을 누적한 적용 자료입니다. 실행 앱 전체는 포함하지 않습니다. 기존 deploy-step-00-build-ready 프로젝트에 해당 파일을 검토하여 적용하세요. 이 ZIP 루트에서 npm ci/build를 실행하는 구조가 아닙니다.
.env.example은 값이 빈 설정 안내입니다. 독자의 앱에서 사용하는 변수만 .env.local 또는 플랫폼의 해당 환경에 설정하세요. URL·계정·비밀키를 ZIP에 넣지 않습니다.
이 자료에는 실제 배포·DNS 변경·SSH 접속·메일/알림·롤백 결과가 없습니다. 운영 작업은 독자가 본인 환경과 권한을 확인한 후 수행해야 합니다. 문서의 확인 항목은 수행할 체크리스트이며 이미 통과했다는 기록이 아닙니다.
이전 체크포인트
deploy-step-02-artifact-strategy
배포 전 확인
npm ci
npm run build
두 명령이 성공한 상태에서 Vercel 프로젝트를 연결합니다.
TaskFlow 환경변수 예시
프로젝트에 실제로 필요한 변수만 등록합니다.
NEXT_PUBLIC_SITE_URL=https://your-production-domain.example
API_SECRET=production-secret
위 값은 구조 예시입니다. 실제 Secret은 본문, 저장소, ZIP에 포함하지 않습니다.
deployment 기록
docs/deployment-plan.md에 실제 값을 안전하게 기록할 수 있는 필드를 추가합니다.
## Production deployment
- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인
공개 블로그 예제에는 개인 프로젝트의 실제 비공개 URL이나 Secret을 그대로 넣지 않습니다.
실행·결과 확인
이 문서는 배포 방법을 설명하는 본문입니다. 실제 Vercel 계정에서의 deployment 성공 여부는 독자의 프로젝트에서 확인해야 합니다.
확인 항목은 다음과 같습니다.
Production deployment = Ready
Production URL 접속 가능
핵심 route 정상
브라우저 console 치명적 오류 없음
필요한 서버 기능 정상
참고용 문서·최소 예제 코드
아래 기존 문서·설정 예시는 변경 이유를 설명합니다. 실제 누적 앱의 전체 소스는 위의 전체 완료 ZIP에 있으며, 다음 회차의 시작본으로 그대로 사용합니다.
완료 체크포인트
deploy-step-04-vercel-production
실습 경로·결과·복구
독자 질문
Vercel 배포 성공 화면 다음에 무엇을 확인해야 할까요?
배포 전제
로컬 npm ci와 npm run build를 통과한 GitHub 저장소, Vercel 접근 권한, 앱이 실제 사용하는 변수 이름 목록이 필요합니다. 3회차 SSH 문서는 선택 확장이고 이 배포의 필수 선행 조건은 1·2회차입니다.
실행 단계
- GitHub의 대상 저장소와 배포 브랜치를 확인한 뒤 Vercel에서 프로젝트를 가져와 Next.js 프레임워크·루트 디렉터리·build 설정을 실제 저장소와 대조합니다.
- 앱에서 참조하는 환경변수 이름과 Production 범위만 확인해 등록합니다. 값은 글·스크린샷·Git에 남기지 않습니다. 변경한 환경변수를 사용하려면 새 배포에서 검증합니다.
- Production deployment의 상태·commit SHA·배포 URL을 기록하고 홈, 주요 작업 화면, 서버/API 경로를 브라우저와 Network 탭에서 각각 확인합니다.
성공·실패 확인
Success와 함께 Production URL에서 핵심 경로가 의도한 응답과 화면을 보이고, 연결된 commit이 기대 버전과 같아야 성공입니다. 빌드 실패면 해당 배포 로그, 200이지만 기능 실패면 runtime 로그와 Network 응답, Preview만 정상이라면 Production 변수 범위를 확인합니다.
복구와 검증 상태
문제가 생기면 먼저 배포 URL과 commit을 보존합니다. 설정 수정 뒤 새 배포를 확인하거나, 이전 정상 deployment가 확인된 경우 플랫폼의 복구 절차로 운영 도메인을 되돌리고 주요 URL을 재검사합니다. 이 글 작성 과정에서 TaskFlow의 실제 Vercel 배포는 미확인입니다.
다음 학습
다음 글에서는 플랫폼이 제공한 임시 URL을 실제 커스텀 도메인으로 연결하고 DNS와 HTTPS를 별도 계층으로 검증합니다.
다음 글: 커스텀 도메인 연결: DNS와 HTTPS 확인
다음 회차 확인 과제: 05회차에서는 방금 확인한 플랫폼 URL을 기준으로 DNS 응답, HTTPS 인증서, 대표 도메인과 주요 경로를 각각 확인합니다.
공식 문서
공식 문서 확인 기준: 2026-09-21
체크포인트 다운로드
글 소개·학습 준비·전체 목차

배포·서버 · 4 / 11 · 최초 실배포 · Vercel
상단에서는 배포 기록을 읽어 코드·환경·URL을 연결하는 기준을 익힙니다. 실제 앱의 Production 배포는 하단 실습에서 진행합니다.
이 글의 목표는 Vercel 버튼을 누르는 방법만 익히는 것이 아닙니다. GitHub 저장소, build 명령, 환경변수, Preview와 Production 범위, deployment와 commit의 관계를 이해하고 실제 운영 URL에서 검증할 기준을 만드는 것입니다.
이번 글에서 배우는 내용
- Git 저장소를 Vercel 프로젝트에 연결하는 흐름
- Production과 Preview deployment 차이
- 환경변수 범위를 나누는 방법
- build 성공과 서비스 정상 동작의 차이
- Production URL에서 확인할 항목
- deployment와 commit SHA를 함께 기록하는 이유
선수 지식
- GitHub 저장소에 push 가능
- npm ci와 npm run build 실행 가능
- Next.js 프로젝트 기본 구조
- 환경변수 기본 개념
아래 main은 Production 브랜치의 예시입니다. 실제 배포 대상은 Vercel 프로젝트의 Production Branch 설정으로 확인합니다.
목차
이 글이 도움이 되었나요?
읽음 기록
읽음 — / 전체 11개 · 필수 7개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.