📐

설계도 패턴 비교

SVG, Mermaid, draw.io, D2, Excalidraw — 어떤 방식으로 그릴 것인가

설계도를 그리는 방식은 크게 3가지로 나뉩니다. 코드 기반(Mermaid, D2)은 Git diff와 CI/CD 자동화가 가능하고, GUI 기반(draw.io, Excalidraw)은 비개발자도 쉽게 편집할 수 있으며, 직접 렌더링(SVG/HTML+CSS)은 완전한 제어가 가능하지만 작성 비용이 높습니다.

구조 다이어그램

3가지 접근법
📝
코드 기반
Diagrams as Code
Mermaid.js
D2
PlantUML
🖱️
GUI 기반
드래그 & 드롭
draw.io
Excalidraw
Lucidchart / Figma
🎨
직접 렌더링
SVG / HTML+CSS
SVG 직접 작성
HTML + Tailwind CSS
(app56이 이 방식!)
도구별 상세 비교
도구 방식 Git Diff 레이아웃 제어 비개발자 CI/CD 자동화
Mermaid.js 텍스트 약함 보통
D2 텍스트 강함 보통
PlantUML 텍스트 보통 어려움
draw.io GUI (XML) XML 완전 제한적
Excalidraw GUI (JSON) JSON 완전
SVG 직접 코드 완전 불가 수동
HTML+CSS 코드 완전 불가 수동
같은 다이어그램, 다른 문법
🧜 Mermaid.js GitHub README 바로 표시
graph LR
  A[Client] -->|HTTP| B[Load Balancer]
  B --> C[App Server 1]
  B --> D[App Server 2]
  C --> E[(Database)]
  D --> E
💎 D2 레이아웃 제어 + 테마
client: Client {shape: rectangle}
lb: Load Balancer {shape: hexagon}
app1: App Server 1
app2: App Server 2
db: Database {shape: cylinder}

client -> lb: HTTP
lb -> app1
lb -> app2
app1 -> db
app2 -> db
🖼️ draw.io GUI + XML 저장
드래그 드롭 연결
.drawio (XML) / .svg / .png 내보내기
VS Code 확장으로 에디터에서 바로 편집!
✏️ Excalidraw 손그림 스타일
Client
--->
Server
--->
DB
JSON 저장 → Git 관리 가능
"미완성 느낌" → 초기 논의에 최적
어떤 도구를 쓸까? — 선택 가이드
GitHub README에<br>바로 표시?
Mermaid.js
복잡한 레이아웃<br>+ Git 관리?
D2
비개발자도<br>편집 필요?
draw.io
팀 브레인스토밍<br>/ 초기 설계?
Excalidraw
웹앱 내<br>인터랙티브?
SVG / HTML+CSS
AI에게<br>자동 생성?
Mermaid / D2
Claude/GPT가 즉석 생성
Git 워크플로우 비교
코드 기반 (Mermaid/D2)
# PR diff에서 변경점 확인
- A -->|HTTP| B
+ A -->|gRPC| B
리뷰어가 변경 의도를 즉시 파악
바이너리 (PNG/Figma)
Binary files a/diagram.png
and b/diagram.png differ
뭐가 바뀌었는지 알 수 없음
draw.io (XML)
&lt;!-- diff 가능하지만 --&gt;
<mxCell value="Server"
x="340" y="180"/>
diff 가능하나 읽기 어려움
추천: 공식 문서 = draw.io, 코드 리뷰 = Mermaid/D2, 브레인스토밍 = Excalidraw, 웹앱 내장 = HTML+CSS

동작 흐름

1

SVG 직접 작성: <svg> 태그로 도형·선·텍스트를 직접 코딩. 완전한 픽셀 제어, 하지만 작성 비용 최고

2

HTML+CSS (app56 방식): Tailwind 박스 + flexbox/grid로 다이어그램 구성. 반응형 지원, 코드와 동일 스택

3

Mermaid.js: 마크다운 코드블록 안에 텍스트로 선언 → 자동 렌더링. GitHub/GitLab README에서 바로 표시

4

D2: 선언형 다이어그램 언어. Mermaid보다 레이아웃 제어가 뛰어나고 테마/스타일링 강력

5

draw.io (diagrams.net): GUI 에디터로 드래그&드롭. XML 저장이라 Git 관리 가능. VS Code 확장 지원

6

Excalidraw: 손그림 스타일의 화이트보드. 브레인스토밍·초기 설계에 적합. JSON 저장으로 Git 관리 가능

장점

  • 코드 기반: Git diff 가능, PR 리뷰에서 변경점 확인
  • 코드 기반: CI/CD에서 자동 렌더링 (mermaid-cli, d2)
  • GUI 기반: 비개발자도 편집 가능
  • draw.io: XML 저장이라 Git 관리 가능 + VS Code 확장
  • Excalidraw: 손그림 스타일로 "미완성 느낌" — 초기 논의에 적합
  • AI 시대: ChatGPT/Claude가 Mermaid/D2 코드를 즉석 생성

단점

  • 코드 기반: 복잡한 레이아웃 제어 어려움 (자동 배치 의존)
  • Mermaid: 대규모 다이어그램에서 가독성 저하
  • GUI 기반: 바이너리 파일은 Git diff 불가 (Lucidchart, Figma 등)
  • SVG 직접 작성: 작성 비용 높고 유지보수 어려움
  • draw.io XML: 수동 편집 시 깨지기 쉬움
  • Excalidraw: 공식 문서에는 너무 캐주얼

사용 사례

기술 블로그 / 문서화 (Mermaid → GitHub README) ADR(Architecture Decision Record) 첨부 (D2, Mermaid) 구성도 공식 문서 (draw.io → SVG 내보내기) 팀 브레인스토밍 / 초기 설계 (Excalidraw) 웹앱 내 인터랙티브 다이어그램 (SVG/HTML+CSS) CI/CD 자동 생성 (Mermaid CLI, D2 CLI → PNG/SVG)