golang을 위한 dependency graph 도구들!
node.js / golang이 큰 장점을 가진 언어임에도 불구하고 쉽게 개발자들이 선뜻 적용하지 못하는 이유가 새로운 분야의 학습 곡선과 문제가 발생했을시 drill down해서 해결하는 노하우가 아직 널리 공유되지 못하는 이유이기도 하며, 여러 프레임워크의 아키텍처나 구조등이 개발자에게 널리 공유되지 못한것도 있다.
일전의 포스트에서와 본것과 같이 etcd를 요즘 살펴보고 있는데, go lang을 잘 적용한 프로젝트라서 보려고 해도 이 녀석의 아키텍처가 잘 공유되어 있지는 않다.
어떠한 철학으로 layering되어 있고, 의존성들은 어떻게 관리하는지 더 나아가 profiling까지 보고 싶으나… golang은 아직 역사가 짧기 때문에 profiling이나 의존성 관계를 파악하는 도구등이 java / .net 진영보다는 부족하다고 할수 있다.
급한데로 찾아보니 나랑 비슷한 고민을 해본 사람이 있고 나름 괜찮은 프로젝트가 있어서 공유한다.
go 파일간의 dependency를 그래프로 시각해 주는 툴들
살펴본 결과 goviz가 더 나아 보인다. 일단 depth 별로 추출해주는 기능과 다양한 포멧을 지원해서 편하다.
goviz 사용법
1. graphviz 설치
운영체제 별로 적절한 도구를 활용해 설치하시길
brew install graphviz
2. go get 으로 goviz 다운 받기
go get github.com/hirokidaichi/goviz
3. 분석할 프로젝트 go get으로 다운 받기
go get github.com/coreos/etcd
4. goviz로 graph 생성하기
goviz -i github.com/coreos/etcd | dot -Tpng -o etcd.png
5. goviz로 depth별로 graph 생성하기
depth별로 생성할수 있는 기능에 칭찬을 하고 싶다.
goviz -i github.com/coreos/etcd -s github.com/coreos/etcd -d 1 | dot -Tpng -o etcddepth1.png goviz -i github.com/coreos/etcd -s github.com/coreos/etcd -d 2 | dot -Tpng -o etcddepth2.png goviz -i github.com/coreos/etcd -s github.com/coreos/etcd -d 3 | dot -Tpng -o etcddepth3.png
생성된 결과물들.
etcd 레이어상 1단계는 사실 별 의미없는 결과물이 나오는듯 하다. depth(단계) 별로 나온 결과물을 공유한다.
아쉬운 점은 d3를 통해서 collapsible 하게 접힌다거나, circular dependency를 상위개념에서 볼수 있다면 정말 좋을듯 하다.
- 2단계
- 3단계
- 전체