📝 한줄 요약
Claude Code와 함께 Next.js 가계부 웹앱을 Vercel에 처음 배포해보면서, 첫 배포는 성공했지만 두 번째 배포에서 만난 'No Next.js detected' 에러를 빌드 로그 한 줄로 추적해 해결한 후기입니다.
달력이 컴퓨터 화면에 표시됩니다
원형 차트가 포함된 대시보드 스크린샷
검정색 배경의 화면 스크린샷
바쁘시면 이것만 읽어도 돼요:
목표: 흩어져 있던 지출 기록을 한 곳에 모을 가계부 웹앱 MVP를 만들고, 진짜 공개 URL까지 가보기
인상 깊었던 순간: 환경변수 4개 (Google OAuth 2개, NEXTAUTH_SECRET, NEXTAUTH_URL)를 어떻게 채워야 하는지 AI가 순서대로 안내해줘서 흐름이 한 번도 끊기 지 않았다
막혔던 곳: 두 번째 배포에서 "Next.js를 못 찾겠다"는 에러가 났는데, 코드는 멀쩡한데 왜 안 되는지 막막했음
핵심 해결 방법: 에러 메시지만 보지 말고, 빌드 로그 전체를 AI에게 통째로 넘겼더니 "removed 441 packages in 2s" 한 줄에서 단서를 짚어줌 → Vercel 대시보드의 Root Directory 설정을 의심 → 한 번에 해결
얻은 것: 배포·디버깅을 자력으로 할 수 있게 됐고, 다른 Next.js 프로젝트에도 그대로 재사용 가능한 워크플로우를 손에 넣음
배운 교훈: "AI에게 줄 정보가 많을수록 답이 정확해진다" — 에러 메시지 한 줄만 던지면 일반론이 돌아오지만, 로그 전체를 던지면 단서를 짚어낸다
🎯 이런 분들께 도움돼요
Next.js 코드는 짤 줄 알지만 Vercel 배포는 이번이 처음인 개발자
Vercel CLI를 처음 써보거나, OAuth 환경변수 세팅 흐름을 한 번에 정리해두고 싶은 분
에러가 떴을 때 AI한테 어떤 정보를 어떤 형태로 던지면 효율적인지 패턴을 익히고 싶은 분
GPTers Claude Code 스터디 토요일 과제처럼 "MVP를 배포까지 가져가야 하는" 상황의 스터디 참여자
😫 문제 상황 (Before)
개인 지출을 매번 메모장에 끄적이거나 이런저런 가계부 앱에 흩어져서 기록하고 있었어요. 한 달 지나서 다시 보려고 하면 "그때 그 식비를 어디다 적었더라" 하면서 여러 앱을 뒤지는 게 일이었고요.
원하는 건 단순했어요. 달력에 서 그날 클릭하면 지출이 보이고, 차트로 카테고리별 합계를 한눈에 볼 수 있는 나만의 도구. 큰 기능은 필요 없고, 우선 한 화면이라도 작동하는 MVP를 만들어서 진짜 공개 URL로 띄워보는 것이 이번 토요일 과제의 목표였습니다.
지금까지 Claude Code로 스킬을 만드는 것까진 해봤지만, 실제 사용자가 접속할 수 있는 배포 단계는 처음이었어요. 그래서 "이번 한 번은 처음부터 끝까지 가본다"를 목표로 잡았습니다.
🛠️ 사용한 도구
도구명: Claude Code
모델: Claude Opus 4.7 (1M context)
배포 플랫폼: Vercel (Fluid Compute, Node.js 24)
기술 스택 (AI가 잡아준 것): Next.js 14 + NextAuth (Google 로그인) + FullCalendar (달력) + Recharts (차트) + Tailwind CSS
🔧 작업 과정
환경변수 4개 채우기 — 외우지 말고 순서대로 받기
배포 직전, 빌드를 한 번 돌려보려고 했는데 .env.local 파일에 채워야 할 변수가 4개 있더라고요. Google OAuth 클라이언트 ID/Secret, NEXTAUTH_SECRET, NEXTAUTH_URL. 이름만 봐서는 뭘 어디서 가져와야 하는지 막막했어요.
그래서 그냥 통째로 던졌습니다.
# .env.local 파일을 열어 4개 변수 채우기:
# GOOGLE_CLIENT_ID=...
# GOOGLE_CLIENT_SECRET=...
# NEXTAUTH_SECRET=$(openssl rand -base64 32)
# NEXTAUTH_URL=http://localhost:3000
npm run build # 빌드 에러 확인
해당 내용을 채우려면 어떻게 해야하는지 순서대로 알려줄래
AI가 단계별로 안내해줬어요.
Google Cloud Console에서 OAuth 2.0 클라이언트 만들기 — 어디로 들어가서, 어떤 메뉴를 눌러서, 콜백 URL은 뭘로 설정해야 하는지 한 줄씩
NEXTAUTH_SECRET 생성 —
openssl rand -base64 32명령어 한 줄로 즉시 시크릿 생성 (외울 필요 없이 그때그때 받으면 됨)NEXTAUTH_URL 설정 — 로컬은
http://localhost:3000, 나중에 Production용은 Vercel 배포 후 URL로 바꿔야 한다는 주의사항까지빌드 검증 — 다 채운 다음
npm run build로 환경변수 누락이 있 는지 한 번 확인
여기서 "오!" 했던 부분이 있어요. 사람이 알려주면 보통 "환경변수가 뭐고, 왜 필요하고, Google Cloud Console이 뭐고…" 하는 배경 설명부터 시작하잖아요. AI는 "지금 당장 클릭할 메뉴 → 복사할 값 → 어느 줄에 붙여넣을지" 만 정확히 짚어줘서 흐름이 한 번도 안 끊겼어요. 모르는 건 추가로 물어보면 되니까 우선 진행이 중요했죠.
Vercel CLI 설치와 로그인 — 인터랙티브 입력은 사용자가 직접
환경변수가 다 채워졌으니 이제 배포할 차례. Vercel CLI도 처음이라 한 줄씩 받았습니다.
npm i -g vercel
vercel --version
vercel login
여기서 살짝 막혔던 건 vercel login이 브라우저를 열어서 인증을 받는 인터랙티브 명령어였다는 점이에요. AI가 직접 실행하면 입력을 받을 사람이 없으니 멈춰버립니다.
해결은 간단했어요. 명령어 앞에 !를 붙여서 사용자가 직접 실행하면 됐어요. (Claude Code의 기능)
! vercel login
이러면 제가 직접 명령을 실행하고, 결과(브라우저 인증 완료 메시지)는 다시 AI 화면으로 돌아옵니다. 흐름이 안 끊기죠.
첫 배포 성공 — vercel --prod 한 줄
로그인까지 끝나고 vercel --prod를 실행했더니, 의외로 한 번에 됐어요. CLI가 자동으로:
.vercel/project.json파일을 만들어서 프로젝트를 Vercel 계정에 자동 연결환경변수 4개를 Production 환경에 한 번에 등록
빌드 → 배포 → 공개 URL 발급까지 한 흐름으로 처리
여기까지가 토요일 오후의 작업이었어요. "어, 생각보다 쉽네?" 하고 마무리하려는 순간이었죠.
다음 날, 두 번째 배포에서 막힘 — "No Next.js detected"
다음 날 다시 배포를 했더니 갑자기 빌드가 실패합니다.
Error: No Next.js version detected.
Make sure your package.json has "next" in either "dependencies" or "devDependencies".
Also check your Root Directory setting matches the directory of your package.json file.
당황스러웠어요. 어제는 됐는데 오늘은 왜 안 되지? 코드는 하나도 안 바뀌었고, package.json을 열어봐도 next: 14.2.5가 멀쩡히 들어있었거든요.
검색해보면 흔한 해결책은 "package.json에 next 추가하세요" 같은 일반론인데, 제 경우엔 이미 들어 있었으니 도움이 안 됐어요.
빌드 로그 통째로 던지기 — "removed 441 packages" 한 줄의 단서
여기서 AI한테 그냥 에러 메시지가 아니라 빌드 로그 전체를 까서 보여달라고 했어요.
이거 디버깅 좀 도와줘
[Vercel 빌드 실패 화면 그대로 복붙]
AI가 vercel inspect --logs 명령으로 빌드 로그 전체를 가져왔어요. 그리고 사람 눈에는 잘 안 보일 한 줄을 짚어줬어요.
"'removed 441 packages in 2s' — 이게 핵심 단서예요.
npm install이 패키지를 설치한 게 아니라 제거한 거예요. 이건 업로드된package.json에next같은 dependency가 안 들어있다는 뜻이에요. 그런데 우리 로컬package.json엔 멀쩡히 있죠. 그럼 Vercel이 보는 package.json이 다른 위치의 것이라는 얘기예요."
그러면서 가설을 하나 던졌어요.
"Vercel 대시보드의 Root Directory 설정에 혹시
web/같은 값이 들어있나요? CLI는 이미web/폴더에서 업로드를 시작하는데, 대시보드에서도web/를 설정해 놓으면 Vercel은web/web/package.json을 찾게 돼서 못 찾는 거예요."
대시보드 들어가서 Settings → Build and Development Settings → Root Directory를 확인했는데…