EmDash – 플러그인 보안 문제를 해결한 WordPress의 정신적 후속작
(blog.cloudflare.com)- Cloudflare가 개발한 EmDash는 WordPress의 구조적 한계를 극복하기 위해 TypeScript와 서버리스 아키텍처로 새롭게 설계된 오픈소스 CMS
- 각 플러그인을 격리된 샌드박스 환경에서 실행해, WordPress 사이트 보안 문제의 96%를 차지하던 플러그인 취약점을 근본적으로 차단함
- x402 결제 표준을 내장해 콘텐츠 단위별 온디맨드 결제(pay-per-use) 를 지원하며, AI 기반 웹 트래픽 시대에 맞는 수익화 구조를 제공함
- Cloudflare Workers 기반 서버리스 구조로 요청 시 자동 확장·축소되어 비용 절감과 고성능 처리를 동시에 달성함
- AI 에이전트 관리, Passkey 인증, Astro 테마 구조 등 현대적 기능을 통합해, WordPress의 정신을 계승하면서도 완전히 새롭게 재구성된 CMS임
EmDash 개요
-
EmDash 는 WordPress의 구조적 한계를 해결하기 위해 새롭게 설계된 오픈소스 CMS로, 완전한 TypeScript 기반과 서버리스 아키텍처를 채택
- WordPress의 핵심 기능과 호환되지만 기존 코드를 사용하지 않아 MIT 라이선스로 배포 가능
- Cloudflare Workers의 Dynamic Worker를 이용해 각 플러그인을 독립된 격리 환경(isolate) 에서 실행
- Astro 프레임워크를 기반으로 콘텐츠 중심 웹사이트에 최적화된 성능 제공
- EmDash는 GitHub에서 공개되어 있으며, Cloudflare 계정이나 Node.js 서버에서 직접 배포 가능
- 플러그인 보안, 시장 종속성 해소, AI 기반 관리, x402 결제 지원 등 WordPress가 해결하지 못한 문제를 근본적으로 개선
WordPress의 성취와 한계
- WordPress는 인터넷의 40% 이상을 구동하며 출판의 민주화를 이끈 대표적 오픈소스 성공 사례
- 그러나 24년이 지난 현재, 호스팅 환경과 개발 패러다임이 크게 변화
- 초기에는 VPS 임대가 필요했지만, 현재는 전 세계 분산 네트워크에 JavaScript 번들 업로드만으로 배포 가능
- EmDash는 WordPress의 정신을 계승하면서도 현대적 웹 인프라와 보안 요구에 맞게 재구성된 형태
WordPress 플러그인 보안 문제 해결
- WordPress 사이트의 96% 보안 문제가 플러그인에서 발생
- 플러그인은 PHP 스크립트로 데이터베이스와 파일 시스템에 직접 접근
- 설치 시 거의 모든 권한을 부여받으며 격리나 권한 제한이 없음
- EmDash는 각 플러그인을 Dynamic Worker 기반 샌드박스 환경에서 실행
- 플러그인은 명시적 선언(manifest) 을 통해 필요한 capabilities만 요청
- 예:
read:content,email:send등 필요한 권한만 부여 - 네트워크 접근도 명시된 호스트에 한정
- 설치 전 플러그인이 요청하는 권한을 명확히 확인할 수 있어 OAuth와 유사한 투명한 권한 부여 구조 제공
- 관리자는 권한 요청 기준으로 설치 정책 자동화 가능
플러그인 보안과 마켓플레이스 종속성 해소
- WordPress.org는 플러그인 보안 문제로 인해 수동 검수 절차를 운영하며 대기열이 800개 이상
- GPL 라이선스 제약으로 코드 재사용과 상업화가 제한
- EmDash는 두 가지 구조적 개선을 통해 시장 종속(lock-in) 을 제거
- 플러그인 라이선스 자유화: EmDash와 코드 공유가 없으므로 개발자가 원하는 라이선스 선택 가능
- 보안 샌드박스 실행: 사이트가 플러그인 코드를 직접 볼 필요 없이 신뢰 가능
- 플러그인은 명시된 capability만 수행하므로 보안 위험을 세밀하게 평가 가능
- 이러한 구조는 중앙화된 마켓플레이스 의존도 감소로 이어짐
- 신뢰 가능한 보안 모델이 확보되면 개발자와 사용자는 자유로운 생태계 확장 가능
x402 결제 표준 내장 — 콘텐츠 접근 유료화
- EmDash는 x402 표준을 기본 지원하여 HTTP 402 Payment Required 응답을 통한 온디맨드 결제 가능
- 사용자는 구독 없이 콘텐츠 단위별 결제(pay-per-use) 가능
- 사이트 운영자는 지갑 주소와 가격 설정만으로 수익화 가능
- 이는 AI 에이전트 기반 웹 트래픽 시대에 맞춘 새로운 비즈니스 모델 제공
- 모든 EmDash 사이트는 AI 시대에 적합한 내장 수익 구조를 가짐
서버리스 기반 확장성과 비용 절감
- WordPress는 서버 프로비저닝이 필요해 유휴 리소스 비용이 발생
- EmDash는 Cloudflare workerd 기반의 v8 isolate 아키텍처를 활용
- 요청 시 즉시 인스턴스 생성, 요청이 없으면 자동 scale-to-zero
- CPU 사용 시간만 과금
- Cloudflare for Platforms를 통해 수백만 개 인스턴스 자동 확장 가능
- 저비용·고성능 구조로 대규모 트래픽 처리와 무료 티어 제공에 유리
Astro 기반의 현대적 테마 구조
- EmDash 테마는 Astro 프로젝트로 구성되며 다음 요소 포함
- Pages: 콘텐츠 렌더링용 라우트
- Layouts: 공통 HTML 구조
- Components: 재사용 가능한 UI 요소
- Styles: CSS 또는 Tailwind 설정
- Seed 파일: CMS가 생성할 콘텐츠 타입 정의
- Astro는 LLM 학습 데이터에 포함된 인기 프레임워크로 개발자 친화적
- WordPress 테마의
functions.php기반 구조와 달리 EmDash 테마는 데이터베이스 접근 불가로 보안 강화
AI 네이티브 CMS — MCP, CLI, Agent Skills
- EmDash는 AI 에이전트가 직접 관리 가능한 CMS로 설계
- 반복적인 콘텐츠 마이그레이션이나 필드 변환 작업 자동화
-
Agent Skills
- EmDash 인스턴스는 Agent Skills를 내장해 플러그인 구조·훅·테마 포팅 방법 등을 AI에게 제공
- AI가 EmDash 코드베이스를 이해하고 자동 커스터마이징 가능
-
EmDash CLI
- CLI를 통해 콘텐츠 검색, 미디어 업로드, 스키마 생성 등 관리 기능 수행
- 로컬 및 원격 인스턴스 모두 제어 가능
-
내장 MCP 서버
- 각 인스턴스는 자체 Model Context Protocol 서버를 제공
- 관리자 UI에서 가능한 모든 작업을 원격으로 수행 가능
패스키 기반 인증과 역할 관리
- EmDash는 Passkey 인증을 기본값으로 사용
- 비밀번호 유출 및 무차별 대입 공격 방지
- 기본적으로 역할 기반 접근 제어(RBAC) 지원
- 관리자, 편집자, 작성자, 기여자 등 역할별 권한 구분
- 인증은 플러그인 방식으로 확장 가능, SSO 및 IdP 메타데이터 연동 지원
WordPress 사이트 마이그레이션
- 기존 WordPress 사이트는 WXR 파일 내보내기 또는 EmDash Exporter 플러그인을 통해 이전 가능
- Exporter 플러그인은 WordPress Application Password로 보호된 전용 엔드포인트 생성
- 콘텐츠와 미디어를 자동으로 EmDash 라이브러리로 이전
- EmDash는 스키마 기반 콘텐츠 구조를 지원
- WordPress의 Custom Post Type을 EmDash의 독립 컬렉션으로 변환
- Block Kit Agent Skill을 통해 맞춤형 블록을 AI로 생성 가능
체험 및 참여
- EmDash는 현재 v0.1.0 프리뷰 버전으로 GitHub 저장소에서 다운로드 가능
- EmDash Playground 에서 관리자 UI를 직접 체험 가능
- 로컬 설치 명령:
npm create emdash@latest - Cloudflare 대시보드에서도 배포 가능
- WordPress 커뮤니티, 호스팅 플랫폼, 플러그인·테마 개발자들의 피드백과 기여 환영
제가 개인블로그에 워드프레스 사용하다가 저 보안 문제때문에 버리고 스태틱으로 옮긴 사람인데요.
개인 블로그를 한동안 그냥 내비두고 있었는데, 진짜 이상한 스팸들이 파고 들어와서 블로그를 스팸밭으로 만들어 버리고 갔어요. 태그를 이용해서 내 로컬에 없는 페이지를 구글에 등록하는 이상한 방법을 쓰더군요. 지우느라 아직도 고생중입니다 ㅠ
Hacker News 의견들
-
10년 넘게 WordPress를 다뤄왔는데, 이번 프로젝트는 TypeScript와 Worker 플러그인 두 가지를 완벽히 잡았다고 생각함
최근 WP의 보안 문제를 많이 고민했는데, 악성 플러그인이 DB나 환경 변수에 접근하거나 XSS를 유발할 수 있음. 하지만 잘 설계된 플러그인 시스템이라면 이를 완화할 수 있음
개인적으로 HotsauceCMS를 개발 중임. NodeJS나 Deno Worker 플러그인을 선택적으로 사용해, 퍼스트파티 플러그인은 빠른 인프로세스 실행을, 서드파티는 워커로 격리 실행 가능하게 함
의존성은 4개뿐이고 전이 의존성은 0개로, Dependabot 경고와 npm 공급망 공격에 지쳤기 때문임
Drizzle 기반의 스키마 퍼스트 구조로, DB 구조를 완전히 제어할 수 있고 파일 업로드 같은 기능을 스키마 힌트로 정의함
DB 비종속적이라 Postgres, MySQL, SQLite 등 Drizzle이 지원하는 모든 DB에서 작동함
프론트엔드는 자유롭게 선택 가능하며, 개인적으로는 React 없는 JSX를 선호함
피드백 환영함. 내가 뭔가 놓친 게 있는지, 방향이 맞는지 궁금함. EmDash의 향후 전개도 기대 중임- 왜 TypeScript가 그렇게 중요하다고 생각하는지 설명해줄 수 있는지 궁금함
- 예전에 WordPress를 많이 썼는데, 당시엔 FTP로 바로 올려서 동작하는 간편한 설치성이 매력이었음. CLI나 빌드 도구가 필요 없었음. 하지만 보안은 늘 문제였고, 해킹이 끊이지 않았음
- 관련된 이전 논의 링크를 공유함
-
EmDash가 WordPress의 정신적 후속작이라는데, 나는 CMS가 가야 할 방향이 그 반대라고 생각함
오히려 단순화해서 정적 파일 기반 웹사이트로 돌아가야 함. 캐싱도 쉽고 빠르며 관리도 간단함
물론 Cloudflare 입장에서는 자체 Workers 제품을 팔기 위해 이런 구조를 택한 것 같음. 근본적인 보안 문제를 정말 해결했는지는 아직 의문임- 나도 정적 사이트를 좋아하지만, 고객들은 종종 동적 콘텐츠를 원함. 처음엔 단순한 사이트를 원한다고 하지만, 나중엔 폼, 재고, 예약 기능을 추가하길 원함. 그래서 플러그인 중심 구조가 이해됨
- 비개발자 고객들은 UI로 직접 수정할 수 있는 걸 좋아함. WordPress는 너무 복잡하고 비대한 UI라서 대부분 결국 개발자에게 다시 맡김. 최소한의 UI로 필요한 부분만 수정 가능하게 하는 게 이상적임
- Astro를 쓴다면 기본적으로 정적 사이트 생성기임. 필요할 때 React 컴포넌트를 추가할 수 있고, 플러그인도 선택적으로 사용할 수 있음
- 정적 파일을 캐시하기 쉬운 곳에 호스팅하고 싶다면 Cloudflare가 이미 그런 서비스를 제공함
- Astro는 정적 HTML을 출력하므로, 그 점에서 문제는 없어 보임
-
Cloudflare가 잘못된 방향에서 접근하고 있다고 생각함
WordPress가 성공한 이유는 쉬운 설치성과 네트워크 효과 덕분임. 보안보다도, 이미 WP에 익숙한 개발자들이 많기 때문임
EmDash가 성공하려면 Wix나 Squarespace보다 더 쉽고 빠르고 유연해야 함. 그렇지 않으면 네트워크 효과를 만들기 어려움- WordPress에는 이미 숙련된 인력이 많고, EmDash는 이제 시작임. 그래도 성장한다면 응원할 생각임
-
WordPress 개발자로서 가장 큰 고통은 플러그인 아키텍처였음.
WP는 플러그인을 이미지와 같은wp-content폴더에 넣어 CI/CD가 악몽이 됨. EmDash는 플러그인이 TS 모듈이라 훨씬 깔끔함- WP에는 staging 개념이 없어, 변경 사항을 프로덕션으로 옮기려면 수동으로 다시 해야 함
-
Cloudflare의 x402 결제 표준 개념이 흥미로움
에이전트가 자동으로 소액 결제를 보내 콘텐츠 접근권을 얻는 구조인데, 약간 무섭지만 미래지향적임
농담 삼아, 방문마다 10센트 요구하는 HTTP 402 허니팟을 만들면 옛날 “1픽셀 1달러” 아이디어의 재림일지도 모름- 만약 에이전트를 속여 계속 결제하게 만들면, 무한 리디렉션이나 쓰레기 콘텐츠로 돈을 벌 수도 있음
- HTTP 402 문서 참고
- 영화 Office Space의 소액 착복 해킹이 합법화된 느낌임
-
WordPress의 가치는 코드가 아니라 생태계와 지원 체계에 있음
코드 품질은 별로지만, 모든 SaaS가 WP 커넥터를 제공함.
EmDash가 성공하려면 비개발자도 Fiverr에서 쉽게 커스터마이징을 맡길 수 있어야 함. 그건 기술이 아니라 노동 시장의 문제임- Cloudflare는 만우절 장난을 하지 않음. 1.1.1.1도 4월 1일에 출시됐고 지금은 주요 DNS 서비스임
- 실제 프로젝트임을 확인함
- WordPress의 “오픈소스” 관련 .com vs .org 논란도 참고할 만함
- 오래된 대안으로 Textpattern도 있음
-
Cloudflare가 만든 WordPress 후속작이라는 점은 매력적이지만, Dynamic Workers 기반 플러그인 격리는 Cloudflare 런타임에서만 작동함
다른 호스트에서는 단순한 TS CMS일 뿐이라 아키텍처 종속성이 문제임- 결국 Cloudflare 인프라에 종속된 OSS라는 점에서 채택이 어려움
- 다만 Workerd는 오픈소스라 자체 호스팅도 가능함
- 다른 런타임이 이 기능을 복제할 수도 있음
- Cloudflare는 인기 OSS를 자사 인프라 전용 대체품으로 만드는 전략을 취하는 듯함
-
왜 여전히 JavaScript로 AI 프로젝트를 만드는지 의문임
이제는 Go 같은 컴파일 언어로도 빠르게 앱을 만들 수 있음. 더 작고 빠르며 배포도 간단함
JS는 해석형이라 느리고 복잡함. 과거엔 즉시 실행이 장점이었지만 지금은 컴파일도 빠름- “JS가 진짜 언어가 아니”라는 말은 과함. 해석형 언어를 쓸 이유는 여전히 많음
- JS는 유일하게 웹 프론트엔드와 백엔드, 모바일, 데스크톱을 모두 아우를 수 있음. tRPC 같은 도구로 엔드투엔드 타입 안정성도 확보 가능함
- 대부분의 개발자가 JS/TS에 익숙하고 커뮤니티가 가장 큼. 생태계가 거대하니 굳이 바꿀 이유가 없음
- Go는 JSON 처리나 템플릿 작업에서 불편함. 타입 시스템이 덜 유연해서 프론트엔드 개발에는 제약이 많음
- LLM이 TS를 잘 쓰고, TS는 JS의 단점을 많이 고쳤음. 빠른 런타임과 쉬운 배포 덕분에 여전히 매력적임
-
EmDash가 WordPress 코드를 사용하지 않아 MIT 라이선스로 배포된다는 점이 흥미로움
하지만 최근 등장한 Cleanroom as a Service인 Malus를 떠올리게 함. 타이밍이 묘하게 겹침- Malus는 사실 풍자 프로젝트임