Graphviz circo 명령어 완벽 가이드: 원형 그래프 시각화와 실무 팁

개요

리눅스 환경에서 네트워크 토폴로지나 순환 프로세스를 원형 다이어그램으로 시각화할 때 Graphviz의 circo 명령어가 매우 유용합니다. 본 글에서는 circo의 핵심 사용 패턴부터 SVG/PNG 변환, 노드 간격 제어 및 한글 폰트 설정 등 실무에서 반드시 알아야 할 주의점까지 단계별로 정리합니다.

Graphviz 설치 및 circo 기본 원형 그래프 생성

Ubuntu 환경에서 원형 그래프 시각화 실습을 진행하기 위해 graphviz 패키지를 설치합니다.

sudo apt-get update -qq && sudo apt-get install -y graphviz

circo 명령어는 Graphviz 패키지에 포함된 원형(Circular) 레이아웃 엔진으로, 네트워크 토폴로지나 링 구조의 다이어그램을 원형으로 배치하여 시각화합니다.
-V 옵션을 지정하여 시스템에 설치된 circo 도구의 버전 정보를 확인합니다.
⚙️ [주요 옵션]

-T<format> : 출력 이미지 포맷(png, svg, pdf 등)을 지정합니다.
-o <file> : 생성된 그래프 결과물을 저장할 출력 파일명을 지정합니다.
-O : 입력 파일명을 기반으로 포맷 확장자를 추가한 출력 파일을 자동 생성합니다.
-V : 현재 설치된 Graphviz 및 도구의 버전 정보를 출력합니다.
-v : 그래프 배치 및 렌더링 과정의 상세 로그를 화면에 출력합니다.
-G<name>=<val> : 그래프의 전역 속성 값을 명령줄에서 직접 지정합니다.
-N<name>=<val> : 노드의 기본 속성 값을 명령줄에서 직접 지정합니다.
-E<name>=<val> : 에지(연결선)의 기본 속성 값을 명령줄에서 직접 지정합니다.

circo -V

원형 그래프 시각화 실습을 위해 4개의 라우터가 순환 형태로 연결된 무방향 네트워크 토폴로지 내용의 sample_ring.dot 파일을 생성합니다.

cat « ‘EOF’ > sample_ring.dot
graph RingNetwork {
node [shape=circle, style=filled, fillcolor=lightblue];
Router1 – Router2;
Router2 – Router3;
Router3 – Router4;
Router4 – Router1;
}
EOF

circo 명령어로 sample_ring.dot 파일을 원형 레이아웃으로 렌더링하여 sample_ring.png 이미지로 출력한 뒤 ls -lh 명령어로 생성된 파일의 세부 정보를 확인합니다.
-Tpng 옵션으로 출력 포맷을 PNG 이미지로 지정하고, -o 옵션으로 저장할 파일명을 지정합니다.

circo -Tpng sample_ring.dot -o sample_ring.png && ls -lh sample_ring.png

순환 프로세스(Digraph) 시각화 및 벡터 포맷(SVG) 출력

순환 업무 프로세스 시각화 실습을 위해 계획부터 모니터링까지 순환하는 방향성 그래프(digraph) 구조의 workflow_cycle.dot 파일을 생성합니다.

cat « ‘EOF’ > workflow_cycle.dot
digraph WorkflowCycle {
node [shape=box, style=“rounded,filled”, fillcolor=lightyellow];
edge [color=darkslategray, arrowhead=vee];
Plan -> Develop -> Test -> Deploy -> Monitor -> Plan;
}
EOF

circo 명령어로 workflow_cycle.dot 파일을 렌더링하여 확대해도 깨지지 않는 SVG 벡터 이미지로 출력한 뒤 head 명령어로 생성된 파일의 상위 10개 행을 확인합니다.
-Tsvg 옵션으로 출력 포맷을 SVG로 지정하고 -o 옵션으로 저장할 파일명을 지정합니다.
실행 결과 XML 선언문과 <svg> 태그가 포함된 벡터 그래픽 코드가 정상적으로 생성되었음을 확인할 수 있습니다.

circo -Tsvg workflow_cycle.dot -o workflow_cycle.svg && head -n 10 workflow_cycle.svg

노드 간격(mindist) 조정 및 중심 노드 지정 고급 옵션

노드 간격 조정 및 중심 노드 지정 실습을 위해 mindist 속성과 마스터-워커 연결 관계가 포함된 star_ring.dot 파일을 생성합니다.

cat « ‘EOF’ > star_ring.dot
graph StarRingTopology {
graph [mindist=1.2];
node [shape=ellipse, style=filled, fillcolor=honeydew];
Master [fillcolor=lightsalmon];
Master – {Worker1 Worker2 Worker3 Worker4};
Worker1 – Worker2 – Worker3 – Worker4 – Worker1;
}
EOF

circo 명령어에 -Groot=Master 옵션을 지정하여 Master 노드를 중앙에 배치한 원형 레이아웃으로 렌더링하고 file 명령어로 생성된 star_ring.png 파일의 포맷 정보를 확인합니다.
-Groot 옵션으로 특정 기준 노드를 중심에 고정하면 성형(Star)과 순환형(Ring)이 결합된 복잡한 네트워크 구조도 왜곡 없이 직관적으로 시각화할 수 있습니다.

circo -Groot=Master -Tpng star_ring.dot -o star_ring.png && file star_ring.png

한글 깨짐 방지 폰트 설정 및 대규모 그래프 작성 시 주의점

그래프 렌더링 시 한글 텍스트가 네모 기호로 깨지는 두부(Tofu) 현상을 방지하기 위해 fonts-nanum 패키지를 설치합니다.

sudo apt-get install -y fonts-nanum -qq

그래프, 노드, 에지의 글꼴을 NanumGothic으로 지정한 순환 업무 프로세스 다이어그램 내용의 korean_cycle.dot 파일을 생성합니다.

cat « ‘EOF’ > korean_cycle.dot
digraph KoreanCycle {
graph [fontname=“NanumGothic”];
node [fontname=“NanumGothic”, shape=circle, style=filled, fillcolor=aliceblue];
edge [fontname=“NanumGothic”];
“기획” -> “개발” -> “검증” -> “배포” -> “운영” -> “기획”;
}
EOF

circo 명령어로 korean_cycle.dot 파일을 렌더링하여 korean_cycle.png 이미지로 출력한 뒤 ls -lh 명령어로 생성된 파일의 세부 정보를 확인합니다.
지정한 한글 폰트가 정상 적용되어 텍스트 왜곡 없이 25KB 크기의 PNG 이미지 파일이 생성되었음을 확인할 수 있습니다.
원형 레이아웃 특성상 노드가 과도하게 많아지면 중심부를 가로지르는 연결선이 복잡하게 꼬일 수 있으므로, 대규모 그래프에서는 mindist 속성으로 노드 간격을 넓히거나 서브그래프로 그룹화하여 선 꼬임을 완화하는 것이 좋습니다.

circo -Tpng korean_cycle.dot -o korean_cycle.png && ls -lh korean_cycle.png

지금까지 Graphviz의 circo 명령어를 활용한 원형 그래프 시각화 방법과 실무 활용 팁을 간단하게 살펴보았습니다.
네트워크 토폴로지나 순환형 데이터 구조를 표현할 때 이번 가이드를 참고하여 직관적인 다이어그램을 완성해보시기 바랍니다.