Skip to content

๐Ÿ“„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋„์ถœ ๊ณผ์ •

yewon edited this page Aug 3, 2025 · 4 revisions

*Git์˜ ๊ฐœ๋…๊ณผ ์šฉ์–ด๋ฅผ ๋ชจ๋ฅด๋Š” ์ผ๋ฐ˜์ธ ์œ ์ €๋ฅผ ์œ„ํ•ด, Docsa์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ Git์˜ ๊ฐœ๋…๊ณผ ๋Œ€์‘๋˜๋Š” ์šฉ์–ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
(๊ธฐ๋ก: commit, ๋ฒ„์ „: branch, ๋ณ‘ํ•ฉํ•˜๊ธฐ: merge)

๐Ÿ“Œ ์„ค๊ณ„ ์ค‘์ ์‚ฌํ•ญ

๋ฌธ์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • ๋ฌธ์„œ ๋‹จ์œ„์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ๋ธŒ๋žœ์น˜ ๊ธฐ๋Šฅ
  • ์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ ๋ฐ ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉํ•˜๊ธฐ ๊ธฐ๋Šฅ
  • ์ž‘์„ฑ ์ค‘์ธ ๋‚ด์šฉ์˜ ์ €์žฅ ๋ฐ ๋ณต์›
  • ๋ฒ„์ „ ๊ฐ„ ๋น„๊ต ๋ฐ ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์‹œ๊ฐํ™”

Docsa ๊ธฐํš ์•„์ด๋””์–ด์˜ ์ฃผ์š” ํŠน์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • ๊ธฐ๋ก๋งˆ๋‹ค ์ „์ฒด ๋ณธ๋ฌธ์ด ํ†ต์œผ๋กœ ์ €์žฅ๋˜๋Š” wiki๊ฐ€ ์•„๋‹Œ Git์˜ ๊ตฌ์กฐ
  • ๊ธฐ๋ก์€ ๋ธ”๋กid์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง
  • DB์— ์ €์žฅ๋˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๋Š” block (์ด๋Š” Editor.js (๊ณต์‹๋ฌธ์„œ)์—์„œ ๋‚ด๋ ค์ฃผ๋Š” ๊ณ ์œ ํ•œ id๋ฅผ ๊ฐ€์ง„ ๋ฌธ๋‹จ)

์ด์— ๋Œ€ํ•œ DB ์„ค๊ณ„์˜ ์ฃผ์•ˆ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • ์‚ฌ์šฉ์ž-๋ฌธ์„œ-๋ธŒ๋žœ์น˜-๊ธฐ๋ก๊ณผ ์ €์žฅ-๊ธฐ๋ก์˜ ๋‚ด์šฉ์ด ๋˜๋Š” ๋ธ”๋ก ์ด๋ž€ ๋ณต์žกํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ํ‘œํ˜„
  • ์ฃผ์š” ์—”ํ‹ฐํ‹ฐ๋Š” ๋ชจ๋‘ ์ •ํ˜•ํ™”๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง (FK์™€ ์ƒ์„ฑ/์ˆ˜์ •์ผ์ž)
  • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐ ๊ด€๊ณ„ ์ œ์•ฝ์ด ๋ช…ํ™•ํ•ด์•ผํ•  ๊ฒƒ

โžก ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ตœ์ ์˜ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ERD ์„ค๊ณ„ ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค.

๐Ÿ”ธ ์„ค๊ณ„ ์ดˆ๊ธฐ ๋‹จ๊ณ„์˜ RDB ๋‹จ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ERD

docsa

๐Ÿ’ก ๊ธฐ์กด ์Šคํ‚ค๋งˆ์˜ ํ•œ๊ณ„์™€ MongoDB ๋„์ž… ์‹œ ๊ธฐ๋Œ€ํšจ๊ณผ

  • ๋น„์ •ํ˜• ํ…Œ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ํ•ฉ์„ฑ

    • Save ์˜ ๋ณธ๋ฌธ๊ณผ Block์˜ ๋ณธ๋ฌธ์€ JSON ํ˜•์‹
    • ์ด๋ฅผ String์œผ๋กœ ํŒŒ์‹ฑํ•˜๋Š” ๋น„์šฉ ์กด์žฌ
    • ํ”„๋ก ํŠธ์—์„œ ๋‚ด๋ ค์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋˜ ์ •๊ทœ์‹๊ณผ ๋‹ฌ๋ผ์งˆ ๊ฒฝ์šฐ์˜ ์œ„ํ—˜์„ฑ
  • ๋ธ”๋ก์˜ ์—ฐ๊ฒฐ ๊ตฌ์กฐ ์„ค๊ณ„ ๋‹จ์ˆœํ™”

    • ์ด RDB ๊ตฌ์กฐ์—์„  block์˜ ์ˆœ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ์จ commits_block_sequence ์ค‘๊ฐ„ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ
    • MongoDB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด block์˜ ์ˆœ์„œ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ

๐Ÿ“Œ ์ตœ์ข… ๊ฒฐ์ •๋œ DB Schema

image
  • ํšŒ์ƒ‰ ๋ฐ์ดํ„ฐ๋Š” RDB์˜ ์—”ํ‹ฐํ‹ฐ์ด๋ฉฐ, ์ฒญ๋ก์ƒ‰ ๋ฐ์ดํ„ฐ๋Š” MongoDB์˜ ๋„ํŠœ๋จผํŠธ์ด๋‹ค.

  • ์œ„์™€ ๊ฐ™์€ ํ•œ๊ณ„์ ์œผ๋กœ ์ธํ•ด, ๋ธ”๋ก ๋ฐ ์ฝ˜ํ…์ธ  ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ MongoDB์— ๋ถ„๋ฆฌ ์ €์žฅํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ชจ๋ธ์„ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

  • ์ด์™ธ์˜ ์—”ํ‹ฐํ‹ฐ๋Š” ๋ณต์žกํ•œ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ RDB์— ์œ ์ง€ํ•˜๊ณ , ํ•„์š”ํ•œ MonboDB์˜ ObjectId๋ฅผ ํ‚ค๋กœ ์ €์žฅํ•œ๋‹ค.

โœ… ์ฃผ์š” ์—”ํ‹ฐํ‹ฐ ๋ฐ ๋„ํ๋จผํŠธ ์„ค๋ช…

โœ” RDB ์—”ํ‹ฐํ‹ฐ
โœ” MongoDB ๋„ํ๋จผํŠธ
  • Block: ๊ฐœ๋ณ„ ๋ธ”๋ก์˜ ๋ฐ์ดํ„ฐ
{
  "_id": ObjectId('688acb39738f3ba3c0de543b'), // (MongoDB) CommitBlockSequence์˜ ๋ฆฌ์ŠคํŠธ ์›์†Œ์— ์ €์žฅ๋จ
  "content": {
    "id": "LTijV4knDj", // editor.js๊ฐ€ ์ƒ์„ฑํ•œ ์—๋””ํ„ฐ์ƒ ๋ฌธ๋‹จ์˜ ๊ณ ์œ  id
    "type": "paragraph",
    "data": {
      "text": "ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์Šต๊ด€ํ™” ํ•˜์ž"
    }
  }
}
  • CommitBlockSequence: ์ปค๋ฐ‹ ์‹œ์ ์˜ ๋ธ”๋ก ID ๋ฆฌ์ŠคํŠธ
{
  "_id": ObjectId('688acb39738f3ba3c0de543e'), // (RDB) Commit ์—”ํ‹ฐํ‹ฐ์˜ commitMongoId ํ•„๋“œ์— ์ €์žฅ๋จ
  "blockOrders": [ // MongoDB์— ์ €์žฅ๋œ ๋ธ”๋ก์˜ ObjectId๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ 
    "688acb39738f3ba3c0de543a",
    "688acb39738f3ba3c0de543b",
    "688acb39738f3ba3c0de543c",
    "688acb39738f3ba3c0de543d"
  ]
}
  • SaveContent: Save๊ฐ€ ๊ฐ€์ง€๋Š” ๋ณธ๋ฌธ, Save์˜ ๊ฒฝ์šฐ์—” ๊ธฐ๋ก๊ณผ ๋‹ค๋ฅด๊ฒŒ JSON ๋ณธ๋ฌธ ์ „์ฒด๋ฅผ DB์— ์ €์žฅ
{
  "_id": ObjectId('688ac832738f3ba3c0de5415'), // (RDB) Save ์—”ํ‹ฐํ‹ฐ์˜ saveMongoId ํ•„๋“œ์— ์ €์žฅ๋จ
  "content": [
    {
      "id": "M4QIuFj82K", // editor.js๊ฐ€ ์ƒ์„ฑํ•œ ์—๋””ํ„ฐ์ƒ ๋ฌธ๋‹จ์˜ ๊ณ ์œ  id
      "type": "paragraph",
      "data": {
        "text": "์˜ค๋Š˜ ํ•  ์ผ"
      }
    },
    {
      "id": "ew2k5QghnN",
      "type": "paragraph",
      "data": {
        "text": "์ž˜ ๋จน๊ณ  ์ž˜ ์ž๊ธฐ"
      }
    },
    {
      "id": "IqTwSiP2Lq",
      "type": "paragraph",
      "data": {
        "text": "์ฆ๊ฒ๊ฒŒ ๊ณต๋ถ€ํ•˜๊ธฐ"
      }
    }
  ]
}

โ— MongoDB ๋„์ž… ํ›„ ์ด์ข… DB์—์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ

๐Ÿ’ฌ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐœ์„ ์‚ฌํ•ญ

Clone this wiki locally