TROUBLESHOOTING DESK

어디서 막혔는지 고르면, 확인 순서가 나옵니다

로그인·배포·API·DB·업로드·결제·크론. AI 에이전트에게 붙여넣을 프롬프트와 사람이 직접 열어볼 콘솔 메뉴를 나눠서 설명합니다.

지금 어디서 막혔나요?

증상과 가장 가까운 항목을 누르면 프롬프트·외부 설정 경로·성공 확인법이 나옵니다.

  • 로그인·콜백 흐름

    내 사이트

    → 콜백 →

    로그인됨

    /dashboard

    이걸 만들면 ‘구글로 로그인 → 내 사이트 복귀’ 화면이 연결됩니다.

    로그인·인증

    구글 로그인은 나만 되는데 다른 사람은 안 될 때

    나는 로그인되는데 친구·다른 계정만 실패하거나, 배포 후 redirect_uri_mismatch가 나는 상황을 순서대로 좁힙니다.

    AI에게 먼저 이렇게 시키세요
    Next.js + Google OAuth에서 redirect_uri_mismatch가 납니다. 로컬 URL [   ], 배포 URL [   ], .env 키 이름 목록. 콘솔 등록값과 코드를 대조하는 체크리스트를 만들어 주세요.

    사람이 직접 확인할 것

    • · Google Cloud redirect URI 글자 단위 일치
    • · client secret이 Vercel env에만
    • · 콜백 route 404 여부
    막히면 다시 넣을 프롬프트
    OAuth redirect_uri_mismatch. 등록 URI: [   ], 실제 요청: [   ]. NextAuth 설정 파일 경로: [   ]. 단계별 수정.

    용어 한 줄

    env
    비밀 설정값(API Key·비밀번호)을 넣는 파일·칸
    redirect URI
    로그인 후 다시 돌아올 우리 사이트 주소
    콜백
    로그인 사이트가 인증 결과를 넘겨주는 우리 서버 주소
  • 배포

    로컬은 되는데 Vercel에 올리면 터질 때

    집 컴퓨터에서는 되는데 배포 URL만 500·빈 화면·API 실패일 때, Vercel 비밀값 칸부터 순서대로 좁힙니다.

    AI에게 먼저 이렇게 시키세요
    로컬 npm run dev는 되는데 Vercel만 500입니다. 에러 로그: [   ]. env 목록(값 제외). edge vs node runtime 차이 점검 순서.

    사람이 직접 확인할 것

    • · Vercel Environment Variables Production 탭
    • · DATABASE_URL·AUTH_SECRET 배포 값
    • · 빌드 로그 첫 error 줄
    막히면 다시 넣을 프롬프트
    Vercel production 500. Function log: [   ]. 로컬과 다른 env: [   ]. middleware·runtime 설정 확인.

    용어 한 줄

    env
    배포 서버에만 넣는 비밀 설정값
    runtime
    코드가 edge(가벼움)에서 도는지 node(풀 기능)에서 도는지
  • AI API

    AI API 붙였더니 요금이 갑자기 튀었을 때

    키가 화면·저장소에 새거나, 한도·재시도 없이 돌려서 청구가 커진 상황을 막는 순서를 정리합니다.

    AI에게 먼저 이렇게 시키세요
    OpenAI API Key를 Next.js에 안전하게 넣으려 합니다. .env.local 이름·서버 route 예시·NEXT_PUBLIC_ 금지 목록·git grep으로 키 검색 명령.

    사람이 직접 확인할 것

    • · 대시보드 spending limit
    • · 키가 GitHub에 없는지
    • · 브라우저 Network 탭에 키 노출 없는지
    막히면 다시 넣을 프롬프트
    API 401/429. provider: [   ], max_tokens: [   ], 에러 본문: [   ]. 한도·키 rotate 순서.

    용어 한 줄

    API Key
    AI 서비스에 요청할 때 쓰는 비밀번호 같은 문자열
    max_tokens
    답변 최대 길이 — 길수록 비용 증가
  • 결제

    결제는 됐는데 권한이 안 열리거나 두 번 청구될 때

    결제 성공 화면만 보고 권한을 열었다가, 웹훅·환불·중복 클릭에서 사고가 나는 상황을 막습니다.

    AI에게 먼저 이렇게 시키세요
    Stripe(또는 토스) 결제 전 webhook 테스트 흐름. test key·webhook URL·로컬 stripe listen·성공/실패 이벤트 처리 순서.

    사람이 직접 확인할 것

    • · test/live 키 분리
    • · webhook signing secret
    • · 실결제 전 약관·환불 문구
    막히면 다시 넣을 프롬프트
    결제 webhook 400. payload: [요약], signing secret 위치: [   ]. idempotent 처리 여부.

    용어 한 줄

    webhook
    결제사가 우리 서버로 ‘결제됐다’고 보내는 알림
    test mode
    가짜 카드로 돈 안 나가게 테스트하는 모드
  • 자동화

    자동 실행이 겹쳐서 같은 일을 두 번 돌릴 때

    Vercel Cron·GitHub Actions가 같은 작업을 겹쳐 돌리거나 API·DB 비용이 한순간에 커진 상황을 막는 순서입니다.

    AI에게 먼저 이렇게 시키세요
    Vercel cron으로 /api/cron/job을 매일 호출합니다. vercel.json crons·CRON_SECRET·실패 재시도 1회·비용 나는 API 호출 제거 체크리스트.

    사람이 직접 확인할 것

    • · cron이 DB 전체를 매번 훑지 않는지
    • · 재시도 무한 루프 없는지
    • · CRON_SECRET 헤더 검증
    막히면 다시 넣을 프롬프트
    cron 401/timeout. path: [   ], duration: [   ]s, 로그: [   ]. maxDuration·배치 크기 조정.

    용어 한 줄

    cron
    정해진 시간에 자동으로 돌아가는 예약 작업
    CRON_SECRET
    우리 API만 cron이 호출하게 막는 비밀 문자열
  • DB 연결 상태
    DATABASE_URL연결됨
    tablerowsstatus
    users128ok
    orders42ok

    이걸 만들면 연결 성공/실패·테이블이 한눈에 보이는 점검 화면이 됩니다.

    배포

    DB 연결이 로컬만 되고 배포에서 터질 때

    집에서는 붙는데 배포만 timeout·permission denied가 날 때 URL·SSL·방화벽·권한·연결 풀 순서로 좁힙니다.

    AI에게 먼저 이렇게 시키세요
    Prisma + Postgres connection failed. DATABASE_URL 형식·SSL ?sslmode=require·Vercel env·prisma db push 순서.

    사람이 직접 확인할 것

    • · 로컬/프로덕션 DB URL 분리
    • · 연결 pool 한도
    • · 마이그레이션 백업
    막히면 다시 넣을 프롬프트
    Prisma P1001/P1017. URL 호스트: [   ], SSL: [   ], serverless 여부: [   ].

    용어 한 줄

    DATABASE_URL
    DB 접속 주소 전체(비밀번호 포함)를 담는 env
    migration
    DB 테이블 구조를 바꾸는 변경 기록
  • 파일 업로드
    IMG

    profile.png · 1.2MB

    저장됨 · /uploads/…

    이걸 만들면 이미지 선택·업로드·보관 URL 화면이 생깁니다.

    AI API

    이미지 업로드는 됐는데 새로고침하면 사라질 때

    업로드는 성공한 듯한데 새로고침 후 파일이 없거나, 배포에서 413·권한 오류가 나는 상황을 순서대로 풉니다.

    AI에게 먼저 이렇게 시키세요
    Next.js 이미지 업로드를 Vercel Blob에 붙입니다. route·2MB 제한·MIME 검증·공개 URL 반환·env 이름.

    사람이 직접 확인할 것

    • · 버킷 공개 범위
    • · 업로드 용량 한도
    • · 스토리지 월 비용
    막히면 다시 넣을 프롬프트
    업로드 413/500. 파일 크기: [   ], MIME: [   ], provider: [   ]. CORS·권한.

    용어 한 줄

    storage
    이미지·파일을 저장하는 클라우드 공간
    MIME
    파일 종류(jpeg/png 등)를 구분하는 표시
env·redirect URI·webhook·storage 용어부터 보기

막히기 전에 용어부터

전문용어를 쉬운 말로 — 그다음 실행 프롬프트.

  • Environment variables

    이건 env(환경변수)입니다

    비밀값·설정을 코드 밖에 두는 칸입니다. 로컬은 .env.local, 배포는 Vercel Environment Variables.

    • 비밀은 Git에 커밋하지 않습니다
    • 로컬과 배포 값이 다르면 ‘로컬만 됨’이 납니다
    • 이름만 같아도 값이 비면 500이 납니다

    이런 곳에 · OAuth secret · DATABASE_URL · API Key · CRON_SECRET

    지금 할 일 · .env.example에 이름만 적고, 실제 값은 .env.local에만

    비용·주의 · 잘못된 env로 무한 재시도하면 API 비용이 늘 수 있습니다.

    AI 프롬프트 보기
    Next.js + Vercel env 점검. 로컬은 되는데 배포만 실패. 필요한 키 목록(값 제외), Production 탭 확인 순서.
  • Redirect URI

    이건 redirect URI입니다

    구글·카카오 로그인 후 ‘우리 사이트로 돌아올 주소’입니다. 글자 하나라도 다르면 로그인이 깨집니다.

    • 콘솔에 등록한 주소와 실제 요청 URL이 같아야 합니다
    • http/https · www · 끝 슬래시까지 맞춥니다
    • 로컬과 배포 URL을 각각 등록합니다

    이런 곳에 · Google/Kakao/Naver OAuth · /ai/guides OAuth 가이드

    지금 할 일 · 콘솔 Redirect URI에 http://localhost:3000/api/auth/callback/... 등록

    비용·주의 · OAuth 자체는 무료. 잘못된 콜백으로 재시도만 늘지 않게.

    AI 프롬프트 보기
    redirect_uri_mismatch. 등록 URI: [   ], 실제: [   ]. NextAuth 설정과 콘솔을 대조하는 체크리스트.
  • Webhook

    이건 webhook입니다

    결제사·외부 서비스가 ‘이벤트 생겼어’라고 우리 서버에 보내는 알림 URL입니다.

    • 테스트 모드와 라이브 키를 섞지 않습니다
    • 서명(signing secret)으로 위조 요청을 거릅니다
    • 같은 알림이 두 번 와도 한 번만 처리합니다

    이런 곳에 · Stripe/토스 결제 · 자동화 알림 · /ai/guides 결제 가이드

    지금 할 일 · 테스트 webhook URL 등록 → 테스트 결제 1회 → 로그에 이벤트 확인

    비용·주의 · 테스트는 무료. 라이브 키로 실결제·수수료 주의.

    AI 프롬프트 보기
    Stripe(또는 토스) webhook 테스트. test key, signing secret, idempotent 처리, 실패 시 재시도 주의.
  • Object storage

    이건 storage(파일 저장소)입니다

    이미지·파일을 서버 디스크 대신 클라우드에 두는 공간입니다. 업로드 → URL 반환.

    • 용량·MIME(파일 종류)을 서버에서 검사합니다
    • 공개 버킷인지 비공개인지 정합니다
    • 악성 실행 파일 업로드를 막습니다

    이런 곳에 · 프로필 이미지 · 업로드 가이드 · Vercel Blob/S3

    지금 할 일 · 2MB·image/jpeg만 허용하는 업로드 route 1개 만들기

    비용·주의 · GB·요청 수에 따라 과금. 대용량·반복 업로드 주의.

    AI 프롬프트 보기
    Next.js + Vercel Blob 업로드. 2MB 제한, MIME 검증, 에러 메시지, env 이름.
  • API Key

    이건 API Key입니다

    AI 서비스에 ‘나’라고 증명하는 비밀번호 문자열입니다. 브라우저·GitHub에 올리면 남의 과금이 됩니다.

    • 서버 환경 변수에만 저장합니다
    • NEXT_PUBLIC_ 접두사에 키를 넣지 않습니다
    • 유출되면 즉시 rotate(재발급)합니다

    이런 곳에 · OpenAI·DeepSeek·Gemini·Anthropic 모든 API 호출

    지금 할 일 · .env.local에 KEY=... → .gitignore 확인 → 서버 route에서만 읽기

    비용·주의 · 키 유출 = 타인 사용량 과금. 한도·알림을 먼저 켭니다.

    AI 프롬프트 보기
    Next.js에서 API Key가 클라이언트 번들에 안 나가게 점검. .env 규칙, git grep 패턴, rotate 순서.