티스토리 뷰
개발하면서 ERD를 안 그리거나 잘못 그려서 뻘짓하는 경우가 많다. 테이블을 다 만들고 나서 관계가 잘못됐다는 걸 알면 마이그레이션을 다시 짜야 하고, 이미 데이터가 쌓였다면 일이 훨씬 커진다.
유료 툴이 좋긴 하지만, 무료 중에서도 설치 없이 웹에서 쓸 만한 것들이 있다.
Aquery Tool
국산 웹 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
- 도구보다 중요한 건 관계·삭제 정책·인덱스를 만들기 전에 결정하는 것
'기타 개발' 카테고리의 다른 글
| 구형 세탁기를 IOT 세탁기로 만들기 (0) | 2023.04.22 |
|---|---|
| 티스토리에 구글애드센스 광고 정말 빠르고 쉽게 달기 feat. 블로그 (0) | 2018.10.23 |
| docker 로 PHP 개발환경 만들기 (0) | 2018.09.20 |
| .gitignore가 적용 안 될 때, 원인은 대부분 Git 캐시다 (0) | 2018.09.14 |
| HTTP/응답코드 (0) | 2018.08.29 |
