DB 테이블을 우클릭 한 번으로 Mermaid ERD로 — erdMaid 플러그인을 만들었습니다
문서에 넣을 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 precision→double_precision) - 숫자 타입의 precision/scale은 Mermaid가 파싱할 수 있는 형태로 렌더링합니다
- 컬럼 코멘트 안의 큰따옴표는 안전하게 이스케이프합니다
즉, 붙여넣었더니 파서 에러가 나서 수동으로 고치는 상황이 생기지 않도록 했습니다.
FK는 선택 범위 안에서만 그립니다. 테이블 세 개만 골랐는데 관계선이 선택하지도 않은 테이블로 뻗어나가면 다이어그램이 깨집니다. 선택한 테이블 집합 안에 양쪽 끝이 모두 존재하는 관계만 출력합니다.
필요한 환경
- IntelliJ IDEA Ultimate, DataGrip, 혹은 데이터베이스 도구를 지원하는 IntelliJ 계열 IDE
- Database 도구 창에 테이블 메타데이터가 보이는 DB 커넥션
설치
JetBrains Marketplace에 공개되어 있습니다.
👉 erdMaid - Mermaid ERD Export for Database Tables
IDE 안에서 바로 설치하려면 Settings/Preferences → Plugins → Marketplace 에서 erdMaid 를 검색하고 Install 을 누르면 됩니다.
범위 밖인 것
의도적으로 빼놓은 것들도 적어둡니다.
classDiagram은 지원하지 않습니다. ERD를 클래스 다이어그램 문법으로 흉내 내는 방식은 정식erDiagram문법이 있는 이상 쓸 이유가 없다고 판단했습니다.- View는 아직 지원하지 않습니다. 우선순위에서 뒤로 미뤄뒀습니다.
마지막으로
문서에 ERD를 넣어야 하는데 손으로 옮겨 적고 계셨다면, 그 시간을 돌려드릴 수 있을 것 같습니다.
버그 제보나 기능 제안은 GitHub 저장소에 이슈로 남겨주세요.