EmDash 플러그인은 두 가지 방법으로 설치할 수 있습니다: 관리자 대시보드를 통해 마켓플레이스에서 설치하거나, Astro 구성에 직접 추가합니다. 마켓플레이스 플러그인은 항상 샌드박스에서 실행됩니다; 구성 기반 플러그인은 선언된 배열(sandboxed: [] vs plugins: [])에 따라 샌드박스 또는 인프로세스로 실행됩니다.
마켓플레이스에서
관리자 대시보드에는 플러그인을 검색, 설치 및 관리할 수 있는 마켓플레이스 브라우저가 포함되어 있습니다.
사전 요구사항
마켓플레이스 플러그인을 설치하려면 사이트에 다음이 필요합니다:
-
샌드박스 러너 구성 — 마켓플레이스 플러그인은 격리된 런타임에서 실행되며 샌드박스 러너가 필요합니다. 다음 구성으로 활성화합니다:
import { defineConfig } from "astro/config"; import emdash from "emdash/astro"; export default defineConfig({ integrations: [ emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-cloudflare", }), ], }); -
관리자 액세스 — 관리자만 플러그인을 설치하거나 제거할 수 있습니다.
탐색 및 설치
- 관리자 패널을 열고 플러그인 > 마켓플레이스로 이동합니다
- 플러그인을 탐색하거나 검색합니다
- 플러그인 카드를 클릭하여 상세 페이지를 확인합니다 — README, 스크린샷, 기능 및 보안 감사 결과
- 설치를 클릭합니다
- 기능 동의 대화상자를 검토합니다 — 플러그인이 액세스할 수 있는 항목이 표시됩니다
- 설치를 확인합니다
플러그인이 다운로드되어 사이트의 R2 버킷에 저장되고 샌드박스 러너에 로드됩니다. 즉시 활성화됩니다.
기능 동의
설치 전에 플러그인이 액세스해야 하는 항목을 나열하는 대화상자가 표시됩니다:
| 기능 | 의미 |
|---|---|
content:read | 콘텐츠 읽기 |
content:write | 콘텐츠 생성, 업데이트 및 삭제 |
media:read | 미디어 라이브러리에 액세스 |
media:write | 미디어 업로드 및 관리 |
network:request | 특정 호스트에 네트워크 요청 수행 |
보안 감사
마켓플레이스의 모든 플러그인 버전은 자동 보안 감사를 거쳤습니다. 감사 결과는 플러그인 카드에 표시됩니다:
- Pass — 문제가 발견되지 않음
- Warn — 경미한 우려 사항 플래그됨(결과 검토)
- Fail — 중대한 보안 문제 감지됨
플러그인 상세 페이지에서 개별 결과와 심각도를 포함한 전체 감사 보고서를 볼 수 있습니다.
업데이트
설치된 플러그인의 최신 버전이 사용 가능한 경우:
- 관리자 패널에서 플러그인으로 이동합니다
- 마켓플레이스 플러그인에 업데이트 가능 배지가 표시됩니다
- 업데이트를 클릭하여 변경 로그 및 기능 변경 사항을 확인합니다
- 새 버전에 추가 기능이 필요한 경우 차이를 확인하고 승인해야 합니다
- 업데이트를 확인합니다
제거
- 관리자 패널에서 플러그인으로 이동합니다
- 제거할 마켓플레이스 플러그인을 클릭합니다
- 제거를 클릭합니다
- 플러그인의 저장된 데이터를 유지할지 삭제할지 선택합니다
- 확인합니다
플러그인의 샌드박스 코드가 R2 버킷에서 제거되고 즉시 실행이 중지됩니다.
구성에서
네이티브 플러그인 — 자신의 코드 또는 npm을 통해 설치된 패키지 — 은 Astro 구성에 직접 추가됩니다. 다음 예제는 SEO 플러그인을 등록합니다:
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import seoPlugin from "@emdash-cms/plugin-seo";
export default defineConfig({
integrations: [
emdash({
plugins: [
seoPlugin({ generateSitemap: true }),
],
}),
],
});
네이티브 플러그인:
- 인프로세스로 실행됩니다(샌드박스 아님)
- Node.js API에 전체 액세스 권한이 있습니다
- 빌드 시 및 모든 서버 시작 시 로드됩니다
- 관리자 UI에서 설치하거나 제거할 수 없습니다
마켓플레이스 vs. 구성 — 언제 어떤 것을 사용할지
| 마켓플레이스(샌드박스) | 구성(네이티브 또는 인프로세스 샌드박스) | |
|---|---|---|
| 설치 방법 | 관리자 UI에서 원클릭 | 코드 변경 + npm install + 배포 |
| 실행 | 구성된 러너를 통한 샌드박스 런타임 | 인프로세스(또는 sandboxed: [] 아래 나열되고 러너가 사용 가능한 경우 샌드박스) |
| 기능 | 샌드박스 브리지에 의해 시행 — ctx.* 게이팅 + 런타임 격리 | ctx.* 게이팅만(인프로세스 플러그인은 직접 fetch(), env, imports를 통해 우회 가능) |
| Node.js API | 사용 불가 | 전체 액세스(인프로세스만) |
| React 관리 페이지 | 아니요(대신 Block Kit) | 예(네이티브 플러그인) |
| PT 렌더링 컴포넌트 | 아니요 | 예(네이티브 플러그인) |
| 업데이트 | 관리자에서 원클릭 | 버전 범프 + 배포 |
| 최적 | 대부분의 플러그인 | 빌드 시 통합이 필요한 플러그인 |