mermaid 를 쓰는 이유는 code to chart 라서 , 그리고 무료라서 쓴다.
git을 통해서 개발하더라도, 이를 oracle이나 postgresql의 toad 나 pgmodler 를 사용하는게 편하지만, 물리 설계하고 논리적 설계를 데이터 베이스에서 옮기는 상황에서는 편하다. 그러나 모든 백앤드가 , 자기가 다뤄보지 않았던 특성을 공부해서 다 이해하는 백앤드들이 있을거라고 단정하긴 힘들다.
또한 컨설팅을 한다고 해도, 무료 소프트웨어가 아닌 다른 소프트웨어를 회사에서 정해주는게 아닌 이상 잇몸을 일단 때워야하는것이 인지상정, 최선의 대안으로 찾은 것이 mermaid로 구성 업무 분석과 AS IS 를 작성하고, 이를통해서 TOBE의 기안을 애자일하게 하기 위해서는 mermaid의 ER 다이어그램처럼 학습 장벽이 적은 것은 없다고 생각한다.
물론 이단계를 넘어가면 pgmodler를 쓰라고 하고싶지만. 개발과 , 비지니스 분석을 둘다 하기가 쉽지 않다.
https://pgmodeler.io/support/docs?v=1.1.0
PostgreSQL Database Modeler Documentation Index
PostgreSQL Database Modeler Documentation Index
pgmodeler.io

mermaid ER diagram | expreimental
아직 개발중인것으로 보인다. 그렇지만 가장 대중적으로 많이 모델링하기 좋은 비디오 렌탈 업무실습을 만든다고 가정할때 어떻게 mermaid 로 만들어가는지 단계별로 해보자, 대부분 기본 데이터 모델링은 안다고 가정한다.
code로 하는 것이니 개발팀과 같이 깃허브에 초대 된 이후에 리포지토리에 백앤드 데이터 모델 ORM 이 변경되어 배포할때마다 업데이트하는 것도 방법이겠다. git으로 수정부분으 관리하고 관리대장을 만드는방법도 있다.
일단 아무 마크다운 에디터를 키도록한다
나는 typora를 켰다
우리는 erDiagram 을 만들예정이니 이렇게 작성해보자 .

step1. 제목 적기 및 업무 파악하기
mermaid 에 있어 제목과 메타데이터의 형태는 --- --- 안쪽에 적는 것이며 각 `:` 을 기준으로 분리된다. (해석기)

비지니스 현장에서는 업무요건이 제대로 정의되어있는것을 보기힘들거나, 그냥 아무렇게나던지는 경우가 많다. ASIS 도 없는 경우도 많았고, 벤더사에서 알아서 해주겠지 하고 마는 경우가 많다.
그렇지만 우리는 real world 를 다루는것이 아니므로, 새롭게 비디오렌탈 가게라는 상황에서 시작하는 시나리오를 보도록 하자
나는 비디오 가게를 운영하고 있다. 내 비디오 가게는 테이프를 3000개 이상 보유하고 있다. 각 비디오테이프는 테이프 번호를가지고 있으며, 영화마다 제목과 종류(코미디 , 공포, 호러, 드라마, 액션, 전쟁 등등) 을 알 필요가 있다. 우리는 영화당 많은 테이프를 보유하고있으며, 영화마다 특정번호를 부여하고 각 테이프가 어떤 영화를 포함하고있는지 관리한다.
테이프는 Beta 혹은 블루레이 방식일 수 있다. 우리는 각 영화를 위해서 적어도 한개이상의 테이프를 보유하고있다, 각테이프는 항상 한가지의 영화만을 담고있다. 보유한 테이프의길이는 매우길어 복수의 테이프로 된 영화는 하나도 없다, 우리는 특정 배우가 출연한 영화를 자주 찾는다. 그래서 우리는 영화마다 주연배우를 알필요가 있고, 본명 및 생년월일또한 알고자 한다. 우리는 보유하고 있는 영화의 주연들에 대한 정보만 관리하고 싶다.
우리는 많은 고객을 보유하고 있으며, 신용고객클럽에 가입한 회원들에게만 테이프를 대여한다 .이클럽에 가입하기위해서 고객은 좋은 신용을 가져야하며, 회원들의 성명 주소, 전번,회원번호를 관리하고자하낟.
우리는 고객이 현재 어떤 테이프를 빌려갔는지를 관리하고하자며, 고객은 한번에 여러개의 테이프를 빌려갈지도 모른다. 또한 우리는 현재의 대여정보만 관리하지 과거의 이력정보는 관리하지 않는다.
위의 시나리오로 모델리을 해보자 일단 엔터티를 도출하여 식별자를 정의하는 것부터하자( 우리는 여기서 정보계 만 다루지 운영계까지 다루면 너무 오래걸린다.)
엔터티 도출하기
식별자 하나와 안의 기본적인 테이블을 아래와 같이 적는다.

---
title : video 렌탈 업무
---
erDiagram
고객{
uuid 고객_id
}
테이프 {
uuid 테이프_id
}
영화 {
uuid 영화_id
}
배우 {
uuid 배우_id
}
테이블을 만들었으니 데이터 의 속성들과 관계를 정의해보자.
여기서는 데이터의 속성과 도메인 값이 무엇이어야하는지 등등의 데이터의 uuid text 등등 에 대해서는 자세히 다루진 않을것이다 .일단 그리는 방법부터 알고 만약 커스텀 uuid 설정등이 있다면 따로 다이어그램을 그리거나 표로 설명하면 될것이다.

여기까지 해서 일단 대상에 대한 기초적인 다이어그램에 쓰일 엔터티들에 대해서 스케치를 해보았다.
이제 이에 대해서 모델에 대해서 한번 생각해보자 예시로 올라가서 고민해보자
- 고객 엔터티와 테이프 엔터티는 관계는 1: N으로 설정하자
- 배우 엔터티와 영화 엔터티의 관게는 M:N으로 설정
- 영화 엔터티와 테이프 엔터티의 관계는 1:N으로 설정
- 고객은 회원번호가 반드시존재함
혹여나 여기서 고객과 테이프 엔터티가 왜 1:N 인지는 앞으로 수정해나갈 것이기에 넘기도록하자, 일단 운영계가 아닌 정보계로의 구성이다.

빌린다라는 행위에 있어 맨 아래 줄에 관계를 정의해주면 다이어그램이 관계를 그려주기 시작한다.
이때 우리가 알아야할 정보는
고객 |o -- |{ 테이프 : 빌림
여기서 우리는 위치를 기준으로 생각하여 작성하면 된다.
o 자는 0으로 없을 수도 있다.
| 하나가 존재한다.
{ 여러개가 존재한다.
중에 작은쪽은 관계 ---혹은 ... 의 옆에 쓴 이후 이 앙끝에 작은 것부터 큰것으로 붙여나가는 것으로 빠르게 관계를 그려낼수 있다.
아래의 표로 확인하자.
| |o | o| | 0 또는 1 |
| || | || | 정확히 하나 |
| }o | o{ | 0개 이상(상한 없음) |
| }| | |{ | 1개 이상 (상한 없음) |
따라서 위의 고객과 테이프의 관계만 보자면, 빌림의 행위에 있어, 우리 비디오 가게는 이를
고객이 0명이나 1명이고 그 고객에 있어 테이프의 빌린 수는 1개 혹은 여러개 이다. 라는 관계를 생성한다.
일단 이단계까지 왔다면 배우 영화 고객 을 차례대로 위의 관계 설정 대로 작성해보자.

---
title : video 렌탈 업무
---
erDiagram
고객{
uuid 고객_id
string 성명
number 전화번호
string 주소
number 회원번호
}
테이프 {
uuid 테이프_id
string 테이브구분코드
uuid 영화_ID
uuid 고객_ID
}
영화 {
uuid 영화_id
string 제목
number 영화종류코드
}
배우 {
uuid 배우_id
string 성명
string 본명
date 생년월일
}
고객 |o--|{ 테이프 : 빌림
배우 }|--|{ 영화 : 출연
영화 ||-- |{ 테이프 : has

여기까지 왔다면 기본 적으로 관계 자체를 적는데는 익숙할 것이다.
그렇더라고해도 운영계 및 정보계 등의 확장성을 설계한 고려사항등등을 생각하여 각자의 비지니스에 따라 논리 데이터 모델링을 조금 진행하면서 마무리해도록하자.
위까지는 약간의 문제점들이 있다. M:N 관계를 해소하여 이를 해결해가는과정을 진행하며 위의 예시를 조금만 살짝 들어가서 모델링과 그 관계가 저 상태가 맞는지 확인해보자.
영화에 다양한 배우들이 나오므로 이는 배우 전체와 M:N 관계를 진행할 것이 아니라. 영화 출연배우 엔터티를 따로 만들어서 이 관계를 해소해보도록 하자.
아래처럼 이를 해소해보았다 .

보이다시피 mermaid는 예쁘진 않다 그렇지만 code to erd chart라는 특성이 있어 git으로 빠르게 스타트업이나 컨설팅 나갈때 빠르게 모델링할 떄 좋다.
또한 요건상 현재의 대여정보만 관리하므로, 고객과 테이프를 1:N으로 설정하였다.(정보파트) 운영에서는 테이프를 빌리거나 점유하기에 그렇진 않다. 여기서는 테이프 대여시 테이프 엔터티의 고객ID 를 갱신하는 형태를 가정하므로, 만약 현재 이구조라면 정보적으로 테이프별 대여순위를 10위를 생성하여 차트라이브러리를 생성하기 어렵다. 또한 고객중에서 누가 대여기간을 어겼는지도 보려면 의미있정보 생성이 있어서 속성을 대여 시작일자와 대여 종료일자를 추가해보자
고객과 테이프 관계를 N:M으로 구성하고, 연관 엔터티를 추가하자.
---
title : video 렌탈 업무
---
erDiagram
고객{
uuid 고객_id
string 성명
number 전화번호
string 주소
number 회원번호
}
테이프 {
uuid 테이프_id
string 테이브구분코드
uuid 영화_ID
uuid 고객_ID
}
영화 {
uuid 영화_id
string 제목
number 영화종류코드
}
배우 {
uuid 배우_id
string 성명
string 본명
date 생년월일
}
영화_출연_배우 {
uuid 영화_id FK
uuid 배우_id FK
bool 주연여부
}
테이프_대여내역{
uuid 고객_ID FK
uuid 테이프_ID FK
Bool 반납여부
date 대여시작일자
date 대여종료일자
}
고객||--|{ 테이프_대여내역 :대여
테이프||--|{ 테이프_대여내역 : 대여내역
배우 ||--|{영화_출연_배우 : is
영화 ||--|{영화_출연_배우 : 출연
영화 ||-- |{ 테이프 : has

위처럼 구성되면서 우리는 현재까지 시나리오를 바탕으로 1:N 관계 등으로 구성한 테이블 작성법, 관계 작성법을 배웠다.
이후에 식별 비식별관계 부터 속성에 서브타입등 그리고 보조 식별자 등에 대해서 더 많은 것들을 논의하고 작성하는 툴들이 많지만 github와 같이 마크다운 문서로 어디서나 개발자와 함께 빠르게 그리고 실험적으로 하기엔 이만한게 없다.
컨설턴트로써 내용을 작성함에 잘 보여야하고, 예쁘게 작성되어야한다면 다른 툴들을 사용하거나 pg modeler 등등을 사용하는것이 좋다.
그러나 개발자와 가까운 업무분석가인 경우 인프라팀과 개발 공수에 대한 정확한 이해가 있을테니 , 단순히 개발팀과, 인프라팀, 모델링 문서만 주고받는게 아니라 TF로 진행한다면 나는 mermaid 를 추천한다. 물론 dbdiagram도 추천하나 어떤상황이든 학습곡선이 낮은것으로 빠르게 하는 업무가 최고라고생각한다.
https://dbml.dbdiagram.io/docs/
Syntax | DBML
DBML (database markup language) is a simple, readable DSL language designed to define database structures. This page
dbml.dbdiagram.io
결론: 오늘은 mermaid의 ERdiagram을 통해서 실습을 진행할수 있게 구성하였다.
정확하고 많은 정보를 담아야하는것이 아니라 빠르게 작성하는것이 의미 있다고 생각한다. Erdiagram은 각자한테 맞는걸로 쓰자 !
'SAP ABAP 공부자료 > 데이터 모델링 시리즈' 카테고리의 다른 글
| 데이터 모델링 책 추천 (1) | 2025.11.02 |
|---|