DB 테이블을 우클릭 한 번으로 Mermaid ERD로 — erdMaid 플러그인을 만들었습니다

Share

문서에 넣을 ERD가 필요할 때마다 같은 일을 반복하고 있었습니다. DataGrip에서 테이블 스키마를 열어놓고, 컬럼 이름과 타입을 하나씩 옮겨 적고, FK 관계를 눈으로 따라가며 ||--o{ 를 손으로 그리는 일이요.

테이블이 다섯 개면 참을 만합니다. 마흔 개면 참을 수 없습니다.

그래서 erdMaid 를 만들었습니다. IntelliJ 계열 IDE의 Database 도구 창에서 테이블을 선택하고 우클릭하면, Mermaid erDiagram 코드가 클립보드에 복사되는 플러그인입니다.

하는 일

Database 도구 창에서 스키마를 펼치고 Tables 노드를 엽니다. 테이블을 선택한 뒤 우클릭 → Export as Mermaid ERD (erdMaid). 끝입니다.

  • Tables 노드 자체를 선택하면 해당 스키마의 모든 테이블을 한 번에 내보냅니다.
  • 개별 테이블을 여러 개 골라서 필요한 부분만 내보낼 수도 있습니다.
  • 결과는 클립보드로 복사되고 완료 알림이 뜹니다. Markdown 문서나 Mermaid를 지원하는 에디터에 그대로 붙여넣으면 됩니다.

출력 예시

erDiagram
    %% 입찰
    bidding {
        bigint id PK
        tinyint automated "자동견적여부"
        varchar(255) status "입찰 상태"
        bigint partner_id
        bigint order_id "입찰 ID"
        bigint amount
        datetime created_at
    }

    bidding_file {
        bigint id PK
        bigint bidding_id
        bigint file_id
        datetime created_at
    }

    %% FK: bidding_file.bidding_id -> bidding.id
    bidding ||--o{ bidding_file : ""

신경 쓴 부분

만들면서 가장 공들인 건 "손으로 고칠 일이 없는 출력" 이었습니다.

컬럼 순서를 지킵니다. 메타데이터의 실제 ordinal position을 그대로 따릅니다. 알파벳순으로 재정렬되거나 순서가 뒤섞이지 않습니다. DB에서 보던 그 순서 그대로 나옵니다.

메타데이터를 빠짐없이 담습니다. Primary Key, Foreign Key 관계, 데이터 타입, 컬럼 코멘트까지 포함합니다. 컬럼 라인은 타입 컬럼명 [PK] ["코멘트"] 형식을 따르고, 테이블 코멘트는 %% Mermaid 주석으로 들어갑니다.

Mermaid가 깨지지 않게 정규화합니다. 이게 의외로 까다로운 부분이었습니다.

  • 타입명에 들어간 공백은 _ 로 치환합니다 (double precisiondouble_precision)
  • 숫자 타입의 precision/scale은 Mermaid가 파싱할 수 있는 형태로 렌더링합니다
  • 컬럼 코멘트 안의 큰따옴표는 안전하게 이스케이프합니다

즉, 붙여넣었더니 파서 에러가 나서 수동으로 고치는 상황이 생기지 않도록 했습니다.

FK는 선택 범위 안에서만 그립니다. 테이블 세 개만 골랐는데 관계선이 선택하지도 않은 테이블로 뻗어나가면 다이어그램이 깨집니다. 선택한 테이블 집합 안에 양쪽 끝이 모두 존재하는 관계만 출력합니다.

필요한 환경

  • IntelliJ IDEA Ultimate, DataGrip, 혹은 데이터베이스 도구를 지원하는 IntelliJ 계열 IDE
  • Database 도구 창에 테이블 메타데이터가 보이는 DB 커넥션

설치

JetBrains Marketplace에 공개되어 있습니다.

👉 erdMaid - Mermaid ERD Export for Database Tables

IDE 안에서 바로 설치하려면 Settings/PreferencesPluginsMarketplace 에서 erdMaid 를 검색하고 Install 을 누르면 됩니다.

범위 밖인 것

의도적으로 빼놓은 것들도 적어둡니다.

  • classDiagram 은 지원하지 않습니다. ERD를 클래스 다이어그램 문법으로 흉내 내는 방식은 정식 erDiagram 문법이 있는 이상 쓸 이유가 없다고 판단했습니다.
  • View는 아직 지원하지 않습니다. 우선순위에서 뒤로 미뤄뒀습니다.

마지막으로

문서에 ERD를 넣어야 하는데 손으로 옮겨 적고 계셨다면, 그 시간을 돌려드릴 수 있을 것 같습니다.

버그 제보나 기능 제안은 GitHub 저장소에 이슈로 남겨주세요.