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/)