โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

ERD + DBML + ChartDB


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๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐ”๋ฅผ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

์ด์ •๋„๋ฉด ๊ธฐ๋ณธ๊ธฐ๋Šฅ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€ ์š”์ฒญํ–ˆ์„๋ฒ•๋„ ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด์ง€๋งŒ. (์ด์œ ๊ฐ€ ์žˆ๊ฒ ์ง€ ์‹ถ๋‹ค)