최근 'gogv'라는 새로운 프로젝트가 Go 언어 생태계에 등장하며 그래프 시각화 도구인 Graphviz Dot의 기능을 순수 Go로 구현해 주목받고 있습니다. 이 프로젝트는 기존 Graphviz가 요구했던 Cgo(Go와 C 언어 바인딩)나 별도 Graphviz 설치 없이도 DOT 언어로 작성된 그래프를 SVG, xdot, JSON 등 다양한 형식으로 변환할 수 있게 합니다. 특히 웹어셈블리(WebAssembly) 모듈로도 제공되어 브라우저 내에서 직접 그래프를 렌더링하는 플레이그라운드까지 선보였습니다.
gogv는 Graphviz의 핵심 알고리즘인 랭킹(ranking), 교차 최소화(crossing minimization), 위치 지정(positioning), 에지 라우팅(edge routing) 등을 1993년과 1997년에 발표된 관련 논문과 Graphviz 16.1.0의 동작을 분석하여 '클린룸(clean-room) 구현' 방식으로 개발되었습니다. 이는 기존 Graphviz 코드의 직접적인 사용 없이, 공개된 자료만을 바탕으로 독자적으로 재구현했음을 의미합니다. 현재 gogv는 전체 DOT 문법을 지원하며, rect, ellipse, circle 등 다양한 노드 모양과 스타일, 그리고 테이블 레이블(table labels)과 같은 복잡한 요소까지 처리할 수 있습니다. 다만, 일부 색상 이름, 특정 노드/에지 스타일, 다른 레이아웃 엔진(neato, fdp 등)은 아직 지원하지 않습니다.
이러한 순수 Go 구현은 여러 면에서 중요한 의미를 가집니다. 첫째, Cgo 의존성을 제거함으로써 크로스 컴파일(cross-compile)이 용이해지고, 다양한 운영체제와 아키텍처에서 빌드 및 배포가 훨씬 간편해집니다. 둘째, Graphviz 설치 없이 Go 라이브러리 형태로 직접 사용할 수 있어 Go 기반 애플리케이션에 그래프 시각화 기능을 내장하기가 수월해집니다. 셋째, 웹어셈블리 지원은 클라이언트 측 브라우저에서 서버 부하 없이 복잡한 그래프를 동적으로 렌더링할 수 있는 가능성을 열어줍니다. 이는 데이터 시각화, 시스템 아키텍처 다이어그램, 코드 분석 도구 등 다양한 분야에서 개발 효율성을 높이고 사용자 경험을 개선하는 데 기여할 것으로 기대됩니다.