Skip to content

Commit 4a39abd

Browse files
Update: Mermaid 다이어그램 지원 추가
- 조건부 로드를 통해 Mermaid 다이어그램을 지원하는 기능 추가 - 관련 HTML 파일을 포함하여 페이지에서 다이어그램을 사용할 수 있도록 설정
1 parent 5d433e1 commit 4a39abd

File tree

3 files changed

+268
-0
lines changed

3 files changed

+268
-0
lines changed

_includes/mermaid.html

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<!-- Mermaid 다이어그램 지원 -->
2+
<script type="module">
3+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
4+
5+
// Mermaid 초기화
6+
mermaid.initialize({
7+
startOnLoad: true,
8+
theme: 'default',
9+
securityLevel: 'loose',
10+
fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, sans-serif'
11+
});
12+
13+
// 페이지 로드 완료 후 실행
14+
document.addEventListener('DOMContentLoaded', async function() {
15+
// .language-mermaid 클래스를 가진 코드 블록 찾기
16+
const mermaidBlocks = document.querySelectorAll('pre > code.language-mermaid');
17+
18+
// 각 코드 블록을 mermaid 클래스 pre 태그로 변환
19+
mermaidBlocks.forEach((codeBlock) => {
20+
const preElement = codeBlock.parentElement;
21+
const mermaidContent = codeBlock.textContent;
22+
23+
// 새로운 pre 요소 생성
24+
const newPre = document.createElement('pre');
25+
newPre.className = 'mermaid';
26+
newPre.textContent = mermaidContent;
27+
28+
// 기존 요소를 새 요소로 교체
29+
preElement.parentNode.replaceChild(newPre, preElement);
30+
});
31+
32+
// Mermaid 렌더링 실행
33+
await mermaid.run({
34+
querySelector: '.mermaid',
35+
});
36+
});
37+
</script>
38+
39+
<!-- Mermaid 다이어그램 스타일 최적화 -->
40+
<style>
41+
.mermaid {
42+
text-align: center;
43+
margin: 2rem 0;
44+
background: transparent;
45+
border: none;
46+
overflow: visible;
47+
}
48+
49+
.mermaid svg {
50+
max-width: 100%;
51+
height: auto;
52+
display: block;
53+
margin: 0 auto;
54+
}
55+
56+
/* 다크모드 대응 */
57+
@media (prefers-color-scheme: dark) {
58+
.mermaid {
59+
filter: invert(1) hue-rotate(180deg);
60+
}
61+
62+
.mermaid svg {
63+
background: transparent;
64+
}
65+
}
66+
</style>

_layouts/default.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
6969
<script src="{{ '/assets/js/main.js' | relative_url }}"></script>
7070

71+
<!-- Mermaid 다이어그램 지원 (조건부 로드) -->
72+
{% if page.mermaid %}
73+
{% include mermaid.html %}
74+
{% endif %}
75+
7176
<!-- Google Tag Manager (noscript) -->
7277
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T3KNH95M"
7378
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
---
2+
layout: post
3+
title: "Mermaid 다이어그램 테스트 포스트"
4+
date: 2025-01-01 10:00:00 +0900
5+
categories: [Test, Mermaid]
6+
tags: [mermaid, diagram, flowchart, test]
7+
author: "Kevin Park"
8+
excerpt: "사이트에 추가된 Mermaid 다이어그램 기능을 테스트하는 포스트입니다."
9+
mermaid: true
10+
---
11+
12+
# Mermaid 다이어그램 기능 테스트
13+
14+
이 포스트는 새롭게 추가된 Mermaid 다이어그램 기능을 테스트하기 위한 샘플 포스트입니다.
15+
16+
## 📊 플로우차트 예시
17+
18+
```mermaid
19+
graph TD
20+
A[프로젝트 시작] --> B{요구사항 분석}
21+
B -->|명확함| C[설계 단계]
22+
B -->|불명확함| D[추가 조사]
23+
D --> B
24+
C --> E[개발 단계]
25+
E --> F[테스트]
26+
F --> G{테스트 통과?}
27+
G -->|통과| H[배포]
28+
G -->|실패| E
29+
H --> I[운영 및 유지보수]
30+
```
31+
32+
## 🔄 시퀀스 다이어그램
33+
34+
```mermaid
35+
sequenceDiagram
36+
participant U as 사용자
37+
participant F as 프론트엔드
38+
participant B as 백엔드
39+
participant D as 데이터베이스
40+
41+
U->>F: 로그인 요청
42+
F->>B: 인증 정보 전송
43+
B->>D: 사용자 정보 조회
44+
D-->>B: 사용자 데이터 반환
45+
B-->>F: 인증 토큰 발급
46+
F-->>U: 로그인 완료
47+
```
48+
49+
## 📈 간트 차트
50+
51+
```mermaid
52+
gantt
53+
title 프로젝트 일정
54+
dateFormat YYYY-MM-DD
55+
section 기획
56+
요구사항 분석 :done, planning, 2025-01-01, 2025-01-10
57+
설계 :done, design, 2025-01-05, 2025-01-15
58+
section 개발
59+
프론트엔드 개발 :active, frontend, 2025-01-10, 2025-02-10
60+
백엔드 개발 :backend, 2025-01-15, 2025-02-15
61+
section 테스트
62+
단위 테스트 :testing, 2025-02-01, 2025-02-20
63+
통합 테스트 :integration, 2025-02-15, 2025-02-25
64+
```
65+
66+
## 🏗️ 클래스 다이어그램
67+
68+
```mermaid
69+
classDiagram
70+
class User {
71+
+String name
72+
+String email
73+
+Date createdAt
74+
+login()
75+
+logout()
76+
}
77+
78+
class Post {
79+
+String title
80+
+String content
81+
+Date publishedAt
82+
+User author
83+
+publish()
84+
+draft()
85+
}
86+
87+
class Comment {
88+
+String content
89+
+Date createdAt
90+
+User author
91+
+Post post
92+
+create()
93+
+delete()
94+
}
95+
96+
User ||--o{ Post : writes
97+
User ||--o{ Comment : writes
98+
Post ||--o{ Comment : has
99+
```
100+
101+
## 🔢 파이 차트
102+
103+
```mermaid
104+
pie title 기술 스택 사용률
105+
"JavaScript" : 35
106+
"Python" : 25
107+
"Java" : 20
108+
"TypeScript" : 15
109+
"기타" : 5
110+
```
111+
112+
## 📋 상태 다이어그램
113+
114+
```mermaid
115+
stateDiagram-v2
116+
[*] --> 초안
117+
초안 --> 검토중 : 제출
118+
검토중 --> 승인됨 : 승인
119+
검토중 --> 수정필요 : 거절
120+
수정필요 --> 초안 : 수정
121+
승인됨 --> 게시됨 : 게시
122+
게시됨 --> 보관됨 : 보관
123+
보관됨 --> [*]
124+
```
125+
126+
## 🌐 ER 다이어그램
127+
128+
```mermaid
129+
erDiagram
130+
USER ||--o{ POST : creates
131+
USER ||--o{ COMMENT : writes
132+
POST ||--o{ COMMENT : has
133+
POST }|--|| CATEGORY : belongs_to
134+
135+
USER {
136+
int id PK
137+
string name
138+
string email UK
139+
datetime created_at
140+
}
141+
142+
POST {
143+
int id PK
144+
string title
145+
text content
146+
int user_id FK
147+
int category_id FK
148+
datetime published_at
149+
}
150+
151+
COMMENT {
152+
int id PK
153+
text content
154+
int user_id FK
155+
int post_id FK
156+
datetime created_at
157+
}
158+
159+
CATEGORY {
160+
int id PK
161+
string name UK
162+
string description
163+
}
164+
```
165+
166+
## ✅ 사용법 안내
167+
168+
포스팅에서 Mermaid 다이어그램을 사용하려면:
169+
170+
1. **Front Matter에 설정 추가:**
171+
```yaml
172+
---
173+
layout: post
174+
title: "포스트 제목"
175+
mermaid: true # 이 줄 추가!
176+
---
177+
```
178+
179+
2. **마크다운에서 사용:**
180+
````markdown
181+
```mermaid
182+
graph TD
183+
A[시작] --> B[끝]
184+
```
185+
````
186+
187+
3. **지원되는 다이어그램 종류:**
188+
- 플로우차트 (`graph`, `flowchart`)
189+
- 시퀀스 다이어그램 (`sequenceDiagram`)
190+
- 클래스 다이어그램 (`classDiagram`)
191+
- 상태 다이어그램 (`stateDiagram`)
192+
- ER 다이어그램 (`erDiagram`)
193+
- 간트 차트 (`gantt`)
194+
- 파이 차트 (`pie`)
195+
- 그리고 더 많은 종류...
196+
197+
Mermaid 문법에 대한 자세한 정보는 [공식 문서](https://mermaid.js.org/)를 참고하세요!

0 commit comments

Comments
 (0)