제공 서비스
웹 보안 점검 소스코드 분석 (SAST) CRM 보안 진단 다크웹 유출 조회
요금제 스토어 블로그 파트너 마이페이지 무료 보안 점검
바이브코딩 2026.04.16 · 조회 1091

Vercel·Replit 배포할 때 놓치는 보안 설정 7가지

Vercel이나 Replit에서 "Deploy" 버튼 누르기 전에 확인해야 할 보안 설정. 기본값이 안전하지 않은 항목만 골랐다.

"Deploy" 한 번이면 전 세계에 공개된다

Vercel이나 Replit은 배포가 놀라울 정도로 쉽다. AI에게 코드를 만들게 하고 깃허브에 푸시하면 자동 배포. 문제는 기본 설정이 "동작"에 최적화되어 있지, "보안"에 최적화되어 있지 않다는 점이다.

바이브코더들이 배포 후 가장 많이 듣는 말: "사이트 잘 되는데요, 근데 이거 다 열려있어요."

Vercel 배포 시 놓치는 것

1. 환경변수에 NEXT_PUBLIC_ 접두사 남용

Vercel + Next.js 조합에서 NEXT_PUBLIC_으로 시작하는 환경변수는 브라우저에 그대로 노출된다.

# 위험 — 브라우저에서 보임
NEXT_PUBLIC_SUPABASE_SERVICE_KEY=eyJ...
NEXT_PUBLIC_OPENAI_API_KEY=sk-...

# 안전 — 서버에서만 접근 가능
SUPABASE_SERVICE_KEY=eyJ...
OPENAI_API_KEY=sk-...

AI에게 "Supabase 연동해줘"라고 하면 편의상 NEXT_PUBLIC_을 붙이는 경우가 많다. service_role 키에는 절대 붙이면 안 된다.

2. API Route에 인증 미들웨어 누락

Next.js의 /api/ 라우트는 기본적으로 인증 없이 누구나 접근 가능하다. AI가 만든 API 라우트에 인증 체크가 없는 경우:

// 취약 — 누구나 호출 가능
export async function POST(req) {
  const data = await req.json();
  await db.insert(data);  // 인증 없이 DB 쓰기
  return Response.json({ ok: true });
}

// 안전 — 세션 확인 후 처리
export async function POST(req) {
  const session = await getServerSession();
  if (!session) return Response.json({ error: 'Unauthorized' }, { status: 401 });
  const data = await req.json();
  await db.insert(data);
  return Response.json({ ok: true });
}

3. Preview 배포가 공개 상태

Vercel은 PR마다 프리뷰 URL을 자동 생성한다. 이 URL이 검색 엔진에 인덱싱되거나 외부에서 접근 가능한 경우가 있다. 프리뷰에 테스트 데이터, 관리자 기능이 포함되어 있으면 위험하다.

Settings → General → Deployment Protection에서 Preview 배포에 비밀번호를 설정하거나 Vercel Authentication을 켜야 한다.

Replit 배포 시 놓치는 것

4. Secrets가 포크에 복사됨

Replit에서 프로젝트를 공개(Public)로 설정하면 다른 사람이 포크할 수 있다. Secrets(환경변수)는 포크에 복사되지 않지만, 코드에 하드코딩된 값은 그대로 따라간다.

AI가 "빠르게 테스트해보자"며 코드에 직접 넣은 키가 있다면, 포크한 사람이 그 키를 갖게 된다.

5. .replit 파일의 run 명령어

.replit 파일에 run = "python main.py"가 설정되어 있으면, 방문자가 Run 버튼으로 서버를 실행할 수 있다. 의도치 않은 리소스 소비나 데이터 접근이 발생할 수 있다.

공통으로 놓치는 것

6. CORS 와일드카드

AI에게 "CORS 에러 해결해줘"라고 하면 십중팔구 이렇게 한다:

// AI의 기본 답변 — 전체 허용
res.setHeader('Access-Control-Allow-Origin', '*');

// 올바른 설정 — 내 도메인만 허용
const allowedOrigins = ['https://myapp.vercel.app', 'https://mydomain.com'];
const origin = req.headers.origin;
if (allowedOrigins.includes(origin)) {
  res.setHeader('Access-Control-Allow-Origin', origin);
}

7. 에러 페이지에 스택 트레이스 노출

개발 모드에서는 에러가 나면 파일 경로, 변수값, DB 쿼리가 화면에 뜬다. 배포할 때 NODE_ENV=production으로 바꿔야 하는데, AI가 이걸 빠뜨리는 경우가 있다.

배포 전 30초 점검

URL만 입력하면 위 항목을 포함한 17가지 보안 항목을 자동 점검한다. Vercel이든 Replit이든, 배포 후 한 번은 돌려봐야 한다.

내 사이트 보안 점검하기 (무료, 30초)

Vercel Replit 배포 보안 바이브코딩 체크리스트

내 사이트도 점검해보세요

CodeScan으로 보안 취약점을 무료로 점검할 수 있습니다.

무료 스캔 시작하기 →
🛒
추천 상품
웹서비스 런칭 전 보안 세팅
런칭 전에 반드시 해야 하는 보안 설정을 원격으로 직접 해드립니다. HTTPS, 환경변수 분리, 보안 헤더…
220,000원 150,000원

🔒 바이브코딩 보안 체크리스트 받기

바이브코딩 보안 체크리스트(PDF)를 무료로 받아보세요.