v0 + Cursor AI 워크플로: UI 프로토타입부터 Next.js 배포까지 역할 분담이 속도를 바꾼다
솔직히 말하면, 대시보드 UI 하나 만드는 데 며칠 걸리던 작업이 몇 시간으로 줄어든 건 두 도구를 같이 쓰기 시작한 다음부터였습니다. 처음엔 "AI 코딩 도구 하나만 써도 충분하지 않나?" 싶었거든요. v0는 UI를 뚝딱 만들어주는데 그 코드를 실제 프로젝트에 녹여넣는 순간부터는 혼자 낑낑대야 했고, Cursor는 기존 코드베이스를 잘 이해하는데 빈 화면에서 "로그인 폼 하나만 만들어줘" 같은 요청은 어쩐지 오버스펙처럼 느껴졌습니다.
두 도구를 같이 쓰면서 흐름이 달라졌습니다. v0는 UI 초안 생성기로, Cursor는 전체 코드베이스 통합 환경으로 역할을 분리하니 서로의 빈틈을 채워주더라고요. 비즈니스 로직이나 데이터 연동 같은 진짜 어려운 부분에 시간을 더 쓸 수 있게 된 게 가장 큰 변화였습니다. 이 글에서는 v0 + Cursor AI 조합의 역할 분담 원칙, 실제 워크플로, 그리고 현장에서 자주 마주치는 함정까지 솔직하게 풀어드립니다.
핵심 개념
두 도구는 경쟁 관계가 아닙니다
v0와 Cursor를 처음 접하는 분들이 가장 많이 하는 질문이 "둘 중 뭘 써야 해요?"입니다. 그런데 이 질문 자체가 틀렸습니다. 두 도구는 영역이 다릅니다.
| 도구 | 주 역할 | 강점 | 약점 |
|---|---|---|---|
| v0.app | AI 기반 UI 생성·프로토타이핑 | 자연어 → React 컴포넌트 즉시 생성, 빠른 이터레이션 | 기존 코드 리팩토링 불가, 데이터 모델 이해 부족 |
| Cursor AI | AI 통합 코드 에디터 | 코드베이스 전체 맥락 이해, 멀티파일 편집 | 빈 화면 UI 스캐폴딩은 v0보다 느림 |
v0.app: Vercel이 개발한 AI 기반 UI 생성 플랫폼. 자연어 프롬프트나 스크린샷을 입력하면 shadcn/ui + Tailwind CSS 기반의 React 컴포넌트를 즉시 생성해준다. v0.dev라는 이름으로 알려져 있었으며, 현재는 v0.app으로 전환해 단순 UI 생성기를 넘어 풀스택 에이전틱(agentic) 빌더로 진화했다고 알려져 있다.
Cursor AI: VS Code 포크 기반의 AI 통합 코드 에디터. Composer 에이전트, 인라인 자동완성, 멀티파일 편집을 지원하며, 코드베이스 전체 맥락을 이해하는 게 가장 큰 강점이다.
기술 스택 호환성이 조합의 핵심입니다
두 도구가 시너지를 내는 이유 중 하나는 기본 스택이 일치한다는 점입니다.
- v0 기본 출력: React + shadcn/ui + Tailwind CSS + TypeScript
- Cursor 권장 스택: 동일
v0에서 생성한 컴포넌트를 Cursor 프로젝트에 붙여넣으면 대부분 별다른 수정 없이 동작합니다. 처음엔 "설마 이렇게 딱 맞겠어?" 싶었는데, 실제로 해보면 생각보다 훨씬 매끄럽게 붙습니다. 이게 가능한 핵심에는 shadcn/ui가 있습니다.
shadcn/ui: Radix UI 기반의 컴포넌트 라이브러리. npm 패키지가 아니라 컴포넌트 코드를 직접 프로젝트에 복사해 쓰는 방식이라, v0에서 생성한 코드와 로컬 프로젝트의 컴포넌트가 자연스럽게 호환된다. 두 도구 사이의 "접착제" 역할을 하기 때문에 코드 이동이 이렇게 매끄러운 것이다.
실전 적용
개념은 충분히 살펴봤으니, 이제 실제로 어떻게 쓰는지 보여드리겠습니다. 아래 세 예시는 실무에서 흔히 겪는 상황들을 순서대로 담았습니다. 예시 1에서 대시보드 초안을 만들고, 예시 2에서 팀 규칙을 Cursor에 인코딩하고, 예시 3에서 디자인 화면을 코드로 바꾸는 흐름입니다.
예시 1: MVP 대시보드를 하루 만에 만드는 흐름
기획 요건이 나왔고 "빨리 화면 보여줘야 해"라는 압박이 오는 그 상황. 실무에서 가장 자주 맞닥뜨리는 순간입니다.
1단계 — v0.app에서 UI 초안 생성
v0.app에 접속해서 자연어로 프롬프트를 입력하면 됩니다.
사이드바가 있는 관리자 대시보드. 왼쪽 사이드바에는 홈, 사용자 관리, 주문 내역, 설정 메뉴.
메인 영역 상단에는 총 매출, 신규 사용자, 주문 수, 반품률 4개의 통계 카드.
그 아래 최근 주문 목록 테이블. 다크 모드 지원.shadcn/ui 기반 컴포넌트가 빠르게 완성됩니다. 마음에 안 드는 부분은 추가 프롬프트로 이터레이션하면 됩니다.
2단계 — Cursor 프로젝트로 임포트
v0에서 생성한 코드를 직접 복사해서 Cursor 프로젝트에 붙여넣습니다. 먼저 shadcn/ui가 설치되어 있어야 합니다.
npx shadcn@latest init
npx shadcn@latest add card table
sidebar는 shadcn/ui 공식 CLI로 바로 추가되는 단일 컴포넌트가 아닙니다. v0에서 생성된 사이드바 코드를 직접components/ui/sidebar.tsx에 복사해서 사용하는 것이 더 안전합니다.
3단계 — Cursor Composer로 데이터 연동
Cursor의 Composer 에이전트(단축키 Cmd+I / Windows는 Ctrl+I)를 열고 컨텍스트를 명시합니다.
처음엔 @파일명 태깅을 몰라서 크레딧을 꽤 날렸습니다. 관련 파일만 콕 찍어주는 게 포인트입니다.
@app/dashboard/page.tsx @lib/api.ts @types/dashboard.ts
대시보드 페이지에서 /api/stats 엔드포인트를 호출해서
통계 카드 데이터를 실제로 연결해줘.
타입은 @types/dashboard.ts에 정의된 DashboardStats를 사용해.생성 코드 예시:
// app/dashboard/page.tsx
import { StatCard } from "@/components/ui/stat-card";
import { DashboardStats } from "@/types/dashboard";
import { AppError } from "@/lib/errors";
async function getDashboardStats(): Promise<DashboardStats> {
const res = await fetch(`${process.env.API_URL}/api/stats`, {
next: { revalidate: 60 },
});
if (!res.ok) throw new AppError("Failed to fetch stats", 500);
return res.json();
}
export default async function DashboardPage() {
const stats = await getDashboardStats();
return (
<div className="grid grid-cols-4 gap-4">
<StatCard title="총 매출" value={stats.totalRevenue} />
<StatCard title="신규 사용자" value={stats.newUsers} />
<StatCard title="주문 수" value={stats.orderCount} />
<StatCard title="반품률" value={`${stats.returnRate}%`} />
</div>
);
}| 코드 포인트 | 설명 |
|---|---|
next: { revalidate: 60 } |
Next.js ISR(Incremental Static Regeneration) 설정. 60초마다 서버에서 데이터를 새로 가져오면서 캐시 이점도 유지 |
async function getDashboardStats() |
Server Component에서 직접 데이터 페칭. 클라이언트에서 별도 상태 관리 없이 서버 렌더링 전에 데이터를 가져옴 |
AppError |
예시 2에서 정의할 팀 에러 처리 표준을 일관성 있게 적용한 예시 |
process.env.API_URL |
환경변수로 엔드포인트 관리 — Vercel 대시보드에서 주입 가능 |
Server Component: Next.js App Router에서 기본 컴포넌트 타입. 서버에서 렌더링되므로 데이터베이스·API 직접 접근이 가능하고, 클라이언트로 JavaScript 번들을 보내지 않아 성능이 좋다.
'use client'를 선언하지 않으면 기본적으로 Server Component로 동작한다.
예시 2: Cursor 규칙 파일로 팀 컨텍스트 고정하기
Cursor의 아킬레스건 중 하나가 세션 컨텍스트입니다. 새 세션을 열 때마다 "우리 프로젝트는 이런 구조야"를 다시 설명해야 한다면 비효율적이고 크레딧도 낭비됩니다.
Cursor 0.43 버전부터 이전의 단일 .cursorrules 파일 방식은 레거시로 분류됐습니다. 현재 권장하는 방식은 .cursor/rules/ 디렉토리 안에 .mdc 파일을 역할별로 분리해서 작성하는 것입니다.
.cursor/
rules/
coding-standards.mdc
project-structure.mdc
v0-integration.mdc각 파일은 마크다운 형식으로 작성합니다.
<!-- .cursor/rules/coding-standards.mdc -->
# 코딩 표준
## 기본 설정
- Next.js App Router 사용
- Server Component 기본, 상태 관리가 필요한 경우에만 'use client' 선언
- 데이터 페칭은 Server Component에서 직접 fetch, React Query는 클라이언트 전용
## 컴포넌트 위치
- UI 컴포넌트: app/components/ui/ (shadcn/ui 복사본)
- 기능 컴포넌트: app/components/features/
- 페이지 컴포넌트: app/(routes)/
## 코딩 규칙
- TypeScript strict mode 필수
- async/await 사용, .then() 지양
- 에러 처리: lib/errors.ts의 AppError 클래스 사용<!-- .cursor/rules/v0-integration.mdc -->
# v0 통합 규칙
- v0에서 가져온 컴포넌트는 components/ui/에 배치
- 타입 추가 및 실제 데이터 연동은 반드시 코드 리뷰 후 진행
- v0 생성 코드는 feature/v0-* 브랜치에서 먼저 검토팀 전체가 동일한 코딩 표준을 AI에게 인지시키는 효과도 있습니다. 새 팀원이 들어와도 Cursor가 이 규칙을 읽고 일관된 제안을 해줍니다. 예시 1의 AppError 사용이 일관성 있게 유지되는 것도 이 덕분입니다.
예시 3: 스크린샷 → 코드 변환으로 디자인 이식하기
Figma 디자인이 있거나 참고할 화면이 있다면 v0에 이미지를 직접 업로드할 수 있습니다. 기획서 스크린샷을 찍어서 올리면 그 레이아웃을 기반으로 컴포넌트를 생성해줍니다.
[스크린샷 첨부]
이 화면과 동일한 레이아웃으로 React 컴포넌트를 만들어줘.
색상은 브랜드 컬러인 #2563EB(파란색)와 #F8FAFC(배경)으로 바꿔줘.
shadcn/ui와 Tailwind CSS 사용.완벽하게 일치하진 않지만 80% 수준의 초안이 나옵니다. 이 초안을 예시 1에서 만든 대시보드 프로젝트로 가져와서 Cursor로 나머지 20%를 채우는 게 처음부터 코드를 짜는 것보다 훨씬 빠릅니다.
장단점 분석
장점
| 항목 | 내용 |
|---|---|
| 초기 개발 속도 | UI 초안을 분 단위로 생성. 픽셀 단위 CSS 작업 시간 대폭 절감 |
| 역할 분리의 명확함 | v0는 고립된 UI 생성, Cursor는 전체 코드베이스 이해 — 서로 역할이 겹치지 않아 상호 보완적 |
| 기술 스택 호환성 | 두 도구 모두 shadcn/ui + Tailwind + Next.js를 기본 스택으로 삼아 코드 호환성이 높음 |
| Vercel 생태계 연동 | v0 → Vercel 배포 원클릭, Cursor 내 Vercel CLI 연동으로 배포 파이프라인 단순화 |
| 비용 대비 생산성 | v0 $10/월 + Cursor $20/월 수준으로 루틴 UI 코딩 작업 시간을 크게 단축 가능 |
단점 및 주의사항
| 항목 | 내용 | 대응 방안 |
|---|---|---|
| v0의 범위 제한 | 기존 코드 리팩토링 불가, 데이터 모델 이해 부족 | UI 생성 이후 로직은 Cursor에서 처리 |
| Cursor 세션 컨텍스트 초기화 | 세션 종료 시 프로젝트 컨텍스트 리셋 | .cursor/rules/ 파일로 팀 표준 고정 |
| AI 코드 품질 편차 | 기존 기능을 깨뜨리거나 타입이 any로 생성되는 경우 존재. 실제로 몇 번 당해봤습니다 |
프로덕션 반영 전 코드 리뷰 필수 |
| 디자인 시스템 불일치 | 커스텀 디자인 시스템과 첫 프롬프트에서 완벽 일치 어려움 | 이터레이션으로 점진적 수정, 나머지는 Cursor에서 보완 |
| 크레딧 소모 급증 | 컨텍스트를 넓게 잡으면 크레딧 소모가 빠름. 한 달 요금이 예상보다 두 배 나온 적도 있습니다 | @파일명 태깅으로 관련 파일만 명시적 지정 |
| 통합 오버헤드 | v0 출력 코드를 기존 빌드 프로세스에 수동 통합해야 하는 경우 발생 | feature 브랜치로 분리 관리 |
에이전틱(Agentic) 빌더: 단순히 코드를 생성하는 것을 넘어 계획 수립, 에러 수정, 외부 API/DB 연동, 배포까지 자율적으로 수행하는 AI 도구를 의미한다.
바이브 코딩(Vibe Coding): 정밀한 명세 없이 자연어 대화만으로 앱을 구축하는 개발 방식. v0 + Cursor 조합이 대표적인 바이브 코딩 스택으로 꼽힌다.
크레딧(토큰): Cursor는 AI 요청에 사용되는 리소스를 크레딧(내부적으로는 토큰) 단위로 과금한다. 컨텍스트에 포함하는 파일이 많을수록 크레딧 소모가 늘어나므로, 관련 파일만 선택적으로 지정하는 것이 중요하다.
실무에서 가장 흔한 실수
-
v0 생성 코드를 검토 없이 바로 main에 머지하는 것 — AI가 만든 코드는 타입이
any로 들어가거나, 접근성 속성이 빠지거나, 기존 전역 스타일과 충돌하는 경우가 생각보다 자주 있습니다. feature 브랜치를 따로 만들고 리뷰를 거치는 것을 권장합니다. -
v0와 Cursor에서 동시에 같은 컴포넌트를 수정하는 것 — v0에서 UI를 계속 다듬으면서 Cursor에서도 같은 파일을 수정하면 충돌이 납니다. "v0에서 초안 확정 → Cursor로 이관" 순서를 지키면 훨씬 깔끔합니다.
-
Cursor에서 파일 전체를 컨텍스트로 넣는 것 — "프로젝트 전체 봐줘" 방식은 크레딧을 빠르게 소진하고 엉뚱한 제안(할루시네이션)도 늘어납니다.
@파일명으로 관련 파일만 콕 찍어주는 습관이 크레딧과 코드 품질 모두를 아껴줍니다.
마치며
v0 + Cursor AI 조합의 핵심은 두 도구를 경쟁시키는 게 아니라, UI 생성과 코드베이스 통합이라는 서로 다른 역할에 배치하는 것입니다.
솔직히 이 워크플로가 모든 상황에 맞지는 않습니다. 복잡한 커스텀 디자인 시스템이 있거나, 레거시 코드가 많은 환경에서는 v0가 만든 코드를 붙이는 작업 자체가 더 오래 걸릴 수 있습니다. 하지만 새 프로젝트나 기능 프로토타이핑 단계라면, 80점짜리 초안을 빠르게 뽑고 나머지 20점을 채우는 이 흐름은 확실히 효과가 있습니다. 처음 몇 번은 어색했는데, 두세 번 해보니 금방 자연스러워졌습니다.
지금 바로 시작해볼 수 있는 3단계:
- v0.app에서 첫 컴포넌트를 생성해보기 — "로그인 폼, 이메일+비밀번호 입력, 구글 소셜 로그인 버튼, 다크 모드 지원" 같은 간단한 프롬프트면 충분합니다.
.cursor/rules/디렉토리 추가하기 — 프로젝트의 폴더 구조, 사용 중인 라이브러리, 코딩 컨벤션을.mdc파일로 정리해두면 Cursor의 제안 품질이 눈에 띄게 달라집니다.- v0 생성 컴포넌트를 feature 브랜치로 관리하기 —
git checkout -b feature/v0-dashboard-ui처럼 v0에서 가져온 코드는 별도 브랜치에서 리뷰 후 머지하는 습관을 들여두면 나중에 혼란이 없습니다.
참고 자료
공식 문서
외부 아티클
- How we build apps with AI: V0 + Cursor 2.0 | WeAreBrain
- How to Integrate V0.dev with Cursor: A Complete Guide | Bitcot
- v0.dev vs Cursor AI: Full Comparison, Use Cases, and Best Choice | Bitcot
- V0 vs Cursor: Best AI code generator comparison for 2026 | ToolJet Blog
- Building a Next.js Project with v0, ShadCN, and Cursor | Design+Code
- Vibe Coding a Real Site with AI, Vercel V0, and Cursor | Carl Topham
- Cursor AI, v0, and Bolt.new: An Honest Comparison | Carl Rannaberg
- 프론트엔드 팀이 Cursor AI로 코드 리뷰를 자동화한 적용기 | W컨셉 기술블로그
- v0 by Vercel: Hands-On Guide to AI UI Generation | vife.ai
- Cursor AI 2025 완전 가이드 | youngju.dev (개인 블로그)