Emacs: 다이어그램 그리기

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

Emacs: 다이어그램 그리기

가끔씩 다이어그램을 그려야 할 때면 파워포인트를 이용했다. 파워포인트로 다이어그램을 그린 다음 스크린 캡쳐 이미지를 사용하는 식이다. 이 방법에는 심각한 단점이 하나 있다. 다이어그램을 수정하기가 매우 귀찮다는 점이다.

파워포인트 파일을 찾아 다이어그램을 수정하고 다시 스크린 캡쳐해 이미지를 만들어야 한다. 다이어그램 중간에 새로운 요소가 추가하는 경우는 수정 작업이 더욱 짜증난다. 파워포인트 파일을 찾지 못하면 다이어그램을 다시 그려야 한다.

UML 다이어그램을 그릴 때 파워포인트는 좋은 도구가 아니다. 작업도 고통스러운 일이고, 수정도 번거롭다. PlantUml이나 Graphviz를 쓰면 텍스트 언어를 사용해 다양한 다이어그램을 쉽게 그릴 수 있다.

PlantUml

PlantUml을 쓰면 텍스트 언어로 UML 다이어그램을 생성할 수 있다. Mac에서는 Homebrew로 설치하면 된다.

$ brew install plantuml

Emacs에서는 PlantUml을 사용하기 편하게 해주는 plantuml-mode를 설치하면 다이어그램을 작성하고 쉽게 미리보기 할 수 있다. 패키지를 설치한 후 plantuml 바이너리 위치를 지정해야 한다.

M-x customize-mode <RET>
plantuml-mode <RET>

모드 설정 화면에서 Plantuml Jar PathPlantuml Java Command를 설정하면 된다. brew로 설치했다면 Plantuml Java Command/usr/local/bin/plantuml를 지정하면 된다.

시퀀스 다이어그램 예

PlantUml 언어 문법은 상당히 직관적이다. 클래스 다이어그램, 시퀀스 다이어그램 등의 UML 다이어그램을 쉽게 그릴 수 있다. 자세한 사항은 PlantUml 웹사이트를 참조하기 바란다.

중간에 새로운 요소를 추가해야 할 경우 다른 다이어그램 요소를 일일히 손으로 이동할 필요 없이 코드를 고친 다음 다이어그램을 다시 생성하면 된다. PNG, SVG뿐 아니라 \rm\LaTeX 형식으로 출력이 가능하다.

Graphviz

UML이 아닌 일반 다이어그램을 그리고 싶을 때는 Graphviz를 활용할 수 있다. Homebrew로 plantuml을 설치했다면 graphviz도 함께 설치되어 있을 것이다. Graphviz만 따로 설치하고 싶은 경우도 역시 Homebrew를 사용할 수 있다.

Emacs에서는 graphviz-dot-mode를 활용할 수 있다. Graphviz에는 dot뿐 아니라 neato, fdp, sfdp, twopi, circo 명령이 있지만, graphviz-dot-mode는 모드 이름이 암시하듯 dot만 지원한다. dot이 아닌 다른 명령을 사용하려면 콘솔에서 직접 명령을 실행해야 한다.

Graphviz를 이용한 다이어그램 생성 예

Graphviz를 이용하면 위와 같은 복잡한 다이어그램도 아래와 같은 간단한 코드로 생성할 수 있다.

digraph G {
  rankdir = LR
  node [shape = Mrecord]
  Start -> {A1,A2,A3,A4,A5}
  {A1,A2,A3} -> B1
  {A2,A3,A4} -> B2
  {A3,A4,A5} -> B3
  {B1,B2,B3} -> End
}

참고