Mermaid 문법 치트시트

mermaid에는 방대한 레퍼런스와, 사람들이 그리는 거의 모든 것을 커버하는 작은 부분집합이 있습니다. 이 페이지가 바로 그 부분집합입니다. 모양, 화살표, 그룹화, 색상, 그리고 다이어그램 유형별로 복사해 붙여넣을 수 있는 예제 하나씩. 아래 모든 스니펫은 그대로 렌더링됩니다 — 에디터에 붙여넣어 확인해보세요.

가장 짧게 작동하는 다이어그램

순서도는 선언 한 줄과 화살표 한 개만 있으면 됩니다. TD는 위에서 아래를 뜻하고, 폭이 넓은 프로세스에 더 어울리는 좌우 방향은 LR을 씁니다.

flowchart TD
  A[Start] --> B{Ready?}
  B -->|Yes| C[Ship it]
  B -->|No| A
위에서 아래로 이어지는 세 개짜리 노드 순서도입니다.

A, B, C는 노드 id — 내부용 이름일 뿐 화면에는 그려지지 않습니다. 대괄호 안 텍스트가 라벨이며, 대괄호 스타일이 모양을 결정합니다.

노드 모양

모양은 라벨을 감싸는 구분 기호 쌍으로 정해집니다. 기억해둘 만한 것들은 다음과 같습니다:

문법모양일반적인 용도
A[Text]사각형단계 또는 동작
A(Text)둥근 사각형시작 또는 끝 지점
A([Text])알약형시작/종료 표시
A[[Text]]서브루틴다른 프로세스 호출
A[(Text)]실린더데이터베이스 또는 저장소
A((Text))원분기점
A{Text}다이아몬드결정
A{{Text}}육각형준비 단계
A[/Text/]평행사변형입력 또는 출력
A[/Text\]사다리꼴수동 작업

라벨에 대괄호, 콜론, 따옴표가 들어가면 따옴표로 감싸세요: A["Load (raw) data"]. 따옴표가 없으면 파서가 문장부호를 문법으로 해석합니다.

화살표

문법결과
A --> B화살표
A --- B화살표 머리 없는 선
A -.-> B점선 화살표
A ==> B굵은 화살표
A -->|label| B라벨이 붙은 화살표
A --> B --> C한 줄로 쓰는 체인
A --> B & C하나의 출발점, 두 개의 도착점

화살표 길이도 의미가 있습니다. -->는 한 단계(rank)를 나타내고, --->는 대상을 한 단계 더 아래로 밀어냅니다. mermaid가 제공하는 레이아웃 제어 중 가장 단순한 방법입니다.

서브그래프로 그룹화하기

subgraph는 노드들 주위에 라벨이 붙은 상자를 그립니다. 서브그래프는 중첩할 수 있고, 화살표는 그 경계를 자유롭게 넘나들 수 있습니다.

flowchart LR
  subgraph api["API"]
    H[Handler] --> S[(Postgres)]
  end
  subgraph worker["Worker"]
    Q[Queue] --> W[Job]
  end
  H --> Q
각자 저장소를 가진 두 개의 서비스.

색상과 스타일링

style은 노드 하나를 칠합니다. classDef와 class를 함께 쓰면 여러 노드를 한 번에 칠할 수 있는데, 노드가 서너 개를 넘어가면 이 방법이 필요해집니다.

flowchart TD
  A[OK] --> B[Failed]
  style A fill:#16a34a,stroke:#333,color:#fff
  classDef bad fill:#dc2626,stroke:#333,color:#fff
  class B bad

색상은 다이어그램 소스의 일부이므로 내보내기 후에도 유지되고 파일과 함께 이동합니다. 여기서는 렌더링 도구의 테마 설정에 의존하는 부분이 전혀 없습니다.

다이어그램 유형별 예제 하나씩

시퀀스 다이어그램

sequenceDiagram
  participant User
  participant API
  participant DB
  User->>API: request
  API->>DB: query
  DB-->>API: rows
  API-->>User: response

클래스 다이어그램

classDiagram
  class Animal {
    +String name
    +move()
  }
  class Dog {
    +bark()
  }
  Animal <|-- Dog

상태 다이어그램

stateDiagram-v2
  [*] --> Idle
  Idle --> Running: start
  Running --> Idle: stop
  Running --> [*]: finish

개체-관계 다이어그램

erDiagram
  CUSTOMER ||--o{ ORDER : places
  ORDER ||--|{ LINE_ITEM : contains
  CUSTOMER {
    string name
    string email
  }

간트 차트

gantt
  title Project
  dateFormat YYYY-MM-DD
  section Phase 1
  Task 1 :a1, 2026-01-01, 5d
  Task 2 :after a1, 5d

mermaid가 자체적으로 렌더링되는 곳

  • GitHub — 이슈, 풀 리퀘스트, 댓글, README 파일에서 펜스 처리된 ```mermaid 블록이 렌더링됩니다.
  • GitLab — 같은 방식의 펜스 블록이 이슈, 머지 리퀘스트, 위키에서 렌더링됩니다.
  • Notion — 언어를 Mermaid로 설정한 코드 블록이 소스 옆에 렌더링됩니다.
  • Obsidian — 미리보기 모드에서 펜스 처리된 mermaid 블록이 렌더링됩니다.
  • 문서 사이트 — Docusaurus, MkDocs Material, VitePress 모두 mermaid 블록을 지원합니다.

다이어그램을 이미지가 아니라 mermaid로 유지하는 진짜 이유가 여기 있습니다. 다이어그램이 그것을 설명하는 대상과 같은 텍스트 파일 안에 살아있으므로, 코드 리뷰에서 무엇이 바뀌었는지 그대로 볼 수 있습니다.

이 페이지의 어떤 스니펫이든 시도해보세요

코드 탭에 붙여넣으면 즉시 렌더링됩니다 — 아니면 캔버스에서 같은 다이어그램을 직접 만들고 문법을 거꾸로 읽어보세요.

자주 묻는 질문

노드 라벨 안에 줄바꿈을 넣으려면 어떻게 하나요?

따옴표로 감싼 라벨 안에서 <br>을 쓰세요: A["First line<br>Second line"]. mermaid는 라벨을 HTML로 렌더링하므로, 나머지 문법이 HTML이 아니어도 이 태그는 작동합니다.

라벨 때문에 다이어그램이 깨지는 이유는 뭔가요?

거의 항상 라벨 안에 따옴표로 감싸지 않은 대괄호, 괄호, 콜론, 따옴표가 있기 때문입니다. 라벨 전체를 큰따옴표로 감싸면 파서가 문장부호를 문법으로 해석하지 않게 됩니다.

레이아웃을 제어할 수 있나요?

간접적으로만 가능합니다. 방향(TD, LR, BT, RL)을 고르고, 더 긴 화살표(--->)로 노드 사이를 더 벌리고, 관련 노드를 서브그래프로 묶으세요. 나머지는 mermaid가 계산합니다 — 좌표는 없습니다.

이 에디터는 어떤 mermaid 버전을 쓰나요?

현재 메이저 버전인 Mermaid 11을 사용하므로, v10과 v11 문법으로 문서화된 모든 것이 여기서 렌더링됩니다.

더 많은 가이드

  1. Mermaid를 PNG나 SVG로 내보내기

    mermaid 다이어그램에서 빠져나오는 네 가지 방법 — PNG, SVG, .mmd 소스, Markdown 블록 — 그리고 각각이 정답이 되는 순간.

  2. Mermaid 시퀀스 다이어그램

    참가자, 화살표 종류, 활성화 바, 반복문, alt 블록까지 — 바로 실행해볼 수 있는 예제로 배우는 시퀀스 다이어그램 문법 전체.

에디터를 여세요. 무료 — 가입 없음.

빈 캔버스, 코드 탭, 모든 내보내기 옵션까지 — 무료로, 브라우저에서, 지금 바로.