최근 수정 시각 : 2025-11-16 11:00:02

Mermaid

<colcolor=#fff,#fff><bgcolor=#ff3670,#ff3670> Mermaid
파일:Mermaid.svg
<colbgcolor=#ff3670,#ff3670> 종류 다이어그램 기술 언어
최초 개발자 Knut Sveidqvist
출시 2014년 11월 16일#
안정 버전 v11.12.1 (2025년 10월 27일)
개발 언어 TypeScript
플랫폼 웹 브라우저
확장자 .mmd
.mermaid#
라이선스 MIT 라이선스#
링크 파일:홈페이지 아이콘.svg 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

1. 개요2. 역사3. 다이어그램 종류4. 문법
4.1. 플로우차트4.2. ERD
5. 특징6. 사용
6.1. 소프트웨어별 상세
7. 파생 소프트웨어8. 기타9. 관련 문서10. 외부 링크

1. 개요

파일:Mermaid-header.png

웹 기반의 다이어그램 기술 언어. 마크다운 등 언어에 임베딩이 가능하며, 다양한 종류의 다이어그램을 지원한다.

2. 역사

v10.9.0 버전부터 $$수식 삽입을 지원한다.# 내부 렌더링 엔진으로는 KaTeX을 사용한다.

2024년 8월 27일 v11.0.0 버전이 공개되었다.## 이때부터 내부 마크다운 파서가 mdast에서 marked로 바뀌었다.#

3. 다이어그램 종류

우측의 괄호는 블록 문법 이름이다.
  • 플로우차트(flowchart)
    가장 기본적이고 자주 쓰이는 다이어그램이다. shape 속성으로 노드 모양을 바꿀 수 있기에 가끔 아키텍처 대용으로 쓰이기도 한다.
  • 순서도(sequenceDiagram)
    흐름과 분기를 나열하는 순서도가 아닌, UML 등에서 볼 수 있는 정석적인 시퀀스 차트이다. 전자의 경우는 flowchart를 사용한다.
  • 클래스 다이어그램(classDiagram)
  • 상태 기계(stateDiagram-v2)
  • ERD(erDiagram)
    상대적으로 단순한 편이기 때문에 데이터베이스 수준 ERD를 그리는 게 아니라 전반적인 아키텍처만 그리는 데 용이하다. 디테일한 ERD를 그리려면 Prisma DSL이나 다른 언어를 사용하는 게 좋다.
  • 유저 스토리(journey)
  • 간트 차트(gantt)
  • 원 그래프(pie)
  • 사분면 차트(quadrantChart)
  • 요구사항 클래스(requirementDiagram)
  • Git(gitGraph)
  • C4 차트(C4Context)
  • 마인드맵(mindmap)
  • 타임라인(timeline)
  • ZenUML(zenuml)
    ZenUML 문법 지원용 블록.
  • 생키 차트(sankey)
  • 그래프(xychart)
  • 블록 다이어그램(block)
  • 패킷 구조(packet)
  • 칸반(kanban)
  • 아키텍처(architecture-beta)
  • 방사형 그래프(radar-beta)
  • 트리맵(treemap-beta)

4. 문법

4.1. 플로우차트

가장 자주 쓰이는 문법으로, 전반적으로 GraphvizDOT 등과 비슷하다. 기본적으로 flowchart 블록을 선언하는 것부터 시작한다. flowchart 키워드 이후로 차트 방향을 결정하는데, 아래 방향으로 뻗어나가는 경우 TD(top-to-down), 오른쪽으로 향하는 경우 LR(left-to-right)을 적는 식이다.

이후 블록 안쪽에 노드를 선언하고, -->과 같은 화살표로 방향을 연결한다. 가령
flowchart LR
    A --> B
와 같이 쓰면 상자 A에서 상자 B로 이어지는 플로우차트가 그려진다.

식별자와 다른 텍스트를 표시하고 싶은 경우, 식별자 옆에 대괄호를 열고
A[Hello, Namuwiki!]
와 같은 식으로 레이블 텍스트를 적을 수 있다. 기본적으로 verbatim하게 표시되지만, 마크다운 문법을 사용하고 싶다면
A["`**Hello**, <u>Namuwiki</u>`"]
와 같이 "``"로 해당 레이블을 감싸면 된다. 다만, v11 기준해당 따옴표 없이도 마크다운이 렌더되거나 이로 인해 개행#6048, 코드블럭#6201 등이 올바르게 처리되지 못하는 등의 문제가 여럿 있다.#6275 이런 문제가 발생한다면 v10으로 다운그레이드하는 것이 좋다.

subgraph ... end 문법으로 특정 노드를 묶어 부분그래프를 표시할 수 있다.

4.2. ERD

각각의 class를 식별자로 정의하고, 관계 문법으로 이어 관계를 표시한다.

엔티티에 속성을 표시할 수도 있는데, 엔티티의 이름 뒤에 중괄호로 블록을 열고 <타입>, <이름> 식으로 속성을 나열하면 된다.
erDiagram
customers {
	INT id
	VARCHAR2(32) name
	VARCHAR2(256) email
}
이 때 각 칼럼의 제약이나 설명 또한 추가할 수 있는데, 제약은 현재 PK(주키), FK(외래키), UK(고유키)만 사용 가능하다. NN이나 오라클식 UN, IDX 등은 불가능하다.# NN의 경우 어쩔 수 없이 필드명이나 타입명에 * 등을 붙혀서 나타내는 방법밖에 없다. 위 예시에 제약과 설명을 추가하면 다음처럼 쓸 수 있다.
erDiagram
customers {
	INT id PK "고객 고유 식별자"
	VARCHAR2(32) name "고객 성함"
	VARCHAR2(256) email UK "고객 인증용 이메일 주소"
}
현재 칼럼명이나 타입 등 속성명에 특수문자를 사용할 수 없는 이슈가 있다.#5123

5. 특징

처음부터 마크다운에 임베딩 될 목적으로 개발되었기 때문에 연동성이 매우 좋다. 또한 마크다운을 지원하던 기존 소프트웨어도 대부분 도입하기 쉬웠다 보니 현재는 온갖 곳에서 내장/확장으로 지원되는 장점을 누릴 수 있다. PlantUML, ZenUML 등 타 다이어그램 기술 언어와 다르게 매우 널리 성공한 셈.

대부분의 다이어그램 기술 언어가 공유하는 특징이긴 하지만, 별도의 GUI 툴 없이도 개발자들이 작성하거나 스크립트로 자동 생성하기 편하다. 특히 텍스트 포맷인 만큼 버전 관리가 굉장히 쉬운 편. 때문에 문서화에 자주 사용된다.

LLM의 업계 도입 이후로는 텍스트 기반 LLM이 생성하기 쉽다는 장점도 가세해 더 흥하는 편. 최초 개발자부터가 LLM 사용을 매우 옹호하는 성향이다.#

6. 사용

빠르게 작성 및 SVG 렌더링만이 필요할 경우 공식 라이브 에디터를 이용할 수 있다.

웹 기반인 만큼 렌더링 라이브러리를 웹에 임베딩하여 사용할 수 있다. 공식적으로 JSDeliver CDN#을 제공한다. 기본적으로 각 요소를 찾아 SVG로 DOM에 렌더링하는 방식이다.

적절한 번들러와 함께 패키지로 사용할 경우, npmmermaid로 배포되어 있다.# 이외에도 대부분의 무거운 차트와 KaTeX 종속성을 제거한 @mermaid-js/tiny가 존재한다.##

처음부터 마크다운에 임베딩해 작성하는 것을 목표로 한 만큼, 여러 마크다운 지원 소프트웨어에서 자동으로 지원되거나 플러그인 등으로 사용할 수 있다. 소프트웨어별 내장/확장 지원은 아래 문단에서 후술.

mmdc라는 이름의 CLI 형태로 단독으로 사용할 수도 있는데,# 브라우저 종속성을 제거하고 포팅한 것이 아니기 때문에 실행에 무려 Node.js 런타임과 Puppeteer# 필요하다(...).#

6.1. 소프트웨어별 상세

  • GitHub - 2022년 2월 14일부터 GFM에서 내장 지원된다.# 저장소, 이슈, GitHub Wiki, Gist에서 전부 지원된다. 단, 현재 Gist 프리뷰 모드에서는 렌더가 올바르게 되지 않으며, 이 경우 저장해야만 결과를 볼 수 있다.
  • GitLab - GLFM에서 PlantUML, Korki 등과 함께 지원되는 세 다이어그램 언어 중 하나이다.# 전반적인 사용법은 GitHub과 비슷하다.
  • Visual Studio Code - MermaidChart.vscode-mermaid-chart 확장으로 독립/임베드된 코드의 구문 강조, 개별 차트 단위 preview가 가능하다. 다만 다이어그램 언어 특성상 필요한 기능이 그닥 많지 않고 나머지는 죄다 AI 및 MermaidChart 클라우드 관련 기능만 있기 때문에 평은 좋지 않은 편. 특히 개별 차트 단위의 live preview만 가능하고 마크다운 전체의 프리뷰는 불가능하다는 치명적인 단점이 있다.#
    • 위 확장의 경우 기본 마크다운 프리뷰에서는 렌더가 안 되기 때문에 bierner.markdown-mermaid 같은 별도의 마크다운 프리뷰 확장을 사용하는 경우도 있다. 현재 Mermaid 관련으로는 해당 확장이 vscode 마켓플레이스에서 제일 다운로드 수가 많기 때문에 검색하면 본 확장이 맨 위에 뜨는 경우가 많다.
  • JetBrains 계열 IDE - 공식 확장으로 구문 강조, preview 등이 가능하다.
  • Jupyter Notebook - #7096이 머지되며 7.1 버전##부터 내장으로 지원된다.
  • Zed - 후술할 Tree-sitter 파서 기반으로 만든 zed-mermaid 확장이 존재한다.
  • 구글 문서 - 드라이브 확장으로 렌더링이 가능하다.
  • Slack - 확장을 설치해 프리뷰를 볼 수 있다.
  • mdBook - mdbook-mermaid 등의 전처리기를 사용해 SVG로 사전 렌더할 수 있다.
  • Notion - 2023년 이후로 내장 지원된다.## 별도의 블럭이 있는 것은 아니고 코드 블럭에서 언어를 Mermaid로 선택하고 코드를 작성하면 밑에 프리뷰가 생성된다.
  • MediaWiki
  • Obsidian - OFM에서 내장 지원된다.#
  • Typora - 내장 지원된다.#
  • LLM 인터페이스 - 대부분의 상용 서비스가 마크다운을 기반으로 출력하고 렌더하는 만큼 TeX 임베딩 등 고급 마크다운을 지원하는 여러 서비스에서 내장으로 지원되고 있다.

7. 파생 소프트웨어

8. 기타

  • 이름인 Mermaid는 별 뜻이 없다고 한다. 개발자인 Knut Sveidqvist에 따르면 자녀들이 TV로 인어공주를 보고 있었고 그대로 이름을 Mermaid라 지었다고.#
  • 개발자인 Knut Sveidqvist가 창업한 Mermaid Chart라는 이름의 회사가 존재한다. 서비스 자체는 흔한클라우드 협업에 AI 연동 정도가 전부라 큰 장점은 없다.

9. 관련 문서

10. 외부 링크

  • mermaid.live - 공식 라이브 에디터. monaco를 내장해 에디터를 띄워주며 우측에서 실시간 프리뷰를 확인할 수 있다.