Mermaid 설명
Mermaid는 텍스트로 다이어그램을 작성하는 JavaScript 기반 다이어그램 도구입니다. 코드를 작성하면 브라우저에서 자동으로 Flowchart, Sequence Diagram, Class Diagram, ERD 등의 그래픽으로 변환해 줍니다.
1. Mermaid란?
Mermaid의 핵심 철학은 다음과 같습니다.
다이어그램을 이미지 편집 도구로 그리는 대신 텍스트 코드로 정의한다.
예를 들어 다음 코드만 작성하면:
flowchart TD
A[사용자] --> B[웹 브라우저]
B --> C[웹 서버]
C --> D[데이터베이스]
다음과 같은 구조의 다이어그램이 생성됩니다.
사용자
↓
웹 브라우저
↓
웹 서버
↓
데이터베이스
즉, Mermaid는 Diagram as Code 방식의 대표적인 도구입니다.
2. Mermaid 개발 배경
기존 다이어그램 제작 방식에는 몇 가지 문제가 있었습니다.
기존 방식
Microsoft Visio, PowerPoint, Illustrator 등의 그래픽 도구를 이용하여 직접 도형을 배치했습니다.
예를 들어 시스템 구성도를 만들려면:
[서버]
│
├──── [DB]
│
├──── [Redis]
│
└──── [API]
각각의 박스와 선을 직접 배치해야 합니다.
문제는 시스템 규모가 커지면 수정이 매우 어려워진다는 것입니다.
예를 들어 서버 하나를 추가하면:
기존 다이어그램
↓
도형 추가
↓
선 연결
↓
위치 조정
↓
크기 조정
↓
전체 레이아웃 수정
이러한 문제를 해결하기 위한 방향이 텍스트 기반 다이어그램입니다.
3. Mermaid의 탄생
Mermaid는 Knut Sveinsson이 개발한 프로젝트로 알려져 있으며, 초기에는 개발자가 문서 안에서 쉽게 다이어그램을 표현할 수 있도록 만들어졌습니다.
핵심 아이디어는 매우 단순했습니다.
텍스트
↓
Mermaid 파서
↓
다이어그램 구조 생성
↓
SVG
↓
브라우저 표시
즉, 사람이 직접 그래픽을 그리는 것이 아니라 문법으로 구조를 설명하면 Mermaid가 그래픽을 생성합니다.
4. Markdown과 Mermaid
Mermaid가 크게 성장할 수 있었던 중요한 이유 중 하나가 Markdown과의 결합입니다.
예를 들어 Markdown 문서에서:
```mermaid
flowchart TD
A[Client] --> B[Server]
B --> C[Database]
```
처럼 작성할 수 있습니다.
따라서 다음과 같은 문서에 활용할 수 있습니다.
- 기술 문서
- 개발 설계서
- API 문서
- README
- 프로젝트 문서
- 교육 자료
- 시스템 구성도
- ERD
- 프로그램 흐름도
5. Mermaid의 발전
초기 Mermaid는 비교적 단순한 Flowchart와 Sequence Diagram 중심이었습니다.
이후 다양한 다이어그램 문법이 추가되면서 현재는 상당히 많은 종류의 다이어그램을 지원합니다.
대표적인 종류는 다음과 같습니다.
| 종류 | 용도 |
|---|---|
| Flowchart | 프로그램 흐름 |
| Sequence Diagram | 시스템 간 통신 |
| Class Diagram | 객체지향 설계 |
| ER Diagram | 데이터베이스 설계 |
| State Diagram | 상태 변화 |
| Gantt | 프로젝트 일정 |
| Pie Chart | 비율 |
| User Journey | 사용자 경험 |
| Git Graph | Git 브랜치 |
| Mindmap | 개념 구조 |
| Timeline | 시간 흐름 |
| Architecture | 시스템 아키텍처 |
6. Mermaid의 기본 동작 구조
Mermaid는 대략 다음과 같이 동작합니다.
flowchart TD
A[Mermaid Source] --> B[Parser]
B --> C[Diagram Model]
C --> D[Renderer]
D --> E[SVG]
E --> F[Browser]
개발자가 작성하는 것은 Mermaid Source입니다.
A --> B
B --> C
Mermaid 내부에서 이를 해석하고 SVG 형태로 렌더링합니다.
7. 가장 기본적인 Flowchart
코드
flowchart TD
A[시작] --> B[로그인]
B --> C{인증 성공?}
C -->|Yes| D[메인 화면]
C -->|No| E[로그인 실패]
E --> B
문법
flowchart TD
여기서 TD는 방향입니다.
| 방향 | 의미 |
|---|---|
| TD | Top → Down |
| TB | Top → Bottom |
| BT | Bottom → Top |
| LR | Left → Right |
| RL | Right → Left |
예를 들어:
flowchart LR
A[Client] --> B[API] --> C[Database]
왼쪽에서 오른쪽으로 흐릅니다.
8. 노드 작성법
가장 기본적인 노드는 다음과 같습니다.
flowchart TD
A[일반 사각형]
B(둥근 모서리)
C{조건}
D((원))
대표적으로:
A[텍스트]
B(텍스트)
C{텍스트}
D((텍스트))
를 사용할 수 있습니다.
9. 연결선
기본 연결은:
flowchart TD
A --> B
화살표 방향을 바꿀 수도 있습니다.
flowchart LR
A --> B
B -.-> C
C ==> D
의미는 대략 다음과 같습니다.
| 문법 | 의미 |
|---|---|
--> |
일반 화살표 |
--- |
일반 선 |
-.-> |
점선 화살표 |
==> |
굵은 화살표 |
10. 조건문
프로그램 설계에서 매우 자주 사용하는 기능입니다.
flowchart TD
A[로그인 요청] --> B{아이디와 비밀번호 확인}
B -->|성공| C[로그인]
B -->|실패| D[오류 메시지]
조건 노드는 {}를 사용합니다.
B{조건}
그리고:
B -->|성공| C
B -->|실패| D
형태로 분기합니다.
11. Subgraph
큰 시스템을 구성할 때 매우 중요한 기능입니다.
flowchart TD
subgraph Client["Client 영역"]
A[Web Browser]
B[Mobile App]
end
subgraph Server["Server 영역"]
C[FastAPI]
D[WebSocket]
end
subgraph Database["Database 영역"]
E[(PostgreSQL)]
F[(Redis)]
end
A --> C
B --> C
C --> D
C --> E
D --> F
실제 시스템 구성도를 만들 때 매우 유용합니다.
12. Sequence Diagram
서버 간 통신을 표현할 때 사용합니다.
sequenceDiagram
participant Client
participant Server
participant DB
Client->>Server: 로그인 요청
Server->>DB: 사용자 조회
DB-->>Server: 사용자 정보
Server-->>Client: 로그인 성공
예를 들어 REST API 동작을 표현할 수 있습니다.
sequenceDiagram
participant Browser
participant API
participant MariaDB
Browser->>API: GET /users
API->>MariaDB: SELECT users
MariaDB-->>API: User List
API-->>Browser: JSON Response
13. ERD
데이터베이스 설계에서도 Mermaid를 사용할 수 있습니다.
erDiagram
USER {
int user_id PK
string username
string password
datetime created_at
}
ORDER {
int order_id PK
int user_id FK
decimal amount
datetime created_at
}
USER ||--o{ ORDER : creates
관계형 데이터베이스 설계 문서에 상당히 유용합니다.
14. Class Diagram
객체지향 프로그램을 설계할 때 사용할 수 있습니다.
classDiagram
class User {
+int id
+string name
+login()
+logout()
}
class Order {
+int id
+decimal amount
+create()
+cancel()
}
User "1" --> "*" Order
C#, Java, Python 등의 클래스 설계 문서에 사용할 수 있습니다.
15. State Diagram
장치나 프로그램의 상태 변화를 표현할 수 있습니다.
예를 들어 IoT 장치라면:
stateDiagram-v2
[*] --> Boot
Boot --> Connecting
Connecting --> Connected
Connected --> Running
Running --> Error
Error --> Connecting
Running --> Shutdown
Shutdown --> [*]
ESP32, Raspberry Pi, 서버 등의 상태 머신 설계에 적합합니다.
16. Git Graph
Git 브랜치 구조도 표현할 수 있습니다.
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
개발 프로젝트의 브랜치 전략을 설명할 때 사용할 수 있습니다.
17. Gantt Chart
프로젝트 개발 일정을 표현할 수도 있습니다.
gantt
title 프로젝트 개발 일정
dateFormat YYYY-MM-DD
section 분석
요구사항 분석 :a1, 2026-08-01, 7d
section 설계
시스템 설계 :a2, after a1, 10d
section 개발
Backend 개발 :a3, after a2, 20d
Frontend 개발 :a4, after a2, 20d
section 테스트
통합 테스트 :a5, after a3, 10d
18. Mermaid와 실제 개발 문서
Mermaid의 가장 큰 장점은 다이어그램 자체가 소스 코드가 된다는 점입니다.
예를 들어 다음 프로젝트 구조를 문서화한다고 가정합니다.
flowchart TD
User[사용자]
Web[Web Browser]
API[FastAPI]
WS[WebSocket]
DB[(MariaDB)]
Redis[(Redis)]
User --> Web
Web --> API
Web --> WS
API --> DB
API --> Redis
WS --> Redis
이것을 Git 저장소에 .md 파일로 저장하면 됩니다.
예:
project/
├── README.md
├── docs/
│ ├── architecture.md
│ ├── api.md
│ ├── database.md
│ └── websocket.md
└── src/
그리고 architecture.md에 Mermaid 코드를 넣습니다.
19. Mermaid의 장점
① 텍스트 기반
그래픽 프로그램 없이 다이어그램을 수정할 수 있습니다.
② Git 관리
Mermaid 소스는 일반 텍스트이므로 Git으로 버전 관리할 수 있습니다.
Version 1
↓
Version 2
↓
Version 3
다이어그램 변경 이력도 추적할 수 있습니다.
③ 자동화
프로그램이 Mermaid 코드를 생성하도록 만들 수도 있습니다.
예를 들어 DB 구조를 분석하여 ERD Mermaid 코드를 자동 생성할 수 있습니다.
Database
↓
Schema 분석
↓
Table 분석
↓
Relation 분석
↓
Mermaid ERD 생성
④ 문서와 코드의 일치
프로그램 설계와 실제 문서를 함께 관리하기 좋습니다.
20. Mermaid의 단점
Mermaid가 모든 다이어그램 작업에 적합한 것은 아닙니다.
| 항목 | Mermaid |
|---|---|
| 빠른 시스템 구성도 | 매우 좋음 |
| 소프트웨어 설계 | 매우 좋음 |
| ERD | 좋음 |
| Sequence Diagram | 매우 좋음 |
| Git 문서화 | 매우 좋음 |
| 정밀한 그래픽 디자인 | 제한적 |
| 자유로운 도형 배치 | 제한적 |
| 인쇄용 고급 디자인 | 제한적 |
| 복잡한 회로도 | 부적합 |
따라서 개발 문서와 시스템 설계에는 매우 적합하지만 전문 그래픽 디자인 도구를 완전히 대체하는 목적은 아닙니다.
21. 실제 웹페이지에서 Mermaid 사용
Mermaid는 JavaScript 라이브러리이므로 웹페이지에서도 사용할 수 있습니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Mermaid Example</title>
<script type="module">
import mermaid from
"https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.esm.min.mjs";
mermaid.initialize({
startOnLoad: true
});
</script>
</head>
<body>
<h1>시스템 구성도</h1>
<pre class="mermaid">
flowchart TD
A[사용자] --> B[웹 브라우저]
B --> C[FastAPI]
C --> D[(MariaDB)]
</pre>
</body>
</html>
브라우저가 Mermaid 코드를 읽고 다이어그램을 생성합니다.
22. FastAPI 시스템에 적용한 예제
웹 시스템을 설계한다고 하면 다음과 같이 표현할 수 있습니다.
flowchart TD
U[사용자]
subgraph Frontend
W[Web Browser]
JS[JavaScript]
end
subgraph Backend
API[FastAPI]
WS[WebSocket]
end
subgraph Data
DB[(MariaDB)]
R[(Redis)]
end
U --> W
W --> JS
JS --> API
JS --> WS
API --> DB
API --> R
WS --> R
이런 방식으로 프로그램 설계서 자체를 Mermaid 코드 중심으로 작성할 수 있습니다.
23. Mermaid의 핵심 가치
Mermaid를 한 문장으로 정리하면:
다이어그램
↓
그래픽 파일
방식에서
다이어그램
↓
텍스트 코드
↓
렌더링
↓
SVG
방식으로 바꾼 도구라고 볼 수 있습니다.
특히 소프트웨어 개발에서는 다음 조합이 매우 강력합니다.
flowchart LR
Markdown --> Mermaid
Mermaid --> SVG
Git --> VersionControl[버전 관리]
Markdown --> Documentation[기술 문서]
즉, Markdown + Mermaid + Git을 결합하면 소프트웨어 설계도와 기술 문서를 코드처럼 관리할 수 있습니다.
'ChatGPT 대답 > 소프트웨어 관련' 카테고리의 다른 글
| 기초 학습 마인드맵 (0) | 2026.09.27 |
|---|---|
| Docker Engine (CLI 기반) 설치 및 사용 설명서 (0) | 2026.08.30 |
| 스마트 통합 플랫폼(가상 기획서) (0) | 2026.08.22 |
| Application Framework 역사 및 발전 방향 (0) | 2026.07.25 |
| Python으로 개발하는 인공지능 (0) | 2026.04.25 |
