Markdown문법으로 Flowchart나 Erd와 같은 그래프를 그릴 수 있다는 사실!
요즘 Gitlab을 사용하면서 Gitlab Docs에 자주 들락거리는데, 마크다운으로 차트를 그릴 수 있는 Mermaid 라이브러리를 알게되었다.
이때까지 그래프는 DB diagram에서 작성한 것을 캡쳐해서 넣거나 피그마로 그려서 이용해야한다 생각했는데 이런 게 있었다니.. 까먹기 전에 호딱 정리해 보려 한다.
자바스크립트 기반으로 만들어졌다는 점. 딱히 자바스크립트 문법이 들어간 것은 아니다. 그래도 Gitlab Docs에서 소개하는 그래프 툴들 중에 가장 친숙했다.
Markdown Preview Mermaid Support
를 설치하면 바로 Preview를 통해 Markdown으로 그래프를 확인하며 바로 작성할 수 있다.# NPM
npm install mermaid
# Yarn
yarn add mermaid
# PNPM
pnpm add mermaid
id
는 한 노드(=박스)를 뜻한다. 보통 A
, B
, C
로 많이 사용한다.작성 방법
// mermaid.js
// 선언 1
flowchart LR
id
// 선언 2
graph LR
id
[]
또는 소괄호()
를 활용해준다. 문자열을 넣을 경우 ""
를 사용한다.// mermaid.js
// 대괄호
flowchart LR
id["Hello"]
// 소괄호
flowchart LR
id("Hello")
Preview
"``"
요런 형태!%%{init: {"flowchart": {"htmlLabels": false}} }%%
코드는 차트 형태를 변하게 해 주는 코드이므로 지금 단계에서는 신경 안 써도 된다. 그래도 궁금하면 여기 들어가서 한 번 읽고 오기// mermaid.js
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart LR
markdown["`This **is** _Markdown_`"]
newLines["`Line1
Line 2
Line 3`"]
markdown --> newLines
Preview
-
로 노드끼리 연결이 가능하다.flowchart LR
A --- B
flowchart LR
A--->|"화살표로 연결"|B
A---C
B--->D
D--->B
Preview
flowchart LR
A["큰 토끼🐰"]--->|"토끼가 좋아하는 것"|B
A---C("작은 토끼🐰")
B(["당근🥕"])--->D(["토끼풀☘️"])
D--->B
Preview
TD
, TB
를 사용하면 위에서 아래로, LR
은 왼쪽에서 오른쪽으로 화살표를 보낸다.위에서 아래
flowchart TD
Start --> Stop
왼쪽에서 오른쪽
flowchart LR
Start --> Stop
Preview
|
기호로 텍스트를 넣을 수 있다.flowchart LR
A--->|This is the text|B
그 외 점선으로 보내기, 선 굵게하기 등 아래 문법 설명은 해당 링크 참고
// 점선으로 화살표 보내기
flowchart LR
A-.->B;
// 점선에 문자 넣기
flowchart LR
A-. text .-> B
// 굵은 화살표 보내기
flowchart LR
A == text ==> B
// 체이닝 화살표
flowchart LR
A -- text --> B -- text2 --> C
// 여러개 연결하기1
flowchart LR
a --> b & c--> d
// 여러개 연결하기2
flowchart TB
A & B--> C & D
Preview
TB
- Top to bottomTD
- Top-down/ same as top to bottomBT
- Bottom to topRL
- Right to leftLR
- Left to rightflowchart LR
id1("A node with round edges")
id2(["A stadium-shaped node"])
id3[["A node in a subroutine shape"]]
id4[("Database")]
Preview id1부터 id4
end
를 사용할 때 전체 소문자로 사용해야한다. End
또는 END
사용 시 에러발생!flowchart TB
c1-->a2
subgraph one
a1-->a2
End
subgraph two
b1-->b2
End
subgraph three
c1-->c2
End
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%