나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 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. 다이어그램 종류

우측의 괄호는 블록 문법 이름이다.

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. 소프트웨어별 상세

7. 파생 소프트웨어

8. 기타

9. 관련 문서

10. 외부 링크