Vercel 배포가 빨간 글씨로 멈췄을 때 5분 안에 어디서 막혔는지 진단하고 푸는 흐름을 정리했습니다. 비전공자분이 가장 자주 만나는 Vercel 배포 에러 10가지 + 1줄 해결, 빌드 4단계 중 어느 단계인지 즉시 식별하기, “로컬은 되는데 Vercel만 실패”의 진짜 원인 5가지까지. 같은 에러로 반나절 날리는 일이 사라지도록 빠른 참조용 가이드입니다.
📑 목차
🎯 Vercel 배포 에러가 비전공자에게 무서운 이유
Vercel은 git push만 하면 자동으로 빌드·배포가 돌아가는 편한 도구예요. 그래서 비전공자분이 첫 사이트를 가장 빨리 띄우는 경로가 되곤 합니다. 다만 한 가지 함정이 있어요. 배포가 실패하면 화면에 빨간 글씨와 영문 로그가 쏟아지는데, 어디서부터 봐야 할지 감이 안 잡힌다는 점이죠.
경험상 Vercel 배포 에러의 90%는 10가지 패턴 안에 들어옵니다. 그리고 절반 이상은 빌드 로그 첫 빨간 줄 한 줄만 봐도 어느 패턴인지 알 수 있어요. 이 글은 그 10가지를 빈도순으로 정리하고, 5분 안에 진단하는 흐름과 다시 같은 일이 안 생기게 막는 습관까지 묶었습니다. 처음 배포가 막막하다면 Vercel 무료 배포 완전 가이드부터 보시고 와도 좋아요.
한 가지 미리 짚어드릴게요. Vercel 배포 에러는 거의 항상 “환경 차이”의 신호예요. 본인 컴퓨터(macOS, Node 22)와 Vercel 빌드 서버(Linux, Node 20)가 미묘하게 다르거든요. 그래서 “내 컴퓨터에서는 잘 되는데?”라는 말이 가장 많이 나오는 도구이기도 합니다.
🧭 배포 4단계 — 어느 단계에서 막혔나
Vercel 배포는 크게 4단계로 흘러갑니다. 에러 메시지가 어느 단계에서 떴는지만 알아도 진단 시간이 절반으로 줄어요.

① Install — 의존성 설치
package.json에 적힌 패키지를 받는 단계예요. lockfile이 깨졌거나, 본인이 로컬에서는 npm을 쓰는데 Vercel은 pnpm을 잡아 쓰는 식으로 패키지 매니저가 어긋나면 여기서 멈춥니다. 정상 신호는 로그에 “Installing dependencies…” 다음에 “Done in 12s” 같은 완료 메시지가 보이는 모습이에요.
② Build — 소스 컴파일·번들
실제 배포 실패 60% 이상이 모이는 단계입니다. Module not found, TypeScript 타입 에러, 빌드 명령 누락이 여기서 터져요. “Building…” 직후의 빨간 줄이라면 Build 단계 에러로 보시면 됩니다.
③ Deploy — 결과물 업로드
빌드 결과를 Vercel 엣지 네트워크로 올리는 단계입니다. Function 한 개가 50MB를 넘거나, 출력 디렉토리가 비어있으면 여기서 막혀요. 비교적 드물지만, 무거운 의존성을 무심코 추가했을 때 만나는 에러입니다.
④ Runtime — 실제 요청 처리
배포 자체는 성공했는데 사이트에 들어가면 500 에러가 뜨는 경우예요. 환경변수 누락, 함수 타임아웃, next/image 도메인 미허용이 대표 패턴입니다. “Deployment ready” 다음에도 사이트가 안 열린다면 Runtime을 의심하세요.
🔥 가장 많이 만나는 Top 3 — 60% 차지
10가지 중에서도 비전공자분이 첫 6개월에 압도적으로 자주 만나는 3가지가 있어요. 이것만 알아도 절반은 끝납니다.

1. Module not found — 대소문자 차이의 함정
본인 컴퓨터에서는 멀쩡히 import되던 파일이 Vercel에서만 못 찾는다고 하는 패턴이에요. 거의 항상 대소문자 차이가 원인입니다. macOS와 Windows의 기본 파일 시스템은 대소문자를 구분하지 않지만, Vercel이 돌리는 Linux는 정확히 구분하거든요.
# 로컬: header.tsx 파일을 ./Header로 import해도 동작
import Header from './Header'
# Vercel(Linux): 같은 코드에서 파일을 못 찾음
# → 파일명을 import 경로와 정확히 맞추기
mv header.tsx Header.tsx
해결의 정상 신호는 git push 후 새 빌드 로그에서 “Compiled successfully”가 보이는 모습입니다.
2. 환경변수 누락 — .env는 git에 안 올라가요
.env 또는 .env.local 파일은 보안상 .gitignore로 제외돼서 GitHub에 안 올라갑니다. 그래서 Vercel은 본인이 쓰는 API 키가 뭔지 모르는 상태로 빌드를 시도해요. 결과적으로 빌드는 통과해도 사이트에서 “undefined is not a valid API key” 같은 메시지가 뜹니다.
# Vercel 대시보드 → Settings → Environment Variables
# Key: NEXT_PUBLIC_SUPABASE_URL
# Value: https://xxxx.supabase.co
# Environment: Production / Preview / Development 모두 체크
# 추가 후 반드시 재배포 (자동 안 됨)
git commit --allow-empty -m "redeploy"
git push
브라우저에서 직접 쓰는 변수는 반드시 NEXT_PUBLIC_ 접두사가 필요합니다. 접두사가 없으면 서버에서만 보여서 클라이언트 코드에서는 undefined로 잡혀요. 환경변수 자체가 처음이면 .env 파일과 API 키 관리 가이드를 같이 보시면 좋습니다.
3. Node 버전 불일치 — engines 필드로 못 박기
로컬에서 Node 22로 개발했는데 Vercel 기본 빌드 환경이 다른 버전이면 “Unsupported engine” 또는 미묘한 빌드 에러가 떠요. package.json에 engines 필드를 한 줄 추가해서 명시적으로 못 박으면 깔끔하게 해결됩니다.
// package.json
{
"name": "my-app",
"engines": {
"node": "22.x"
}
}
Vercel 대시보드 → Settings → General → Node.js Version 메뉴에서도 동일하게 설정할 수 있어요. 두 곳에 다르게 적혀있으면 package.json이 이깁니다.
📋 Vercel 배포 실패 Top 10 한눈에
위 3개를 포함한 Top 10을 빈도순 표로 정리했어요. 에러 메시지 키워드로 본인 상황을 빠르게 매칭하시면 됩니다.
| # | 에러 키워드 | 단계 | 1줄 해결 |
|---|---|---|---|
| 1 | Module not found | Build | 파일명 대소문자를 import 경로와 정확히 일치 |
| 2 | undefined / API key invalid | Runtime | Vercel Settings에 환경변수 등록 + 재배포 |
| 3 | Unsupported engine | Install | package.json engines 필드로 Node 버전 명시 |
| 4 | Type error / TS2322 | Build | 타입 수정 또는 next.config의 typescript.ignoreBuildErrors true |
| 5 | npm err! missing script: build | Build | package.json에 “build”: “next build” 추가 |
| 6 | Function size 50MB | Deploy | 무거운 의존성 제거 또는 Edge Runtime 전환 |
| 7 | Function execution timeout | Runtime | 10초 안에 끝나게 로직 분리 또는 Pro 플랜 60초 |
| 8 | Image hostname not configured | Runtime | next.config.js images.remotePatterns에 도메인 추가 |
| 9 | lockfile out of sync | Install | 로컬에서 lockfile 새로 생성·커밋 |
| 10 | 404 / Output directory not found | Deploy | Framework Preset 또는 Output Directory 설정 확인 |
위 표를 한 번 훑어두시면 다음에 같은 에러를 만났을 때 검색 시간이 거의 사라져요. 11번 이후는 빈도가 1% 미만이라 표에서 제외했습니다.
💭 로컬은 되는데 Vercel만 실패하는 5가지 진짜 원인
“내 컴퓨터에서는 잘 되는데 Vercel만 실패해요”는 비전공자분이 가장 많이 하는 질문이에요. 거의 항상 5가지 원인 중 하나입니다.
1. 운영체제 차이 (대소문자)
위에서 다룬 Top 1 원인이에요. macOS·Windows는 대소문자 무시, Linux는 구분. 이 한 가지로 빌드의 절반이 실패합니다. 평소에 import 경로와 파일명을 같은 대소문자로 일치시키는 습관이 가장 효과적이에요.
2. .gitignore에 막혀 안 올라간 파일
본인 컴퓨터에는 있는데 GitHub에는 없는 파일이 빌드 입력에서 빠지는 경우입니다. .env가 대표예요. 의외로 많이 일어나는 게 본인이 손으로 만든 설정 파일을 .gitignore에 무심코 적어두고 잊은 케이스죠. git status --ignored로 한 번 훑어보시면 잡힙니다.
3. node_modules에 우연히 들어간 패키지
로컬에서 npm install로 새 패키지를 설치했는데 --save 없이 했거나 dependencies 쪽에 안 들어갔을 때예요. 본인 컴퓨터에는 폴더로 남아있어 import가 되지만 Vercel은 package.json에 없으니 안 받습니다. rm -rf node_modules && npm install로 한 번 깨끗하게 다시 깔아보시면 빠진 패키지가 드러나요.
4. Node 또는 패키지 매니저 버전
로컬은 Node 22, Vercel은 Node 20처럼 메이저 버전이 다르면 일부 신문법이 깨집니다. pnpm vs npm 같은 매니저 차이로 lockfile이 달라지는 케이스도 같은 카테고리예요. engines 필드 + packageManager 필드로 두 곳 다 명시해두는 게 안전합니다.
5. 환경변수 미등록
로컬은 .env.local로 주입되지만 Vercel은 대시보드에 등록 안 되면 빈 상태로 빌드해요. 이 케이스가 빌드는 통과해도 Runtime에서 터지는 패턴 1위입니다. 새 키를 추가했으면 매번 Vercel 대시보드에도 함께 등록하시는 습관이 필요해요.
배포 전에 로컬에서
rm -rf node_modules .next && npm ci && npm run build를 한 번 돌려보시면 Vercel 환경과 거의 같은 조건으로 빌드를 재현할 수 있어요. npm ci는 lockfile 그대로 깨끗하게 설치하는 명령이라 “내 컴퓨터에는 멀쩡한데” 케이스를 빨리 잡아냅니다.
🛠 5분 진단 흐름 (체크리스트)
새 에러를 만났을 때 무엇부터 할지 모르겠다면 아래 4단계를 위에서 아래로 따라가 보세요. 5분이면 90%가 잡힙니다.

1단계 — 빌드 로그 첫 빨간 줄 찾기
Vercel 대시보드 → Deployments → 실패한 배포 클릭 → Build Logs 탭. 위에서 아래로 스크롤하면서 처음 빨간 줄을 찾으세요. 그 한 줄이 진짜 원인입니다. 그 아래 빨간 줄들은 대부분 첫 줄 때문에 따라온 부수 에러예요.
2단계 — 로컬에서 같은 빌드 명령 재현
rm -rf node_modules .next
npm ci
npm run build
같은 에러가 로컬에서도 나오면 코드 문제, 안 나오면 환경 차이 문제로 갈라져요. 30초 만에 1번과 5번을 동시에 진단할 수 있는 가장 가성비 좋은 단계입니다.
3단계 — 환경변수·Node 버전 빠른 점검
로컬에서는 빌드되는데 Vercel만 실패한다면 두 가지를 봅니다. 첫째, .env.local의 키들이 모두 Vercel Settings → Environment Variables에 등록됐는지. 둘째, node -v로 본인 Node 버전을 확인하고 package.json engines 필드와 일치하는지. 이 두 가지가 맞으면 환경 차이 원인 90%가 정리돼요.
4단계 — 고친 후 git push로 자동 재배포
수정 후 git push만 하면 Vercel이 자동으로 새 Preview 빌드를 시작합니다. 대시보드 Deployments에서 실시간 진행을 보면서 결과를 기다리세요. 정상 신호는 “Ready” 상태와 함께 미리보기 URL이 클릭 가능하게 활성화되는 모습입니다.
배포 에러 디버깅 중에 main 브랜치에 빨간 빌드를 계속 쌓으면 production 사이트가 멈춥니다. 별도 브랜치(예:
fix/vercel-build)로 push하면 Preview URL로 자유롭게 시도·실패해도 production은 안전해요. 통과 확인 후 PR로 main에 머지하시면 됩니다.
🚫 절대 하지 말아야 할 3가지
빠르게 해결하려다 더 큰 문제로 번지는 3가지 패턴이 있어요. 한 번이라도 들어가면 디버깅이 며칠로 늘어납니다.
1. ignoreBuildErrors / eslint.ignoreDuringBuilds 남발
next.config에 typescript.ignoreBuildErrors: true를 켜면 타입 에러 무시하고 빌드가 통과하긴 합니다. 다만 진짜 버그를 production에 그대로 배포하게 되니 임시방편으로만 쓰세요. 정상 흐름은 타입 에러를 코드에서 고치는 거고, 정 급하면 해당 줄에만 // @ts-expect-error 임시 한 줄로 좁히는 게 안전합니다.
2. .env 파일을 git에 push
“Vercel이 환경변수를 못 찾으니 .env를 그냥 push해버리자”는 시도가 가끔 보입니다. 절대 금물이에요. API 키가 GitHub에 영구 노출되고, public 저장소면 봇이 몇 분 안에 키를 긁어 갑니다. 환경변수는 반드시 Vercel 대시보드 Environment Variables에 등록하세요.
3. 같은 에러로 다섯 번 이상 push
로그를 제대로 안 읽고 한 줄씩 임의 수정하면서 push만 반복하는 패턴이에요. 빌드 1회당 1~5분이 걸리니 다섯 번이면 30분이 그냥 사라집니다. 한 번 실패하면 반드시 로컬 재현 단계(2단계)로 돌아가서 같은 조건을 만들고 디버깅하세요. 로컬에서 30초 만에 잡힐 일을 클라우드에서 30분 보는 건 손해입니다.
💡 재발 방지 5가지 습관
같은 에러를 두 번 만나는 게 가장 비효율적이에요. 5가지 습관이 Vercel 배포 에러 빈도를 절반 이하로 줄여줍니다.
| # | 습관 | 효과 |
|---|---|---|
| 1 | main 직접 push 금지, 별도 브랜치 + PR 머지 | production 빨간 빌드 영구 차단 |
| 2 | 새 환경변수 추가 시 .env.local + Vercel 대시보드 동시 등록 | Runtime undefined 사고 방지 |
| 3 | package.json engines 필드 항상 명시 | Node 버전 미스매치 영구 차단 |
| 4 | import 경로 대소문자를 파일명과 정확히 일치 | Linux 빌드 실패 차단 |
| 5 | 커밋 전 로컬 npm run build 1회 실행 | 빨간 배포 80% 사전 차단 |
특히 1번과 5번이 가장 효과 큽니다. “main 직접 push 금지” + “커밋 전 로컬 빌드”만 지켜도 빨간 알림 빈도가 확 줄어요.
🪧 면책 조항
오늘 안에 Vercel 대시보드의 마지막 실패 배포를 한 번만 다시 열어보세요. 위 진단 흐름을 한 번 따라 돌리시면 그동안 묵혀둔 에러가 의외로 빨리 풀리는 경험이 따라옵니다.
❓ FAQ
질문을 누르면 답변이 펼쳐집니다.
🔰 시작하기 전 궁금한 것들
Q. Vercel 배포 실패는 비용이 청구되나요?
Q. Vercel과 Netlify 중 어느 쪽이 에러가 적나요?
Q. Vercel CLI로 로컬에서 배포 사전 검증할 수 있나요?
vercel build 명령으로 Vercel 빌드 환경과 거의 같은 조건으로 로컬에서 빌드해볼 수 있어요. vercel dev는 함수까지 포함한 로컬 개발 서버를 띄워줍니다. 푸시 전에 한 번 돌려보면 빨간 배포를 미리 막을 수 있습니다.
🛠 빌드·런타임 중 자주 마주치는 상황
Q. 빌드 로그가 너무 길어 어디를 봐야 할지 모르겠어요
Q. 환경변수를 등록했는데도 undefined가 나옵니다
git commit --allow-empty)해보세요.Q. Function이 50MB를 넘는다는데 어떻게 줄여요?
du -sh node_modules/* | sort -h로 큰 패키지를 한 번 훑으시면 범인이 보입니다. puppeteer, sharp, @sentry/node 같은 무거운 패키지가 자주 원인이에요. Edge Runtime으로 전환하거나, 해당 로직을 외부 API로 분리하는 것도 방법입니다.Q. 함수 실행이 10초 만에 잘립니다
Q. next/image에서 외부 이미지가 안 떠요
{ protocol: 'https', hostname: '**.supabase.co' }. 보안상 명시적으로 허용한 도메인만 next/image가 처리하도록 막혀있어서 그래요. 등록 후 재배포가 필요합니다.
🚀 그 다음 단계
Q. Preview 배포는 어떻게 더 잘 활용하나요?
Q. 빌드 시간을 더 줄이고 싶어요
Q. 같은 에러가 자꾸 반복돼요. 어떻게 정리하면 좋을까요?
docs/deploy-errors.md 같은 파일을 만들고 “에러 메시지 + 원인 + 해결법”의 3줄 형식으로 매번 적어두세요. 6개월 후엔 본인만의 디버깅 자산이 돼서 같은 에러를 1분 안에 해결할 수 있습니다.
🔗 관련 글
- Vercel 무료 배포 완전 가이드
- Vercel 무료 플랜 한계와 Pro 업그레이드 시점
- .env 파일과 API 키 관리 가이드
- git push 에러 해결 7가지
- npm install 에러 해결 총정리
📑 참고 자료
- Vercel — Troubleshoot a Build 공식 문서
- Vercel — Environment Variables 공식 문서
- Vercel — Functions Runtimes 공식 문서
- Next.js — next/image remotePatterns
IT 기획 10년차 / 비전공자를 위한 바이브코딩 블로그 운영 / vibe-start.com 제작
Building VibeStart — the fastest path for non-devs into AI coding. Launching on Product Hunt 2026-05-26.
