Graphviz
Graphviz는 구조화된 수학적 그래프 및 네트워크 체계를 다이어그램으로 시각화하기 위해 AT&T Labs Research에서 초기 개발을 주도한 오픈소스 그래픽 렌더링 소프트웨어 도구이다. 복잡한 추상 데이터 구조를 시각적 객체로 자동 변환하는 목적으로 널리 사용된다.
주요 특징은 다음과 같다.
- DOT 명세 언어 (DOT Language): 텍스트 기반의 고유한 그래프 명세 언어인 DOT 구문을 채택하였다. 사용자는 물리적인 좌표나 위치를 지정할 필요 없이 노드(Node), 간선(Edge), 그리고 시각적 속성(Attributes)만 논리적으로 정의하여 스크립트에 서술하면 된다.
- 다중 자동 레이아웃 엔진: 데이터의 구조적 특성에 맞춰 최적의 배치를 계산하는 다양한 내부 알고리즘 단위를 제공한다. 방향성 그래프를 위한
dot, 무방향 스프링(Spring) 모델 기반의neato, 그래프 노드 수가 많은 대규모 네트워크를 위한 다단(Multiscale) 레이아웃 엔진인sfdp등이 포함된다. - 광범위한 연결성 및 포맷 출력: 독립적인 명령줄 인터페이스(CLI) 도구로서 기능할 뿐만 아니라, Python, C, Go, Java 등 다수의 프로그래밍 언어에서 호출하여 사용할 수 있는 라이브러리를 포함한다. 산출물은 SVG, PNG, PDF, PostScript 등으로 컴파일 가능하다.
- 수학적 및 소프트웨어 공학 도구로의 통합: Doxygen, Sphinx, 앞서 설명한 pipdeptree와 같은 수많은 서구권 기반 오픈소스 정보 추출 시스템 및 문서 자동화 프레임워크의 내부 시각화 백엔드로 광범위하게 채택되어 사용된다.
다이어그램 및 논리적 구조를 코드로 작성하여 시각화하는 다른 주요 도구들과의 비교 데이터는 다음과 같다.
| 특징 | Graphviz | Mermaid | PlantUML |
|---|---|---|---|
| 개발 초기 주체 | AT&T Labs Research (미국) | 오픈소스 커뮤니티 (Knut Sveidqvist 등) | 오픈소스 커뮤니티 (Arnaud Roques 등) |
| 사용 문법/언어 | 자체 DOT 언어 | 마크다운(Markdown) 기반 자체 구문 | 자체 도메인 특화 언어 (DSL) |
| 주요 렌더링 초점 | 수학적 연산 기반의 일반 네트워크 및 구조 그래프 | 웹 브라우저 호환 목적의 다이어그램 | 소프트웨어 모델링 (UML 다이어그램) 및 차트 |
| 코어 실행 환경 | C 언어 기반 네이티브 데스크톱 (CLI) | 브라우저 기반 (JavaScript 라이브러리) | Java 런타임 환경 (JVM 기반) |
| 의존성 관계 | 자체 연산 처리 엔진 구성으로 독립적 수행 가능 | 브라우저 및 DOM 환경에 렌더링 종속됨 | 레이아웃 연산 처리를 위해 내부적으로 Graphviz 도구에 의존함 |
출처 데이터:
- Graphviz Official Documentation. “About Graphviz.” (https://graphviz.org/about/)
- Gansner, E. R., & North, S. C. (2000). “An open graph visualization system and its applications to software engineering.” Software: Practice and Experience, 30(11), 1203-1233. John Wiley & Sons, Ltd. (https://dl.acm.org/doi/10.5555/369255.369259)
- PlantUML Official Documentation. “Graphviz Installation.” (https://plantuml.com/graphviz-dot)
Entities
Graphviz DOT Language
Graphviz DOT 데이터(또는 DOT 언어)는 Graphviz 소프트웨어 생태계 내부에서 네트워크와 그래프의 논리적 구조를 정의하기 위해 사용하는 일반 텍스트 기반의 범용 그래프 명세 언어(Graph Description Language)이다. 해당 데이터 포맷은 사용자가 시각적 레이아웃 좌표를 수동으로 지정할 필요 없이, 개체 간의 논리적인 연결 관계만을 서술할 수 있도록 텍스트 기반으로 설계되었다.
주요 특징 및 데이터 구성 요소는 다음과 같다.
- 그래프 유형의 선언 (Graph Types): 문서의 최상단에서 구조의 성격을 선언한다. 방향성이 존재하는 그래프는
digraph(Directed Graph) 키워드를, 방향성이 배제된 양방향 그래프는graph키워드를 사용하여 코드 블록({ })을 연다. - 노드 및 간선 매핑 (Nodes and Edges): 개체를 의미하는 노드(Node)는 알파벳이나 숫자 형태의 식별자 텍스트로 자유롭게 선언된다. 데이터 간의 관계를 의미하는 간선(Edge)의 경우, 방향 그래프(
digraph) 환경에서는 연결 화살표(->)를, 무방향 그래프(graph) 환경에서는 이중 대시(--) 기호를 사용하여 상호 종속성을 정의한다. - 속성 변수 부여 (Attributes): 각 노드나 간선 선언의 끝에 대괄호(
[])를 열고[key=value]형태의 변수를 입력한다. 이를 통해 개별 데이터의 기하학적 형태(shape), 윤곽선 및 채우기 색상(color,fillcolor), 출력 텍스트(label), 선의 두께와 스타일(style,penwidth) 등 그래픽 렌더링에 필요한 시각적 속성을 제어한다. - 서브그래프(논리적 하위 구조) 및 클러스터 (Subgraphs & Clusters):
subgraph키워드를 활용하여 메인 그래프 내에 논리적인 하부 트리 데이터를 묶을 수 있다. 서브그래프의 식별자 이름에cluster_접두사를 부여할 경우, 렌더링 엔진은 해당 데이터들을 시각적으로 묶인 형태의 상자(Bounding box) 구역으로 분리하여 출력한다.
수학적 노드 및 네트워크 구조를 표현하거나 저장하는 데 주로 사용되는 다른 데이터 포맷들과의 비교 데이터는 다음과 같다.
| 특징 | Graphviz DOT | GraphML | JSON (그래프 포맷) |
|---|---|---|---|
| 기반 문법(Syntax) | 자체 텍스트 기반 제어 구문 | XML 마크업 언어 기반 | 키-값 기반 데이터 포맷 (JSON) |
| 작성 및 가독성 (Human Readability) | 매우 뛰어남 (직관적인 관계 서술 특화) | 낮음 (기계 분석을 위한 복잡한 태그 트리) | 파싱 도구 의존 (수동 작성 시 구문 길어짐) |
| 최우선 목적 | 사람이 직접 스크립팅하여 구조를 렌더링 도구에 전달 | 이기종 분석 시스템 간의 호환되는 그래프 데이터 교환 및 영구 보존 | 웹 브라우저 기반 시각화 엔진(예: Cytoscape.js)의 데이터 로드 |
| 표준 분류 및 제어 | AT&T 주도의 개발 및 유지 관리 | GraphML Working Group 제정 | JSON 명세 (단, 그래프 데이터 스키마 자체는 업계 파편화됨) |
출처 데이터:
- Graphviz Official Documentation. “The DOT Language.” (https://graphviz.org/doc/info/lang.html)
- Graphviz Official Documentation. “Node, Edge and Graph Attributes.” (https://graphviz.org/doc/info/attrs.html)
- Brandes, U., et al. (2001). “GraphML Progress Report.” Graph Drawing 2001, Springer. (https://graphml.graphdrawing.org/)