바이브 코딩으로 Cloudflare에서
홈페이지 만들기 완전 가이드 2026
처음부터 거대한 서비스를 만들지 않습니다. 호스팅, API, DB, 이미지 저장소, 캐시, 도메인, SSL을 한 곳에서 다루는 Cloudflare-first 흐름으로 공개 페이지를 먼저 빠르게 올리고, 진짜 필요한 기능만 Workers · D1 · Turso · R2 · KV로 하나씩 붙이는 실전 바이블입니다. AI에게는 반복 작업과 설정 초안을 맡기되, 계정 권한과 비밀값은 사람이 통제합니다.
실제 비밀값, 계정 ID, 결제 정보, 운영 토큰은 절대 채팅에 공개하지 않습니다. 모든 명령 실행 전 package.json, wrangler 설정, 공식 문서를 함께 확인하세요.
- Part 1 (01~04p): Cloudflare Stack Map(11종), 새 기준(01), 사이트 범위 및 전환 목표(02·13)
- Part 2 (05~07p): 도메인·DNS·SSL(03), Wrangler CLI(04), AI 권한 위임(05), Astro·Functions·비밀값(06~08)
- Part 3 (08~11p): D1·Turso 운영 데이터 분담(09), R2 파일·KV 캐시(10~11), 인터랙티브 아키텍처 매퍼
- Part 4 (12~16p): 바이브 코딩 루프·검증·배포·품질·운영·트러블슈팅(12~18), 가격·단점·딸깍 프롬프트·철학(19~22)
- Part 5 (17~19p): 실무 이점 — 무료·$5 시작점, 워드프레스 없이, D1·CDN·DDoS·원가 도메인·R2, PayPal·요금 알림·분석·보안 메일
이 글에서 쓰는 Cloudflare · 보완 서비스 11종 한눈에 보기
필수 Cloudflare 서비스와 Turso 같은 보완 서비스를 먼저 구분해 두면 D1, R2, KV, Workers 바인딩 설명이 훨씬 쉽게 읽힙니다
| 구분 | 서비스 | 역할 및 쓰는 곳 | 핵심 특징 |
|---|---|---|---|
| 필수 | Workers | 서버 코드·API 실행 (문의 폼, SSR, 웹훅, 외부 API 중계) | 글로벌 엣지 서버리스 런타임. Node 전용 파일시스템 패키지 주의 |
| 필수 | Static Assets / Pages | 정적 사이트 배포 (홈, 소개, 포트폴리오, 칼럼, 매장 안내) | HTML/CSS/JS를 CDN 배포. 기존 Pages 유지, 신규는 Static Assets 검토 |
| 필수 | Wrangler CLI | 생성·설정·배포 리모컨 (로그인, 리소스 생성, 로컬·배포) | AI가 명령을 제안하고 사람이 승인하는 루프의 핵심 도구 |
| 필수 | Bindings & Secrets | 코드와 리소스 연결 (env.DB, env.MEDIA, 비밀값) |
이름 불일치 시 배포 후 런타임에서 깨지므로 표로 엄격 관리 |
| 확장 | Durable Objects | 상태 저장 조정 계층 (채팅방, 협업 편집, 실시간 방, 락) | 특정 ID 상태를 단일 객체로 모음. 실시간 기능 필요 시 도입 |
| 확장 | Queues / Hyperdrive | 비동기 작업 큐(메일·후처리) / 외부 Postgres·MySQL 가속 | 오래 걸리는 작업을 뒤로 넘기거나 Supabase·Neon 연결 시 활용 |
| 구분 | 서비스 | 이 글에서 쓰는 곳 | 핵심 특징 및 운영 포인트 |
|---|---|---|---|
| 필요 시 | D1 | 문의, 예약, 게시글 메타데이터, 포트폴리오 항목, 작은 CRM | SQLite 계열 서버리스 DB. rows read/write와 인덱스 설계가 비용·성능 직결 |
| 운영 보완 | Turso | 방문 로그, 이벤트 누적, 통계 집계처럼 빠르게 늘어나는 데이터 | 외부 libSQL/SQLite 계열. 네이티브 바인딩 대신 HTTP/SDK와 secret 관리 필요 |
| 필요 시 | R2 | 이미지 원본, 첨부파일, PDF, 다운로드 자료, 백업 파일 | S3 호환 오브젝트 저장소. 인터넷 Egress 무료가 강점, 공개/비공개 정책 설계 |
| 필요 시 | KV | 공지 배너, 기능 플래그, 리다이렉트, 읽기 많은 설정값 | 자주 읽고 가끔 바뀌는 값에 최적. 결과적 일관성이므로 결제·재고 원본은 지양 |
01 새 기준 — 이전 스택(Next.js·Vercel·Supabase)과 다른 Cloudflare-First 제작 기준
콘텐츠 페이지는 Astro로 빠르게 정적 생성하고, 진짜 필요한 부분만 Workers · D1 · R2 · KV로 하나씩 확장합니다
예전 홈페이지 제작 가이드는 Next.js + Vercel + Supabase 조합을 기준으로 설명하는 경우가 많았습니다. 여전히 훌륭한 조합이지만, 개인 사이트나 작은 비즈니스 사이트에서는 호스팅, API, DB, 이미지 저장소, 캐시, 도메인, SSL을 한 대시보드에서 다루는 Cloudflare-first 흐름이 점점 더 편해졌습니다.
• DB/스토리지: Supabase
• 도메인/CDN: 별도 관리
→ 계정·과금·권한이 3곳으로 분산
• Functions/Workers + D1 + R2 + KV
• 도메인·DNS·SSL·캐시 단일 대시보드
→ 필요한 기능만 점진적으로 연결
처음부터 거대한 서비스를 만들지 않습니다. 공개 페이지를 먼저 만들고, 진짜 필요한 기능만 Cloudflare 서비스로 하나씩 붙이는 것이 바이브 코딩과 가장 잘 맞습니다.
홈, 소개, 칼럼, 안내 등 읽는 페이지는 정적 HTML로 만들어 CDN에서 가장 빠르게 제공합니다.
폼 제출, 알림 발송, 검증처럼 서버 처리가 꼭 필요한 지점만 가볍게 서버리스로 붙입니다.
사이트 동작과 밀접한 구조화 데이터는 SQLite 기반 서버리스 DB인 D1에 저장합니다.
용량이 큰 미디어는 R2로 코드 저장소와 분리하고, 자주 읽는 배너·설정값은 KV에 둡니다.
02 대상 정하기 & 13 첫 화면 템플릿 — 방문자의 '다음 행동'을 한 문장으로 정의하라
AI에게 "홈페이지 만들어줘"라고만 말하면 예쁜 화면만 나옵니다. 전환 목표에 맞춘 4대 사이트 유형별 필수 설계
누구인지 5초 안에 전달
단순 자기소개가 아니라 "무엇을 도와줄 수 있는 사람인지"가 첫 화면에 먼저 보여야 합니다.
• 대표 글/칼럼 목록
• 연락처 & 소셜 링크 허브
대표 작업물을 바로 확인
프로젝트 이미지와 실제 성과 수치가 먼저 보이고, 바로 의뢰·문의로 이어져야 합니다.
• 사용 기술 스택 & 성과 수치
• 하단 즉시 문의 폼 (D1 연동)
방문 · 예약 · 문의로 직결
모바일 첫 화면에서 전화, 길찾기, 예약, 영업시간을 헤매지 않고 바로 찾게 합니다.
• 영업시간 · 메뉴판(R2 PDF)
• 예약 폼 · 리뷰 · 자주 묻는 질문
한 가지 문제를 바로 해결
계산기, 신청 폼, 예약 확인, 간단한 관리자 화면처럼 단일 작업 완결에 집중합니다.
• 처리 결과 D1 저장
• 분리된 관리자 확인 라우팅
03 도메인·DNS·SSL 안정화 & 04 Wrangler CLI 작업 리모컨
기존 메일(MX/TXT) 레코드 보호 원칙과 AI가 제안하고 사람이 승인해 실행하는 Wrangler 터미널 루틴
Cloudflare에서 도메인을 관리하면 DNS, SSL, 캐시, 보안을 같은 대시보드에서 확인합니다. AI에게 DNS를 맡길 때는 화면을 직접 조작하게 하지 말고 현재 레코드를 사람이 확인한 뒤 추가할 레코드 계획만 제시하게 하세요.
- 루트 & 서브도메인 결정: 루트 도메인(
example.com)과www서브도메인을 모두 쓸지 초반에 정합니다. - 기존 메일·인증 레코드 절대 보존: 기존에 사용 중인
MX,TXT,SPF,DKIM레코드는 메일과 도메인 인증에 연결되어 있으므로 무심코 삭제하면 안 됩니다. - SSL 모드 점검: SSL은 기본값으로 시작하되, 외부 원본 서버가 따로 있다면 SSL 모드를 다시 확인합니다. Universal SSL 알림은 전 플랜에서 발급·갱신·만료를 메일로 받을 수 있습니다.
- 도메인 구입: Registrar는 레지스트리·ICANN 원가만 청구하고 마크업이 없습니다. TLD마다 금액이 달라 단일 가격으로 적지 않습니다. 자동 갱신이 기본입니다.
- 임시 주소 선행 QA: 커스텀 도메인으로 공개하기 전에 기본 제공되는 임시
.pages.dev주소로 먼저 QA를 마칩니다.
Wrangler는 Workers, Pages, D1, R2, KV를 터미널에서 만들고 배포하는 CLI입니다. AI가 "어떤 명령을 왜 실행해야 하는지" 먼저 설명하고, 사용자가 승인한 명령만 실행하는 루틴을 만드세요.
$ npx wrangler whoami
# 2. 로컬 빌드가 완전히 통과한 뒤에만 원격 배포 실행
$ npm run build && npx wrangler pages deploy ./dist
- 이름 규칙 일관성: 프로젝트 이름, DB 이름, 버킷 이름은 나중에 바꾸기 어렵기 때문에 처음부터 짧고 일관되게 정합니다.
- 비용·충돌 사전 확인: 원격 리소스를 생성하는 명령은 비용, 이름 충돌, 권한 문제와 직결되므로 계획을 먼저 확인합니다.
- 오류 전달 시 마스킹: 명령 실패 메시지는 AI에게 그대로 전달하되 토큰, 이메일, 내부 계정 ID는 반드시 가리고 전달합니다.
05 AI 권한 위임 & 08 비밀값 관리 — "비밀값과 파괴적 명령은 맡기지 않는다"
"모두 설정해줘"는 데이터 삭제와 배포 변경까지 열어줄 수 있습니다. AI와 사람의 역할 경계를 명확히 분리하세요
| 구분 | 담당 주체 | 구체적인 작업 범위 |
|---|---|---|
| AI 위임 가능 | AI 코딩 파트너 | 구조 계획 수립, 코드/설정 파일 수정, 실행할 CLI 명령 제안, 에러 로그 원인 분석 |
| 사람 직접 통제 | 사용자 (승인자) | Cloudflare 로그인, API 토큰 생성, 결제 정보, 리소스 삭제·purge, 운영 DB migration, 프로덕션 배포 |
- 최소 권한 토큰: API 토큰은 꼭 필요한 서비스와 계정 범위만 가진 최소 권한으로 생성합니다.
- 변수명만 공유: AI에게는 실제 토큰 값 대신
CLOUDFLARE_API_TOKEN같은 변수 이름만 알려줍니다. - 작업 후 즉시 정리: 삭제, purge, 원격 migration, production deploy는 실행 전 계획을 먼저 받고, 작업이 끝나면 임시 토큰을 폐기하거나 권한을 줄입니다.
로컬 개발에서는 .env.local로 읽고, 운영 배포에서는 Cloudflare Pages secrets나 Worker secrets에 저장합니다. Git 저장소에는 실제 값이 아닌 변수 이름과 예시만 남깁니다.
PUBLIC_SITE_URL="https://example.com"
RESEND_API_KEY="" # 서버 전용: 대시보드/Wrangler secret으로 등록
TURSO_AUTH_TOKEN="" # 절대 클라이언트에 노출 금지
- 클라이언트 vs 서버 전용 구분: 브라우저에 노출되는 변수와 서버(Functions/Workers) 전용 변수를 엄격히 분리합니다.
- 로그 마스킹: 로그에는 요청 본문 전체나 환경 변수 값이 아니라 필요한 상태와 오류 코드만 남깁니다.
- 유출 시 즉시 폐기: 결제 API, OpenAI API, 이메일 발송 키, Cloudflare 토큰은 한 번이라도 노출되면 즉시 폐기 후 재발급합니다.
06 Astro 콘텐츠 골격 & 07 Functions · Workers 서버 코드 위치 나누기
읽는 페이지는 정적 Astro로 가볍게 만들고, 상호작용 UI는 React 아일랜드로, 백엔드는 위치에 따라 Functions와 Workers로 분담합니다
홈페이지, 포트폴리오, 칼럼, 매장 소개처럼 읽는 페이지가 많은 사이트는 Astro가 가장 가볍습니다. 기본은 정적 HTML로 만들고, 검색·계산기·관리자 일부처럼 동작이 필요한 곳에만 React 컴포넌트를 섬(Island)처럼 붙입니다.
- 기존 vs 신규 배포 흐름: 기존 Pages 프로젝트는 Astro 빌드 결과물을 그대로 배포하고, 신규 프로젝트는 Cloudflare가 권장하는 Workers Static Assets 흐름도 함께 검토합니다.
- 초기 템플릿화: 공통 레이아웃, SEO, OpenGraph, 사이트맵은 처음부터 템플릿화합니다.
- 정적 자산 경로 정리: 이미지, 폰트, 썸네일 경로는
public또는R2기준으로 일관되게 정리합니다. - 관리자 라우팅 분리: 관리자 기능은 공개 페이지와 라우팅을 분리해 보안 및 운영 사고를 줄입니다.
AI에게 구현을 맡길 때 "이 기능은 페이지 근처 API(Pages Functions)인지, 독립 Worker인지 먼저 판단해 달라"고 지시하면 폴더 구조가 흐트러지지 않습니다. 처음엔 Pages Functions로 시작해 반복 작업이 많아질 때 Worker로 떼어내도 늦지 않습니다.
| 구현할 기능 | 추천 위치 | 선택 이유 |
|---|---|---|
| 문의 폼 저장 | Pages Functions | 페이지와 입력 UI가 바로 붙어 있어 함께 관리하기 편함 |
| 이미지 업로드 서명 | Pages Functions / Worker | R2 쓰기 권한과 서명 키를 서버 쪽에 안전하게 숨겨야 함 |
| 정기 리포트 · 크론 | 독립 Worker | Cron Triggers 스케줄과 백그라운드 비동기 작업에 적합 |
| 공통 API 게이트웨이 | 독립 Worker | 여러 사이트나 프론트엔드 프로젝트에서 공통으로 재사용 가능 |
09 D1 · Turso 운영 데이터 분담 — 왜 D1 단독이 아니라 Turso를 병용하는가?
D1의 DB당 10GB 한계와 rows 스캔 비용을 방어하기 위해 핵심 메타는 D1에, 누적 이벤트 로그는 Turso로 분리합니다
D1은 Worker나 Pages Function에서 env.DB 네이티브 바인딩으로 바로 접근하므로 문의, 예약 신청, 포트폴리오 항목, 공지, 관리자 메모처럼 사이트 동작과 가까운 관계형 데이터에 최적입니다.
D1은 "작은 DB를 많이 두는" 방향의 서비스입니다. Free는 DB당 500MB, Workers Paid는 DB당 10GB이며, 이 10GB 한계는 단일 DB에서 더 늘릴 수 없습니다. 방문 로그·클릭 이벤트·인기 순위 원천 로그까지 모두 D1에 넣으면 비용과 스캔량 관리가 급격히 어려워집니다.
- 초기 필수 컬럼:
created_at,updated_at,status컬럼을 초반부터 둡니다. - 소프트 삭제: 물리적
DELETE대신archived나status값을 쓰면 실수 복구가 쉽습니다. - 인덱스 & 사전 검증: 관리자 검색 컬럼에는 인덱스를 추가하고, 원격 migration 전 로컬/preview에서 먼저 검증합니다.
실제 운영 사이트 풋터에 보이는 Turso 병용이 바로 이 때문입니다. Turso는 외부 libSQL/SQLite 계열이라 D1과 SQL 사고방식이 비슷하면서도 누적 통계·로그·이벤트 부담을 완벽히 덜어줍니다.
• 문의 내역·예약 신청·세션
•
env.DB로 즉시 접근
• 빠르게 행 수가 늘어나는 원천 로그
• URL·토큰을 Secret 보관 후 HTTP/SDK 연결
10 R2 이미지·첨부파일 보관 & 11 KV 가벼운 설정·캐시 — 4대 저장소 완벽 비교
파일 원본은 Egress 무료인 R2에, 자주 읽는 공지 배너와 플래그는 KV에 두어 D1과 코드 저장소를 가볍게 유지합니다
- 이그레스: 공식 표기는 전 스토리지 클래스 Egress (data transfer to Internet): Free. Infrequent Access는 이그레스와 별도로 데이터 조회 요금이 있습니다.
- 접두어 규칙:
public/,original/,upload/,backup/같은 폴더 규칙을 정합니다. - 최적화 & 검증: 업로드 시 WebP·AVIF·썸네일 생성 여부를 정하고, 사용자 파일은 확장자와 MIME 타입을 서버에서 검증합니다.
- 안전한 접근: 공개 이미지는 CDN 캐시와 연결하고, 비공개 파일은 서명 URL이나 서버 API로 접근하며 삭제 시 확인 단계를 둡니다.
- 적합한 용도: 공지 노출 여부, 이벤트 배너, 기능 플래그, 외부 API 응답 캐시 등 자주 읽고 가끔 바뀌는 값에 씁니다.
- 원본 저장 금지: 모든 주문·예약·결제 내역 원본은 D1에 저장하고 KV에는 복사본이나 캐시만 둡니다 (만료 시간·갱신 조건 명시).
- 네임스페이스 분리:
preview와productionnamespace를 반드시 분리합니다.
| 저장소 | 핵심 역할 | 넣기 좋은 데이터 | 운영 주의점 |
|---|---|---|---|
| D1 | Cloudflare 바인딩 운영 핵심 DB | 문의, 예약, 사이트 메타, 앱 카탈로그, 관리자 설정, 세션 | DB당 크기 한계(10GB)와 rows read/write 비용 확인, 인덱스 없는 전체 스캔 방지 |
| Turso | D1 한계를 보완하는 외부 libSQL DB | 방문 로그, 이벤트 누적, 인기 순위 원천 데이터, 사용자별 집계 | 네이티브 바인딩 아님 → URL·토큰 secret 관리, 네트워크 지연·장애 분리 고려 |
| R2 | 파일과 큰 바이너리 원본 저장소 | 이미지 원본, 생성 이미지 결과물, ZIP 다운로드, PDF, 백업 파일 | DB에는 파일 경로와 메타데이터만 두고 실제 바이너리 파일은 R2에 분리 보관 |
| KV | 빠른 읽기 캐시와 설정 저장소 | 공지 배너, 기능 플래그, 자주 읽는 인기 목록 캐시, 리다이렉트 맵 | 결과적 일관성(Eventual Consistency)이므로 예약·결제·원본 로그 저장소로 사용 금지 |
실전 시뮬레이터 — 사이트 유형과 기능을 클릭해 최적의 바인딩 설정을 조합해 보세요!
버튼을 누르면 선택한 시나리오에 맞는 Cloudflare 서비스 조합과 wrangler.toml 바인딩 계약이 실시간으로 생성됩니다
Astro 정적 페이지 + Pages Functions + D1(문의) + R2(포트폴리오 이미지)
작업물 목록은 Astro 정적으로 빠르게 보여주고, 고해상도 이미지와 PDF는 R2(env.MEDIA)에 분리합니다. 고객 문의 폼 제출 시 Pages Functions가 D1(env.DB)에 안전하게 기록합니다.
아래 버튼을 눌러 4가지 사이트 유형과 데이터/스토리지 시나리오별 최적의 Cloudflare 구성을 확인하세요.
- 바인딩 이름 = 런타임 계약:
wrangler.toml의binding = "DB"와 코드의env.DB가 글자 하나라도 다르면 배포 후 런타임 오류가 발생합니다. - 3대 환경 ID 분리:
local,preview,production각각의database_id와KV namespace id를 문서 표로 남겨 관리합니다.
12 바이브 코딩 프롬프트 루프 & 14 로컬 검증 (dev · build · preview 반복)
한 번에 전체 사이트를 시키지 말고 기능 단위로 쪼개어 [계획 → 수정 → 검증] 3단계 루프로 진행합니다
- 3단계 분리 요청: 첫 번째 요청은 계획만, 두 번째 요청은 파일 수정, 세 번째 요청은 검증으로 나눕니다.
- 패키지 설치 통제: 새 패키지를 설치하기 전에는 왜 필요한지 먼저 설명하게 합니다.
- 작업 후 요약 의무화: 작업이 끝나면 변경 파일, 테스트 결과, 남은 위험을 요약하게 합니다.
AI가 코드를 고친 뒤 바로 운영 배포하지 마세요. 특히 Cloudflare 바인딩은 로컬과 원격에서 차이가 날 수 있으므로 어느 환경에서 어떤 값이 주입되는지 표로 관리합니다.
$ npm run dev
# Step 2. 정적 산출물(dist)이 오류 없이 만들어지는지 확인
$ npm run build
# Step 3. 바인딩이 필요한 API는 Wrangler 로컬/프리뷰로 검증
$ npx wrangler pages dev ./dist
- 에러 전달 압축 기술: 오류가 나면 전체 로그를 다 붙이지 말고 ① 처음 실패한 명령, ② 핵심 에러 20줄, ③ 방금 변경한 파일 목록만 AI에게 전달하세요.
- Production 배포는 마지막 1회:
npm run build와 preview 검증이 모두 끝난 뒤 마지막 한 번만 실행하는 습관을 만듭니다.
15 배포 흐름 (GitHub vs CLI) & 16 공개 품질 (SEO · 접근성 · 성능 기본값)
한 프로젝트에서 배포 루트를 섞지 않는 원칙과 검색 노출·모바일 가독성을 보장하는 공개 체크리스트
처음 운영하는 분에게는 GitHub 저장소를 연결해 main 브랜치가 자동 배포되게 만드는 흐름이 편합니다. 신규 프로젝트는 Workers Static Assets와 Wrangler 배포 흐름까지 함께 비교하세요.
- 배포 루트 혼용 금지: GitHub 자동 배포를 쓰면 커밋 중심으로 운영하고, CLI 배포를 쓰면 어느 브랜치와 산출물을 올렸는지 로그를 남깁니다.
- Build와 Deploy 분리: AI에게 배포를 맡길 때도
build와deploy를 분리해 어디서 실패했는지 즉시 알 수 있게 합니다. - 배포 설정 명문화: 빌드 명령, 출력 폴더(예:
dist), Node 버전, 환경 변수를 배포 설정에 명확히 기록합니다. - Preview → Production 승격:
preview브랜치에서 먼저 확인한 뒤production브랜치로 합치고, 커스텀 도메인 연결 후 canonical URL과 사이트맵을 점검합니다.
검색에 잘 노출되려면 title, description, canonical, OpenGraph, sitemap, robots, 구조화 데이터를 나중에 붙이지 말고 처음부터 공통 레이아웃과 페이지 템플릿에 내장해야 합니다.
• 모든 페이지마다 고유한 title과 description 부여
• 색인 요청 전 sitemap과 canonical URL이 실제 공개 도메인 주소를 가리키는지 확인
• 배포 후 OpenGraph 공유 미리보기 점검
• 버튼은 <button>으로, 이미지에는 의미 있는 대체 텍스트(alt) 부여 (흐릿한 장식 이미지 지양)
• Lighthouse 접근성 경고 확인
• AI에게 "모바일 360px에서 텍스트 겹침을 확인해 달라"고 지시
17 운영 습관 (백업·로그·비용) & 18 문제 해결 — 연결 지점부터 하나씩 좁히기
AI가 만든 설정이라도 사람이 이해할 수 있게 문서화하고, 장애 발생 시 DNS·코드·환경변수를 동시에 바꾸지 않습니다
작은 사이트도 문의 데이터와 이미지가 쌓이면 소중한 운영 자산이 됩니다. D1 스키마 변경 기록, R2 버킷 구조, KV 키 목록, 배포 환경 변수는 반드시 문서로 남겨야 합니다.
- DB 마이그레이션 이력화: 운영 DB migration 파일명에는 날짜와 목적을 명확히 남깁니다.
- R2 보관 주기 설정: R2 원본 파일은 삭제 정책과 백업 주기를 미리 정해 둡니다.
- 개인정보·토큰 로그 배제: 운영 로그에는 고객 개인정보와 인증 토큰을 절대 남기지 않습니다.
- 월간 정기 점검 루틴: 월 1회 사용량(무료 한도/과금), 오류 로그, 검색 노출, 문의 전환율을 점검합니다.
AI에게 오류를 맡길 때는 "이 문제가 프론트, 빌드, Cloudflare 설정, 런타임 중 어디에 가까운지 먼저 분류해 달라"고 요청하세요. 작은 변경 → 재현 → 검증 → 기록의 반복이 가장 빠릅니다.
| 발생 증상 | 가장 먼저 볼 곳 | AI에게 전달할 핵심 정보 |
|---|---|---|
| 배포는 됐는데 404 | 빌드 출력 폴더와 라우팅 설정 | 빌드 명령, dist 폴더 구조, Pages 빌드 출력 설정값 |
| API에서 DB 오류 | D1 바인딩 이름 일치 여부 | wrangler 설정 파일, 해당 함수 파일 코드, 오류 메시지 |
| 이미지가 안 보임 | R2 공개 경로와 접근 권한 | 요청 URL, HTTP 응답 상태 코드, R2 버킷 공개/서명 정책 |
| 도메인이 안 열림 | DNS 레코드와 SSL 인증서 상태 | 현재 등록된 레코드 종류(CNAME/A), 연결한 Pages 프로젝트명 |
19 가격 감각 — Cloudflare · Vercel · Supabase를 같은 줄에 놓고 비교하기
"정적 자산 요청(무료·무제한)"과 "Pages Functions 호출(Workers 한도 차감)"의 차이를 이해해야 정확한 비용 계산이 됩니다
Pages의 정적 asset 요청은 무료·무제한으로 안내되지만, Pages Functions를 호출하는 순간 그 요청은 Workers 요청 한도에 들어갑니다. Free 플랜이라면 하루 100,000건의 Workers 요청을 Pages Functions와 Workers가 함께 나눠 씁니다.
Free는 HTTP 요청당 10ms CPU가 기본 한도이고, Paid(월 $5~)는 기본 30초에서 설정으로 최대 5분까지 올릴 수 있습니다. 단순 네트워크 대기 시간이 전부 CPU로 잡히진 않지만, 이미지 처리나 큰 JSON 가공처럼 연산이 많은 작업은 이 한도를 의식해야 합니다.
- D1 과금: rows read/write 및 저장 용량 기준 (데이터 전송 egress 별도 과금 없음, DB당 10GB 한계 유의).
- R2 과금: 저장 용량과 Class A/B operation 기준이며 인터넷 egress 무료가 압도적 강점입니다.
- KV 과금: Workers Paid 내 read/write/delete/list 및 용량 기준 (읽기 캐시용으로 활용).
| 플랫폼 | 기본 유료 시작점 및 과금 특징 | 가장 유리한 프로젝트 유형 |
|---|---|---|
| Cloudflare | Workers Standard 월 $5 구독 + 요청/CPU/D1/R2/KV 사용량 기반 (정적 요청·R2 egress 무료) | 정적 콘텐츠 중심 + 작은 API 홈페이지, 포트폴리오, 자영업 사이트를 싸고 빠르게 공개할 때 |
| Vercel | Vercel Pro 월 $20 (포함 크레딧 제공) + Functions/Blob/Image/Analytics 항목별 사용량 | Next.js 중심의 제품이거나 프론트엔드 자동 배포 경험과 팀 프리뷰 협업이 최우선일 때 |
| Supabase | Supabase Pro 월 $25부터 운영 안정성 확보 + DB/Auth/Storage 통합 (egress·용량 초과 확인) | 복잡한 Postgres SQL, 로그인/권한(Auth), 실시간(Realtime), 관리자 DB 작업이 핵심일 때 |
20 솔직한 단점 7가지 & 22 플랫폼 철학 (통합 제품 Vercel vs 조립 플랫폼 Cloudflare)
Cloudflare는 싸고 강하지만 부품이 잘게 나뉘어 있어 연결(Binding)과 환경 분리를 개발자가 앞단에서 직접 설계해야 합니다
- 1. 서비스를 따로 만들고 연결해야 한다: Pages, Workers, D1, R2, KV가 각각 독립 서비스라 "DB는 만들었는데 코드가 못 찾는" 상황을 초보자가 자주 겪습니다.
- 2. 바인딩 이름이 곧 런타임 계약이다:
wrangler의binding = "DB"와 코드의env.DB가 다르면 로컬에선 돼도 preview/prod에서 깨집니다. - 3. 환경이 세 갈래로 갈라진다:
local,preview,production의database_id, KV namespace id, secret 값이 달라 문서화하지 않으면 AI도 사람도 헷갈립니다. - 4. D1은 Postgres가 아니라 SQLite 계열이다: 복잡한 Postgres 확장이나 대형 트랜잭션을 그대로 기대하면 안 되며, DB당 10GB 한계 때문에 로그성 데이터는 Turso 등으로 분리해야 합니다.
- 5. Pages도 Functions를 쓰면 Workers 과금으로 들어간다: 정적 asset과 동적 API 호출 한도를 분리해 계산해야 합니다.
- 6. Worker 런타임은 Node 서버와 다르다: Node 전용 패키지, 파일 시스템 접근, 긴 작업, 일부 네이티브 모듈은 그대로 옮기기 어렵습니다.
- 7. 비용 항목이 쪼개져 있다: 요청/CPU, D1 rows, R2·KV operation이 따로 움직여 계산표 없이 운영하면 감이 흐려집니다.
Cloudflare가 복잡해 보이는 이유는 같은 일을 어렵게 만들어서가 아니라, Vercel이 뒤에서 숨겨 주는 인프라 결정을 개발자가 더 앞단에서 직접 고르게 하기 때문입니다.
• 초반에 코드만 올리면 자동 처리되는 경험
• 비용·위치·캐시·런타임을 세밀하게 직접 통제
21 딸깍 복사용 프롬프트 & Cloudflare 홈페이지 제작 마스터 치트시트
실제 토큰이나 계정 ID는 절대 넣지 말고 사이트 목표와 기능명만 바꿔 복사해 바로 AI에게 지시하세요!
- 핵심 포인트: AI가 바로 배포 명령까지 달리지 못하게 계획 단계를 먼저 끊어줍니다.
- 전환 목표 명시: 방문자가 첫 화면에서 해야 할 행동을 한 문장으로 지정합니다.
- 핵심 포인트: 바인딩 이름(`env.DB`, `env.MEDIA`)을 명확히 지정해 런타임 불일치를 예방합니다.
- 비밀값 차단: 실제 API 키 대신 변수명만 쓰도록 강제합니다.
- 핵심 포인트: 로컬 빌드와 프리뷰 검증을 거친 후 사람이 마지막에 배포를 승인합니다.
- 공개 품질 점검: 모바일 360px 화면과 SEO 메타데이터를 함께 검증합니다.
실무 이점 ① — 홈페이지는 무료로 시작하고, 워드프레스 없이 여러 사이트를 둠
정적 요청은 무료·무제한임. 동적 호출만 Workers 한도를 씀. 금액은 공식 문서에 있는 것만 적음
- 정적 홈: Pages·Workers의 정적 asset 요청은 무료·무제한임. 파일만 올리는 홈페이지는 Workers Free($0)로 시작함.
- 동적 호출: Pages Functions와 Workers 요청은 Free에서 하루 100,000건을 같이 씀. UTC 자정에 리셋되고, 넘으면 에러 1027이 남.
- Paid 시작점: Workers Paid는 계정당 최소 월 $5임. 월 1,000만 요청이 포함되고, 추가 100만 건당 $0.30임. 이 플랜은 데이터 전송(egress)·대역폭 추가 요금이 없음.
- Pages Free 한도: 월 500빌드, 동시 빌드 1개, 사이트당 파일 20,000개, 파일당 25MiB임. 존 Free 플랜은 월 $0이고 CDN·Universal SSL·언미터드 DDoS가 포함됨.
출처: Workers pricing·limits, Pages functions pricing·limits, plans/free
- CMS 불필요: 워드프레스를 설치하지 않고 정적 사이트를 Pages에 올린 뒤, 폼·API만 Functions 또는 Workers에 붙임.
- Pages 프로젝트: 계정당 100개임. 이 한도는 보통 올려 주지 않음. 커스텀 도메인은 Free 기준 프로젝트당 100개임.
- Workers 개수: Free 100개, Paid 500개임. Pages 프로젝트 한도와 따로 셈.
- 도메인 추가 속도: 10분에 최대 25개임. 도메인이 50개를 넘고 대기 중이 활성보다 많으면 추가가 막힘. 수십 개 운영은 이 한도 안에서 가능함. 존 개수의 고정 상한 숫자는 공식 한도 표에 없음.
출처: Pages limits, Workers limits, Fundamentals — add multiple sites
실무 이점 ② — DB·CDN 캐시·DDoS·원가 도메인·R2 이그레스
R2는 인터넷으로 나가는 이그레스 요금이 없음. 도메인은 마크업 없는 원가이고, 단일 달러 가격은 적지 않음
- DB (D1): Workers Free·Paid 모두 D1이 있음. Free는 DB 10개, 저장 합계 5GB, DB당 500MB, 읽기 500만 행/일, 쓰기 10만 행/일임. D1 데이터 전송(egress) 요금은 없음.
- 캐시: Free 존에 CDN 캐시가 포함됨. Cache Rules는 Free 10개임. 기본은 확장자 기준 정적 파일이고, HTML·JSON은 기본으로 캐시하지 않음.
- DDoS: 전 플랜에 L3–L7 표준 언미터드 DDoS와 HTTP DDoS 보호가 있음. 제품 안내는 공격 트래픽 급증에 대한 종량 과금이 없다고 함.
- 곁가지: 새 존에는 Free Managed Ruleset이 자동 배포됨(Log4j, Shellshock, 흔한 워드프레스 익스플로잇). Free WAF는 커스텀 룰과 레이트 리밋 1개, 유출 자격 증명 검사 1필드를 포함함. Universal SSL도 Free에 있음.
출처: D1 pricing, Cache plans·default behavior, DDoS docs, WAF managed rules, plans
- 도메인: Registrar는 등록·갱신을 원가로 팔고, 레지스트리와 ICANN에 내는 돈만 청구함. 마크업과 surprise fee가 없음. 자동 갱신이 기본이고 갱신가도 레지스트리 list price임.
- 가격표: 확장자마다 금액이 다름. 이 슬라이드에는 .com 같은 단일 가격을 적지 않음. 현재 표는 pricing.registrar.cloudflare.com 임.
- R2 이그레스: 공식 표는 Egress (data transfer to Internet) = Free 임. 어떤 스토리지 클래스든 이그레스 대역폭 요금이 없음. How R2 works도 “no egress fees”라고 함.
- R2 무료 구간: Standard만 해당. 월 10GB-month, Class A 100만 요청, Class B 1,000만 요청, 이그레스 무료임. Infrequent Access는 이그레스는 무료이나 데이터 조회(processing)가 GB당 $0.01임.
출처: Registrar overview, R2 pricing, R2 how-it-works
실무 이점 ③ — PayPal·요금 알림·트래픽 분석·보안 메일
요금 알림은 메일을 보내지만 사용을 멈추지는 않음. PHP 전용 공격 메일은 공식 목록에서 확인하지 못함
- PayPal: 결제 수단에 카드(Visa, Mastercard, Amex, Discover, UnionPay)와 PayPal이 있음. Apple Pay, Google Pay, Link도 안내됨. 카드 전체 번호와 PayPal 비밀번호는 Cloudflare가 보관하지 않음.
- 예산 알림: Pay-as-you-go 계정은 Billing > Billable Usage에서 달러 임계값을 정함. 이번 청구 기간 사용액이 넘으면 수신 메일로 1통이 감. 사용을 멈추거나 상한을 걸지는 않음. 금액의 정본은 월 인보이스임.
- 제품별 사용 알림: 바이트·요청처럼 제품 단위로 보내는 Usage notification은 Professional 이상임. Free 존만 쓰는 계정은 이 메일의 포함 대상이 아님.
- 트래픽 분석: Zone Analytics는 전 플랜이 최소 최근 30일을 봄. Free는 요청·대역폭·순방문자·국가를 보여 줌. 가입 직후 Free는 지표가 최대 24시간 늦을 수 있음. Web Analytics 주간 요약 메일은 전 플랜임. Security Analytics 존 화면은 Free도 최대 31일임.
출처: Billing profile, Budget alerts, Usage-based billing, Zone analytics, Web Analytics notifications, Security Analytics
- HTTP DDoS 알림: 전 플랜. 초당 100요청을 넘는 HTTP 공격을 완화하면 알림이 감.
- Universal SSL 알림: 전 플랜. 인증서 검증·발급·갱신·만료를 메일로 받음.
- Security Insights: 전 플랜. 원하는 인사이트를 골라 메일로 받음. Free 스캔 주기는 7일마다이고, 온디맨드 스캔도 가능함. 내용은 설정 점검(TLS, DNS, WAF 미배포 등)이지 PHP 공격 로그가 아님.
- 확인 못 한 항목: 도메인 등록 직후 PHP 취약점이나 이상 공격을 자동으로 짚어 보내는 전용 메일은 공식 알림 목록에 없음. WAF Security Events 스파이크 메일은 Business·Enterprise만 해당함.
출처: Notifications — HTTP DDoS, Universal SSL, Security Insights, WAF availability. Security Center get started