티스토리 뷰

개발하면서 ERD를 안 그리거나 잘못 그려서 뻘짓하는 경우가 많다. 테이블을 다 만들고 나서 관계가 잘못됐다는 걸 알면 마이그레이션을 다시 짜야 하고, 이미 데이터가 쌓였다면 일이 훨씬 커진다.

유료 툴이 좋긴 하지만, 무료 중에서도 설치 없이 웹에서 쓸 만한 것들이 있다.

Aquery Tool

http://aquerytool.com/

국산 웹 ERD 도구다. 직관적인 UI라 따로 설명이 필요 없을 정도다. 잘 모르겠으면 좌측 상단 메뉴의 Help와 Demo를 참고하면 된다.

  • 설치 없이 브라우저에서 바로 사용
  • 한글 UI, 한글 주석 지원이 자연스럽다
  • 테이블 정의서를 엑셀로 내보낼 수 있다
  • 개인 무료 플랜 제공

국내 SI 환경에서 산출물로 테이블 정의서를 요구하는 경우가 많은데, 그 포맷을 바로 뽑을 수 있다는 게 실무에서 큰 장점이다.

다른 선택지들

dbdiagram.io — 코드로 그리는 ERD

마우스로 끄는 대신 텍스트로 스키마를 쓰면 다이어그램이 그려진다. Git으로 버전 관리가 되는 게 가장 큰 장점이다.

Table users {
  id integer [pk, increment]
  email varchar [unique]
  created_at timestamp
}

Table posts {
  id integer [pk, increment]
  user_id integer [ref: > users.id]
  title varchar
}

완성된 다이어그램에서 MySQL, PostgreSQL DDL을 바로 내보낼 수 있다. 반대로 기존 DDL을 붙여넣어 다이어그램을 생성하는 것도 된다.

draw.io (diagrams.net) — 범용 다이어그램

ERD 전용은 아니지만 무료이고 제약이 없다. 구글 드라이브나 로컬에 저장할 수 있어서 데이터를 외부 서비스에 안 남기고 싶을 때 좋다. 대신 ERD 전용 기능(DDL 내보내기 등)은 없다.

ERDCloud — 협업 중심

국산 서비스로, 여러 명이 동시에 편집할 수 있다. 팀에서 스키마를 같이 설계할 때 편하다.

Mermaid — 문서에 그대로 넣기

GitHub README나 Notion에 코드 블록으로 ERD를 넣을 수 있다. 별도 이미지 파일 관리가 필요 없다는 게 장점이다.

erDiagram
    USERS ||--o{ POSTS : writes
    USERS {
        int id PK
        string email
    }

어떤 걸 고를까

상황 추천
테이블 정의서 산출물 필요 Aquery Tool
Git으로 스키마 이력 관리 dbdiagram.io
팀 동시 편집 ERDCloud
README·문서에 삽입 Mermaid
데이터를 외부에 안 올리고 싶음 draw.io (로컬 저장)

도구보다 중요한 것

어떤 툴을 쓰든 ERD를 그리는 목적은 테이블을 만들기 전에 관계를 검증하는 것이다. 그리면서 이런 질문에 답이 나와야 한다.

  • 이 관계가 1:N인가 N:M인가. N:M이면 중간 테이블이 필요하다
  • 외래키에 ON DELETE 정책은 무엇인가 (CASCADE / SET NULL / RESTRICT)
  • 이 컬럼은 nullable인가. "값이 없음"과 "빈 값"을 구분해야 하는가
  • 자주 조회되는 조건 조합은 무엇인가. 복합 인덱스 순서를 어떻게 잡을 것인가
  • 삭제를 물리 삭제로 할 것인가 soft delete로 할 것인가

특히 마지막 두 개는 나중에 바꾸기가 정말 어렵다. 데이터가 쌓인 뒤에 인덱스를 바꾸는 건 그나마 가능하지만, 삭제 정책을 바꾸는 건 애플리케이션 전체를 훑어야 한다.

ERD를 그리는 30분이 나중의 며칠을 아낀다. 도구는 손에 익는 걸 쓰면 된다.

정리

  • Aquery Tool은 설치 없이 쓰고 테이블 정의서를 엑셀로 뽑을 수 있다
  • 스키마를 Git으로 관리하고 싶으면 dbdiagram.io
  • 문서에 바로 넣을 거면 Mermaid
  • 도구보다 중요한 건 관계·삭제 정책·인덱스를 만들기 전에 결정하는 것
댓글


최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday