# D2: 다이어그램 스크립팅 언어

> Clean Markdown view of GeekNews topic #23934. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23934](https://news.hada.io/topic?id=23934)
- GeekNews Markdown: [https://news.hada.io/topic/23934.md](https://news.hada.io/topic/23934.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-10-27T02:33:17+09:00
- Updated: 2025-10-27T02:33:17+09:00
- Original source: [d2lang.com](https://d2lang.com/tour/intro/)
- Points: 3
- Comments: 1

## Topic Body

- **D2**는 텍스트 기반으로 다이어그램을 작성할 수 있는 **스크립팅 언어**로, 코드로 시각 자료를 자동 생성하는 방식을 제공  
- 사용자는 간단한 문법으로 노드와 관계를 정의하면, **자동 레이아웃 엔진**이 이를 시각적으로 배치  
- 문서 내의 각 코드 스니펫은 **Playground에서 직접 실행 및 수정**할 수 있어, 즉시 결과를 확인 가능  
- 단, **import를 사용하는 일부 예시**는 Playground에서 바로 실행되지 않는 예외 존재  
- 개발자에게 **시각적 문서화 자동화와 협업 효율성**을 높이는 도구로서 의미  

---

### D2 개요
- **D2**는 다이어그램을 코드로 작성할 수 있는 **선언적 스크립팅 언어**로, 복잡한 구조를 텍스트로 정의하고 자동으로 시각화하는 기능 제공  
  - 사용자는 노드, 엣지, 그룹 등을 간단한 문법으로 기술  
  - 결과물은 자동으로 정렬되고, 다양한 스타일을 적용 가능  
- 이 언어는 **버전 관리와 협업**에 유리하며, 코드 리뷰나 문서 자동화 파이프라인에 쉽게 통합 가능  

### Playground 기능
- D2 문서의 각 코드 스니펫은 **Playground에서 바로 열어 수정 및 실행**할 수 있는 인터랙티브 기능 제공  
  - 사용자는 마우스를 스니펫 위에 올리면 Playground 링크가 활성화됨  
  - 이를 통해 다이어그램을 실시간으로 조정하고 결과를 시각적으로 확인 가능  
- 단, **import 문을 사용하는 스니펫**은 외부 리소스를 필요로 하기 때문에 Playground에서 즉시 실행되지 않는 제한 존재  

### 활용 의의
- D2는 **시각적 문서화 자동화**를 지원해, 시스템 설계나 데이터 흐름을 코드와 함께 관리할 수 있는 장점 제공  
- 개발자와 디자이너가 동일한 언어로 다이어그램을 정의함으로써 **협업 효율성** 향상  
- 오픈소스 생태계에서 **코드 기반 다이어그램 작성 표준화**를 촉진하는 도구로 평가됨

## Comments



### Comment 45491

- Author: neo
- Created: 2025-10-27T02:33:18+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45707539) 
- D2의 공동 제작자로서 최근 **애니메이션 기능 확장** 아이디어를 구상 중임  
  관련 논의를 [GitHub Discussion](https://github.com/terrastruct/d2/discussions/2677)에 올려두었으니 의견을 듣고 싶음
  - 최근 LLM을 이용해 아키텍처 결정을 빠르게 시각화하고 있음  
    주로 mermaid를 쓰지만 D2가 더 **유연한 인터페이스**를 제공할 수 있을지 궁금함  
    LLM과 연동되는 **툴 호출 기능**이나 MCP 같은 사용자 친화적 인터페이스 계획이 있는지도 알고 싶음
  - D2는 정말 멋진 도구라 생각함. 특히 **AWS 네트워크 레이아웃 자동화**를 구현할 때 유용했음  
    많은 객체를 렌더링할 때도 엔진과 싸우지 않아도 돼서 좋았음  
    다만 sdk/d2lib의 문서화가 부족해 처음엔 시행착오가 있었음
  - D2를 몇 달 전부터 사용 중인데 배우기 쉬워서 놀랐음  
    하지만 **화려한 애니메이션**은 꼭 필요하다고 생각하지 않음. 강조가 필요할 땐 단순히 색을 바꾸는 게 더 직관적임
  - 애니메이션의 목적이 궁금함. 프레젠테이션 중 클릭할 때마다 요소가 추가되고 연결이 **부드럽게 강조**된다면 좋겠음  
    하지만 텍스트 변경으로 전체 다이어그램이 흔들리는 건 오히려 산만할 수 있음  
    또한 **Swimlane 다이어그램**을 정식 지원해주면 좋겠음
  - “Level 4 - dramatic mode ;)”라며 [드라마틱 SVG 예시](https://blog.viraptor.info/dramatic-svg/index.html)를 공유함

- D2나 Penrose 같은 도구를 Python으로 감싸서 **데이터 기반 다이어그램 스크립팅**을 시도 중임  
  하지만 대부분의 선언형 도구들은 “declare, then tweak” 워크플로를 지원하지 않아 불편함  
  Penrose는 수정은 쉽지만 결과가 **랜덤하고 예측 불가**한 면이 있음
  - D2의 **커스텀 레이아웃 조정**은 독점 엔진에서만 가능함  
    오픈소스 엔진에서는 불가능하지만 [Freehand 기능](https://docs.d2studio.ai/tour/freehand)으로 일부 조정 가능함

- D2의 문법을 일반 프로그래밍 언어로 얼마나 가깝게 구현할 수 있을지 궁금했음  
  Python에서는 연산자 오버로딩 제약 때문에 완전히 동일한 DSL은 어렵지만, **문자열 연산자 오버로딩**으로 비슷하게 시도 가능함
  - Python에서도 약간의 트릭으로 `a <- b | "edge"` 같은 문법을 흉내낼 수 있음  
    하지만 실제로 쓰면 **유령이 되어 괴롭히겠다**며 농담함
  - Scala에서는 **사용자 정의 연산자**가 가능해 `"x" --> "y" | "hello world"` 같은 DSL을 만들 수 있음  
    다만 남용은 좋지 않음
  - Ruby에서도 `x >> y << "label"` 형태로 간단한 **내부 DSL**을 구현 가능함  
    Diagram 클래스에서 객체 모델을 만들어 렌더러를 붙일 수도 있음

- [mgmt 프로젝트](https://github.com/purpleidea/mgmt/)의 메인 작성자로서 DAG를 많이 다룸  
  노드와 엣지를 추가·삭제할 때 **시각적으로 안정적이고 애니메이션 전환이 가능한** 다이어그램이 필요함  
  Graphviz는 스냅샷마다 레이아웃이 흔들려 불편함
  - d2의 watch 기능으로 파일을 단계별로 교체하는 **간단한 스크립트 해킹**으로 비슷한 효과를 낼 수 있음

- D2의 [Sketch 모드](https://d2lang.com/tour/sketch/)와 [인터랙티브 기능](https://d2lang.com/tour/interactive/)이 정말 유용함  
  **툴팁과 링크** 덕분에 다이어그램 활용도가 크게 높아짐

- D2를 오래 사용해왔고 내부에서도 적극 추천 중임  
  하지만 **엔터프라이즈 라이선스 비용**이 너무 높아 개인용으로만 사용 중임  
  TALA 라이선스가 연 3000달러, 개인용도 120달러로 부담스러움  
  Helm chart나 시스템 설명을 LLM에 넣어 **자동 다이어그램 생성**하는 기능은 혁신적이라 생각함  
  - 개인적으로 TALA의 출력 품질이 가장 별로라고 느낌. 대부분 **ELK 엔진**을 사용함

- 최근 D2의 **ASCII 렌더링 지원**이 화제가 되었음  
  관련 토론은 [이전 게시글](https://news.ycombinator.com/item?id=44954524)에서 이어짐

- D2는 꽤 오래됐지만 여전히 **mermaid보다 덜 알려진** 느낌임  
  기능적으로는 훨씬 뛰어나서 더 많은 사람들이 알았으면 함
  - 나도 D2를 더 좋아하지만 mermaid는 여러 플랫폼에서 **기본 지원**되므로 실용적인 선택임
  - D2를 처음 알았는데 mermaid보다 나은 점이 무엇인지 궁금함

- 우리 AI 플랫폼 [zo.computer](https://zo.computer)에서 **다이어그램 생성 도구**로 D2를 채택했음  
  mermaid보다 표현력이 높아 **AI 기반 시각화**에 적합함
  - 구현 방식이 궁금함. D2용 **MCP 서버**를 직접 구축했는지 물어봄
  - “Ben, LinkedIn/X를 견딜 만하게 만들어줘서 고맙다”고 인사함

- D2는 훌륭하지만 PlantUML이나 mermaid 대비 **결정적 차별점**이 부족함  
  여전히 “**다이어그램 코드의 킬러앱**”을 기다리고 있음  
  - 이런 도구로 **대규모 코드베이스를 시각적으로 탐색**할 수 있다면 큰 장점이 될 것임
  - D2의 장점은 독립 실행형 컴파일러라는 점과 **ASCII 렌더링** 지원임  
    npm 설치가 필요 없는 것도 마음에 듦  
    다만 mermaid는 Obsidian 등과의 통합성이 뛰어남
  - “그 킬러 프로그램이 어떤 기능을 가져야 할까?”라는 질문을 던짐
