시작하기

이 페이지

이 가이드는 설치부터 첫 글 게시까지 EmDash 사이트를 안내합니다.

사전 요구 사항

  • Node.js v22.12.0 이상(홀수 버전은 지원하지 않음)
  • npm, pnpm 또는 yarn
  • 코드 편집기(VS Code 권장)

새 프로젝트 만들기

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

안내에 따라 프로젝트 이름과 설정을 진행합니다.

개발 서버 실행

  1. 프로젝트 디렉터리로 이동합니다:

    cd my-emdash-site
  2. 의존성을 설치합니다:

    npm install
  3. 개발 서버를 시작합니다:

    npm run dev
  4. 브라우저에서 http://localhost:4321 을 엽니다

설정 마법사 완료하기

관리 패널을 처음 방문하면 EmDash 설정 마법사가 초기 구성을 안내합니다:

  1. http://localhost:4321/_emdash/admin 으로 이동합니다

  2. 설정 마법사로 리디렉션됩니다. 다음을 입력합니다:

    • Site Title — 사이트 이름
    • Tagline — 짧은 설명
    • Admin Email — 이메일 주소
  3. Create Site 를 클릭해 패스키를 등록합니다

  4. 브라우저에서 Touch ID, Face ID, Windows Hello 또는 보안 키로 패스키를 만들라는 안내가 나옵니다

패스키가 등록되면 로그인되어 관리 대시보드로 이동합니다.

콘텐츠 개요, 최근 활동, 탐색 사이드바가 있는 EmDash 관리 대시보드

첫 번째 글

  1. 관리 사이드바에서 Content 아래 Posts 를 클릭합니다.

  2. New Post 를 클릭합니다.

  3. 제목을 입력하고 서식 있는 텍스트 편집기로 본문을 작성합니다.

    서식 도구 모음과 게시 사이드바가 있는 EmDash 글 편집기
  4. 상태를 Published 로 두고 Save 를 클릭합니다.

  5. 사이트 홈을 열면 재빌드 없이 글이 바로 보입니다.

프로젝트 구조

EmDash 프로젝트는 표준 Astro 구조에 몇 가지가 추가됩니다:

my-emdash-site/
├── astro.config.mjs      # Astro + EmDash 설정
├── src/
│   ├── live.config.ts    # Live Collections 설정
│   ├── pages/
│   │   ├── index.astro   # 홈페이지
│   │   └── posts/
│   │       └── [...slug].astro  # 동적 글 페이지
│   ├── layouts/
│   │   └── Base.astro    # 기본 레이아웃
│   └── components/       # Astro 컴포넌트
├── .emdash/
│   ├── seed.json         # 템플릿 시드 파일
│   └── types.ts          # 생성된 TypeScript 타입
└── package.json

설정 파일

astro.config.mjs

EmDash를 Astro 통합으로 구성합니다:

import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

src/live.config.ts

EmDash를 Astro 콘텐츠 시스템에 연결합니다:

import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";

export const collections = {
	_emdash: defineLiveCollection({ loader: emdashLoader() }),
};

환경 변수

프로덕션 배포에서는 다음을 설정해야 합니다:

# Required for authentication
EMDASH_AUTH_SECRET=your-secret-here

# Optional: for content preview
EMDASH_PREVIEW_SECRET=your-preview-secret

안전한 인증 시크릿은 다음으로 생성합니다:

npx emdash auth secret

페이지에서 콘텐츠 조회하기

Astro 페이지에서 EmDash 쿼리 함수를 사용합니다. Astro live collections 패턴을 따르며 컬렉션은 { entries, error }, 단일 항목은 { entry, error }를 반환합니다:

---
import { getEmDashCollection } from "emdash";
import Base from "../layouts/Base.astro";

const { entries: posts } = await getEmDashCollection("posts");
---

<Base title="Home">
  <h1>Latest Posts</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

단일 항목의 경우:

---
import { getEmDashEntry } from "emdash";

const { slug } = Astro.params;
const { entry: post } = await getEmDashEntry("posts", slug);

if (!post) {
  return Astro.redirect("/404");
}
---

<h1>{post.data.title}</h1>

TypeScript 타입 생성

완전한 타입 안전을 위해 데이터베이스 스키마에서 타입을 생성합니다:

npx emdash types

모든 컬렉션에 대한 인터페이스가 .emdash/types.ts에 생성됩니다. 편집기가 필드 이름을 자동 완성하고 타입 오류를 잡아줍니다.

다음 단계

이제 동작하는 EmDash 사이트가 있습니다. 계속하려면: