ERD + DBML + ChartDB

ํ๋์ ์งํ์ค์ธ ํ๋ก์ ํธ์์ Table์์ฑํ๋ ๊ฒ์ ๊ณ ํต์ ๋ฐ์๋ค. (์ฌ์ค ์ง๊ธ๋ ์ฌ์ ํ ๊ณ ํต์ ๋ฐ๊ณ ์๋ค)
๊ณ ๊ฐ์ฌ์๋ ๋น์ฐํ ์ ๊ณต ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ER-Win + ๋ฉํ์ฐ๋ ๊ธฐ๋ฅ์ด ์๋ค.
์ค์๊ฐ์์ผ๋ก ํ์ ํ๊ณ ์๋ DA๋ก ๋ถํฐ ์ ๊ณต ๋ฐ์ ์ ์๋ ๊ฒ์ ์์ ์ ์ฌ์ฉํ ํ ์ด๋ธ ๋ ์ด์์ ์ ์ฒญ์ด๋ค.
๊ทธ ์์ค์ ์ ์ฒด์ ์ธ ERD๋ฅผ ๋ด ์จ๋ชธ์ด ์๊ตฌํ๊ณ ์์ด ์ฌ๋ฌ ์กฐ์ฌ๋ฅผ ํ์ผ๋, ๊ธฐ๊ป ์ฐพ์๊ฒ์ VSCode ํ๋ฌ๊ทธ์ธ์ค vuerd๊ฐ ๊ทธ๋๋ง ์ ์ผ ๊ทธ๋ด๋ฏ ํ๋ค.
ํ์ง๋ง ํ ์ด๋ธ์ด ์ข ๋ง์์ง๋ฉด ํ์๋ค์๊ฒ ์ ๊ณตํ๊ธฐ ์ํด PNG๋ก exportํ๋ ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ทจ์ฝํ๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉํ๋ PC์์๋ ๋๋ฆ ์ export๋๋๋ฐ, ์ฌ๋ฌด์ค์์ ์ฌ์ฉํ๋ PC์์๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
์ฌ๋ฌ๊ฐ์ง๋ฅผ ๊ฒํ ํ๋ค๊ณ ํด ๋ดค์ผ๋
- ์์ฃผ ์ค๋๋ Win32 ํน์ Java UIํํ์ Client
- Oneline Service
- JavaScript ๊ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ด์ง ๊ณ์ด
๊ฒฐ๊ตญ JavaScript ๊ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณ์ด์ DrawDB์ ChartDB๋ก ์๋ ด์ด ๋๋๋ฐ ์ด ๋ ๋ ์์ ๋ฌํ๊ฒ ๋ฎ์ ์๋๊ฒ์ด ๋์ผํ ์์ค์์ ์ถ๋ฐํ ๊ฒ์ธ๊ฐ ์ถ๊ธฐ๋ ํ๋ค
์ด ์ค ChartDB๋ฅผ ์ ํํ ๊ฒฐ์ ์ ์ด์ ๋ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ ๋๋ฅธ์ํ์์ ํ๋ฉด์ด๋์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค. DrawDB๋ (์ค๊ฐ)์คํฌ๋กค ๋ฒํผ์ ๋๋ฅธ์ํ์์ ์ด๋์ ํด์ผ ํ๋๋ฐ ๊ทธ๊ฒ (๋ฐฉ๋ฒ์ ์์ง๋ง) ์ฝ์ง์์ ์กฐ์์ด๋ค.
์ฌ์ค ์ฒซ ๋ฒ์งธ ์ข์ ํฌ์ธํธ๋ ์ฃผ๋ก DBeaver์์ ์ถ์ถํ DDL์ ๊ฐ์ง๊ณ ERD๋ฅผ ์ฌ๊ตฌ์ฑ ํด ๋ณด๋ ค๊ณ ํ์ง๋ง, DrawDB๋ ChartDB๋ ๋ชจ๋ SQL์ ํ์ฑํ๋ ๋ถ๋ถ์ด ๊ทธ๋ ๊ฒ ์ฝ์ง๋ง์ ์๋ค๋ ์ ์ด์๋ค.
๊ทธ๋ ๋ค๊ณ ํ๋ ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์กฐ์ ํด์ ๋ฃ๋๊ฑด ์๋ฏธ๊ฐ ์๋ค.
VSCode vuer์์๋ ๊ทธ๋ฅ ๋ ผ๋ฆฌ๋ช ์ ์ ๋ ฅํด์ ๋์ถฉ ์ค๊ณํ๊ณ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ๊ณ ์์๋ค.
์ค๋ผํด์ด๋ผ๋ ์ ์ฝ์ ํฌ๊ธฐํ๊ณ (๋๋ ์ํฐํฐ์ ์ดํธ๋ฆฌ๋ทฐํธ์ Map์ด ํ์ํ ๋ฟ์ด๋ค) ๊ทธ๋๋ ์ง์์ด ์ ๋๋ PostreSQL ๊ตฌ์ฑ์ Oracle์์ ์ถ์ถํ DDL์ DBML๋ก ๋ณํ์์ผ์ฃผ๋ ๊ฐ๋จํ Node ํ๋ก๊ทธ๋จ์ ์ ๋ฏธ๋์ด๋ก๋ถํฐ ์ ๊ณต๋ฐ์ ๋๋ ค๋ณด๋ ๊ทธ๋ด๋ฏ ํ ๊ฒ์ด ์ธ๋งํ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก
- ERD๋๊ตฌ ๋ชจ๋ธ์์ DBMS์ ํ์์ Oracle์ ๊ณ ์งํ์ง ๋ง๋ผ(๋์ธ๋ PostgreSQL)
- Oracle DDL์ ์ต์ง๋ก Importํ๋ ค ํ์ง๋ง๋ผ(๋์ธ๋ DBML)
- Java๋ก ๋ณํํ๋ก๊ทธ๋จ ์ง๋ ค๊ณ ํ์ง๋ง๋ผ(๋์ธ๋ Node ์๋ JavaScript)
Schema๋ฅผ ์์ฑ ํด ๋๊ณ ๋ณด๋ ๋ฌผ๋ฆฌ๋ช ์ผ๋ก๋ง ๋ด์๋ ๋ญ๊ฐ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ ์ํฉ์ด๋ค.
์ ์ฝ์ฌํญ์
- DrawDB์ ๊ฒฝ์ฐ ํ ์ด๋ธ ์ฝ๋ฉํธ์ ์ปฌ๋ผ ์ฝ๋ฉํธ๋ฅผ ์ผ์ชฝ ํ ์ด๋ธ๋ชฉ๋ก์์ ๋ณด์ธ๋ค.
- ChartDB์ ๊ฒฝ์ฐ ํ ์ด๋ธ ์ฝ๋ฉํธ๋ ์ผ์ชฝ ํ ์ด๋ธ๋ชฉ๋ก์์ ์ปฌ๋ผ ์ฝ๋ฉํธ๋ ์กฐ๊ทธ๋ง ๋งํ์ ์์ด์ฝ์ ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๋ค ๋์ผ ๋ณด์ธ๋ค.
์ด๋ผ ๋งํ๋๊ฑด๋ฐ.
์ผ๋จ ChartDB๋ฅผ folkํ๊ณ ์ข ์ดํด๋ณด๋ ๊ณ ๋ง๊ฒ๋ ์ฝ๋ฉํธ์์ฑ์ ์ด๋ฏธ ํ๋ฉด์ ๋ค ๋ด๋ ค์ ์๊ณ ๋ ธ์ถ๋ง ํ๋ฉด ๋๋ ์ํฉ์ด๋ค.

๐ท ํ ์ด๋ธ๋ชฉ๋ก๊ณผ ํ ์ด๋ธ๋ด์ฉ
<TooltipTrigger asChild>
<div
onDoubleClick={enterEditMode}
className="text-editable truncate px-2 py-0.5"
>
{table.comments} / {table.name}
<span className="text-xs text-muted-foreground">
{schemaToDisplay
? ` (${schemaToDisplay})`
: ''}
</span>
</div>
</TooltipTrigger>
๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ table.name ์์ table.comments๋ฅผ ๋ ธ์ถํ๋ ๊ฒ์ผ๋ก ๋ด๊ฐ ์ํ๋ ๋ฐ๋ฅผ ์ด๋ฃฐ ์ ์๋ค.
์ด์ ๋๋ฉด ๊ธฐ๋ณธ๊ธฐ๋ฅ์ผ๋ก ๋๊ตฐ๊ฐ ์์ฒญํ์๋ฒ๋ ํ๋ค๋ ์๊ฐ์ด์ง๋ง. (์ด์ ๊ฐ ์๊ฒ ์ง ์ถ๋ค)