시니어 엔지니어가 분석한 '바이브 코딩' 앱 25개의 공통적인 문제점들
Reviewed 25 vibe-coded apps as a senior engineer. Here's what I found in all of them.
핵심 요약
AI로 대충 만든 앱들에서 반복적으로 발견되는 보안 및 성능 결함들을 시니어 엔지니어 관점에서 정리함.
- 보안 취약점 — 환경 변수 노출 및 RLS 설정 미흡으로 인한 데이터 유출 위험.
- 성능 저하 — N+1 쿼리 및 비효율적인 DB 접근으로 인한 확장성 문제.
- 예외 처리 부재 — 해피 패스 외의 에러 상황에 대한 대응 로직 전무.
- 권한 관리 미흡 — 로그인 여부만 확인하고 실제 기능별 권한 체크 누락.
11년 차 소프트웨어 엔지니어링 매니저로서 지난 몇 달간 호기심에 바이브 코딩으로 만든 앱들을 리뷰해봤는데, 스택과 상관없이 똑같은 문제들이 계속 나타나더군요. 모든 앱에서 발견한 공통점은 다음과 같습니다.
1. 리포지토리에 커밋된 인증 토큰
Supabase 키, OpenAI 키, Stripe 시크릿 등이 포함된 환경 변수가 .env 파일에 그대로 남아 푸시되어 있었습니다. 키 하나만 유출되어도 데이터베이스 전체가 노출되거나 3,000달러짜리 API 요금 폭탄을 맞을 수 있습니다.
2. 최소 하나 이상의 테이블에서 잘못 설정된 RLS
Supabase의 RLS(Row Level Security)는 켜져 있지만, 최소 하나 이상의 테이블에서 정책이 너무 광범위하거나 아예 누락되어 있습니다. 누군가 다른 사용자의 데이터를 읽을 수 있다는 걸 알아차리기 전까지는 앱이 잘 작동하는 것처럼 보이죠.
3. 모든 엔드포인트에 속도 제한(Rate Limiting) 없음
모든 API 경로가 완전히 열려 있습니다. 루프를 도는 스크립트 하나만 실행해도 전체 시스템이 다운되거나 몇 분 만에 클라우드 비용이 치솟을 수 있습니다.
4. 해피 패스(Happy Path)를 벗어난 에러 처리 부재
AI는 모든 게 잘 돌아갈 때만 작동하는 코드를 짭니다. 서드파티 API 타임아웃이나 데이터베이스 쓰기 오류가 발생하면 이를 잡아낼 장치가 전혀 없습니다. 그냥 조용히 실패할 뿐이죠.
5. N+1 쿼리 및 극도로 비효율적인 데이터베이스 접근
사용자가 10명일 때는 잘 돌아가다가 1,000명이 되면 완전히 뻗어버립니다. AI가 생성한 코드는 루프 안에서 관련 데이터를 가져오거나, 렌더링할 때마다 반복적으로 데이터베이스를 호출하거나, 인덱싱을 완전히 건너뛰는 경우가 많습니다. 결국 페이지 하나가 수백 개의 불필요한 쿼리를 날리게 되고, 부하가 걸리면 응답 속도가 폭발적으로 느려집니다.
6. 로그인 외의 권한 확인 절차 없음
많은 바이브 코딩 앱들이 "사용자가 로그인했는가?"는 제대로 확인하지만, "이 사용자가 이 작업을 수행할 권한이 있는가?"는 전혀 체크하지 않습니다. 소유권 및 역할 확인이 제대로 구현되지 않아 사용자가 요청의 ID를 수정해 관리자 기능에 접근하거나, 다른 사용자의 기록을 보거나, 유료 기능을 공짜로 쓰는 경우가 허다합니다.
이런 문제들은 일단 존재를 알게 되면 고치기 어렵지 않습니다. 문제는 사용자 앞에서 무언가 터지기 전까지는 눈에 보이지 않는다는 거죠. 출시 전에 QodeShark(우리 팀이 만든 것)나 Qodo로 코드를 감사해보는 것도 좋은 방법일 겁니다.
도움이 되었다면 질문 환영합니다.

