EmDash CMS Cloudflare 무료 플랜 프로덕션 플레이북
신뢰할 수 있는 경로, 명확한 기능 경계, 실용적인 롤백 안내와 함께 Cloudflare 무료 플랜에서 EmDash를 배포합니다.
요약
핵심 CMS 워크플로에 한해 Cloudflare 무료 플랜에서 EmDash를 프로덕션으로 운영할 수 있습니다.
반드시 받아들여야 할 점: 샌드박스 플러그인 실행은 사용할 수 없으므로 설정에서 worker_loaders를 제거해야 합니다.
이 가이드는 최대 기능 범위가 아니라 안정성을 우선합니다.
무료 플랜에서의 기능 경계
사용 가능
- EmDash 코어 사이트 및 관리자 흐름
- D1 기반 콘텐츠 데이터
- R2 기반 미디어 저장소(무료 사용량 내)
- Workers 배포 및 라우팅
사용 불가
- 샌드박스 플러그인용 Dynamic Workers
- 마켓플레이스 스타일의 신뢰할 수 없는 런타임 실행
런치가 샌드박스된 서드파티 플러그인 실행에 의존한다면 무료 플랜으로는 부족합니다.
배포 전 체크리스트
배포 명령을 실행하기 전에 다음을 모두 확인하세요.
- Wrangler 인증 완료(
wrangler login완료) - 프로젝트가 클라우드 전용 가정 없이 로컬에서 빌드됨
wrangler.jsonc의 D1·R2 바인딩이 런타임 설정과 일치- 무료 플랜용으로
worker_loaders항목 제거 - 패키지 매니저 선택 일관(
npm또는pnpm, 혼용 금지)
리소스 프로비저닝 순서
바인딩 churn을 줄이려면 정확히 이 순서로 프로비저닝하세요.
- D1 데이터베이스 생성
- R2를 생성하거나 활성화한 뒤 버킷 생성
wrangler.jsonc를 정확한 이름과 ID로 업데이트- Worker 빌드 및 배포
이유: D1 ID와 버킷 이름이 환경 바인딩의 단일 진실 소스가 됩니다.
# 먼저 D1 프로비저닝
npx wrangler d1 create your-db-name
# 그다음 R2 버킷 프로비저닝
npx wrangler r2 bucket create your-media-bucket
무료 플랜용 최소 wrangler.jsonc 형태
다음 스켈레톤은 의도적으로 작게 유지했습니다.
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "your-site-name",
"main": "./src/worker.ts",
"compatibility_date": "2026-04-08",
"compatibility_flags": ["nodejs_compat"],
"d1_databases": [
{
"binding": "DB",
"database_name": "your-db-name",
"database_id": "replace-with-d1-id"
}
],
"r2_buckets": [
{
"binding": "MEDIA",
"bucket_name": "your-media-bucket"
}
]
}
무료 플랜에서는 worker_loaders 섹션이 없습니다.
빌드 및 배포 흐름
EmDash 프로젝트 루트에서 명령을 실행합니다.
# 패키지 매니저 하나를 고르고 그대로 유지
npm run build
npm run deploy
프로젝트가 pnpm 기반이면:
pnpm build
pnpm deploy
락파일을 의도적으로 동기화하지 않는 한 같은 배포 세션에서 npm과 pnpm을 섞어 쓰지 마세요.
배포 후 검증 체크리스트
다음 순서로 검증하세요.
- 프런트엔드 URL이 해석되고 예상 콘텐츠를 반환하는지
- 관리자 URL(
/_emdash/admin)에 도달 가능한지 - 첫 관리자 설정이 성공적으로 완료되는지
- 테스트 항목 하나를 만들어 게시하는지
- 미디어 파일 하나를 업로드하고 조회가 되는지
라우트 도달만이 아니라 데이터 쓰기 경로까지 확인해야 배포가 완료된 것입니다.
자주 나오는 실패 모드와 가장 짧은 수정
실패: 배포는 성공했으나 관리자 초기화 실패
가능한 원인: 런타임 통합과 wrangler.jsonc 사이의 바인딩 불일치.
수정 경로:
- 바인딩 이름(
DB,MEDIA)이 모든 곳에서 동일한지 확인 - 설정 수정 후 재배포
- 관리자 초기화 재시도
실패: R2 명령이 계정 안내로 막힘
가능한 원인: 대시보드에서 아직 R2를 켜지 않음.
수정 경로:
- Cloudflare 대시보드에서 R2 활성화
- 결제 약관 수락(무료 사용량은 그대로 적용)
- 버킷 생성 명령 재실행
실패: 무료 플랜에서 플러그인 관련 런타임 오류
가능한 원인: 남아 있는 샌드박스 설정.
수정 경로:
worker_loaders제거- 샌드박스 전용 플러그인 설정 비활성화
- 재배포 후 재테스트
롤백 전략
보수적인 롤백 정책을 사용하세요.
- 마지막으로 알려진 정상 배포 커밋에 태그 유지
- 프로덕션 회귀가 보이면 태그된 이전 커밋 재배포
- 트래픽이 안정될 때까지 스키마 또는 플러그인 변경 연기
운영상 인시던트 구간에서는 깊은 핫픽스보다 빠른 롤백이 낫습니다.
무료에서 유료로 올릴 때
다음 중 하나가 참일 때만 업그레이드하세요.
- 샌드박스된 신뢰할 수 없는 플러그인 실행이 필요할 때
- 트래픽 또는 저장소가 무료 한도를 정기적으로 초과할 때
- 거버넌스상 더 강한 플러그인 런타임 격리가 필요할 때
결제 화면의 모호한 문구만 보고 업그레이드하지 마세요. 구체적인 기능 요구가 있을 때만 업그레이드하세요.