Skip to content

Latest commit

ย 

History

History
192 lines (155 loc) ยท 7 KB

MySQL-full-stack22.md

File metadata and controls

192 lines (155 loc) ยท 7 KB

{ํ’€์Šคํƒ#22} MySQL - ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„, ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ ์‹œ์ž‘๊ณผ ์„ค๊ณ„

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ฃผ๊ธฐ

  • Agile
  • flexible iteration
    1. ๊ณ„ํš /๊ธฐํš
      • ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„
      • ์‚ฌ์šฉ์ž interview
    2. ๋ถ„์„ ๋ฐ ideation
      • ๊ธฐํš์ž: ๊ธฐํš์„œ
      • ๊ฐœ๋ฐœ์ž: Use Case diagram
    3. UI / UX ์„ค๊ณ„
      • ๋””์ž์ด๋„ˆ: UI / UX ์„ค๊ณ„
    4. DB ์„ค๊ณ„ (๋ชจ๋ธ๋ง)
      • ๊ฐœ๋ฐœ์ž: ERD, EERD
    5. S/W ๋ฐ Infra ์„ค๊ณ„
      • Infra: Cloud, Web ์„œ๋ฒ„, DB ์„œ๋ฒ„
      • ๊ฐœ๋ฐœ์ž: Class diagram, Sequence diagram
    6. ๊ตฌํ˜„
      • ๋””์ž์ด๋„ˆ: UI / UX ์Šคํƒ€์ผ ํ‘œ์ค€ ์ •ํ•˜๊ธฐ
      • ๊ฐœ๋ฐœ์ž: ์ฝ”๋”ฉ convention, ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก , release ๋ฐฉ์‹ ๋“ฑ ์ •ํ•˜๊ธฐ
    7. ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ
      • ํ†ตํ•ฉ: ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ
      • TDD (ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ): ๊ตฌํ˜„ ์ „์— unit test ๋จผ์ € ๋งŒ๋“ค๊ณ  ๊ตฌํ˜„
    8. ์˜คํ”ˆ (Release)
      • ๋ฒ ํƒ€ ์˜คํ”ˆ (MVP ๋ชจ๋ธ)
      • ์„œ๋น„์Šค ๋Ÿฐ์นญ ์˜คํ”ˆ
    9. ์œ ์ง€๋ณด์ˆ˜ (์šด์˜)

Database Modeling

  1. ๊ฐœ๋…์  (Conceptual, Contextual) ๋ชจ๋ธ๋ง

    • Entity ๋„์ถœ (์ž„๋Œ€์ธ, ์ž„์ฐจ์ธ, ์ค‘๊ฐœ์ธ, ...)
  2. ๋…ผ๋ฆฌ์  (Logical) ๋ชจ๋ธ๋ง

    • ERD ์ž‘์„ฑ
    • Data ๊ตฌ์กฐ ๋ฐ ์†์„ฑ (column, type ๋“ฑ) ์ •์˜
    • ๋ฌด๊ฒฐ์„ฑ ์ •์˜ (FK ๊ด€๊ณ„ ํ˜•์„ฑ) ๋ฐ ์ •๊ทœํ™”(Normal Form, NF, ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๋“ฑ)
  3. ๋ฌผ๋ฆฌ์  (Physical) ๋ชจ๋ธ๋ง

    • Schema(DB), Table, Index ์ƒ์„ฑ

DB ๋ชจ๋ธ ์„ค๊ณ„

  • ์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„
  • Use Case diagram ์ž‘์„ฑ
  • Entities, Functions ๋„์ถœ
  • Relationships - E(E)RD ์ž‘์„ฑ
  • ์ƒ์„ฑ (Pysical Modeling)

S/W ์„ค๊ณ„

  • Use Case Diagram (์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„)

    • User๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€
  • Deployment Diagram

    • ์„œ๋ฒ„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”์ง€ (cloud, web server, db server ๋“ฑ ๊ตฌ์„ฑ๋„)
  • Sequence Diagram

    • instance ๋“ค์ด ์–ธ์ œ ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š”์ง€ (์ƒ๋ช…์ฃผ๊ธฐ, ํ–‰๋™ ๋“ฑ)
  • Class Diagram

    • class ๊ตฌ์„ฑ๋„ (์ƒ์†, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜/๋ฉค๋ฒ„ ํ•จ์ˆ˜, structure/behavior diagram...)
  • State Diagram / Flow Chart

    • ๋ฐ์ดํ„ฐ/๋ณ€์ˆ˜ ์ƒํƒœ ๋ณ€ํ™”๋„ (transition, action, state,...)
  • ์ฐธ๊ณ 

    • Role & Responsibility
    • ์„œ๋ฒ„, DB, ์–ธ์–ด ๋“ฑ ์„ ์ •
    • Source ๋ฐ ์ฝ”๋”ฉ ๊ทœ์•ฝ ์ •์˜
    • ๋ฐฉ๋ฒ•๋ก  ๋ฐ ์ง„ํ–‰ ๋ฐฉ์‹ ํ˜‘์˜
    • Milestone

์ •๊ทœํ™”

  • ๋ชฉํ‘œ: ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ, ๊ด€๊ณ„ ๋‹จ์ˆœํ™” (์„ฑ๊ฒฉ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ)

  • 1NF

    • ์›์ž์„ฑ (๋ชจ๋“  ์†์„ฑ(์ปฌ๋Ÿผ)์€ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์ง)
    • ex) ๊ณต๋™ ์†Œ์œ ์ž๋Š” ๋ณ„๋„ ์ปฌ๋Ÿผ์œผ๋กœ ๋ถ„๋ฆฌ
  • 2NF

    • ์™„์ „ ํ•จ์ˆ˜์  ์ข…์† (๋ถ€๋ถ„ ์ข…์† ์ œ๊ฑฐ)
    • ๋ชจ๋“  ์†์„ฑ์€ ๊ธฐ๋ณธํ‚ค์— ์†ํ•ด์•ผ ํ•จ
    • ex) ์ž„๋Œ€์ธ ์—ฐ๋ฝ์ฒ˜๋Š” ์ž„๋Œ€์ธ ํ…Œ์ด๋ธ”์— ์ข…์†
  • 3NF

    • ์ดํ–‰ ์ข…์† ์ œ๊ฑฐ
    • ๊ธฐ๋ณธํ‚ค ์•„๋‹Œ ๋ชจ๋“  ์†์„ฑ ๊ฐ„์—๋Š” ์„œ๋กœ ์ข…์† ๋ถˆ๊ฐ€
    • ex) ๊ธฐ๋ณธ ์ฃผ์†Œ๋Š” ์šฐํŽธ๋ฒˆํ˜ธ์— ์ข…์† X
      ์ตœ๊ทผ์—๋Š” ์šฐํŽธ๋ฒˆํ˜ธ ํ…Œ์ด๋ธ” ๋ณ„๋„๋กœ ๊ตฌ์„ฑ X
  • BCNF

    • ๋ชจ๋“  ๊ฒฐ์ •์ž๋Š” ํ›„๋ณดํ‚ค์— ์†ํ•ด์•ผ ํ•จ
    • ๋ฌผ๊ฑด ํ…Œ์ด๋ธ” ์™ธ์— ์ž„๋Œ€์ธ ํ…Œ์ด๋ธ” ๋”ฐ๋กœ ๋บŒ (์ž„๋Œ€์ธ:๋ฌผ๊ฑด => 1:๋‹ค)
  • ๋ฐ˜(์—ญ) ์ •๊ทœํ™”

    • ํ…Œ์ด๋ธ” ๋ฐ˜์ •๊ทœํ™”
      • ํ…Œ์ด๋ธ” ์ค‘๋ณต, ํ†ต๊ณ„(summary)/์ด๋ ฅ/๋ถ€๋ถ„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    • ์ปฌ๋Ÿผ ๋ฐ˜์ •๊ทœํ™”
      • ์ปฌ๋Ÿผ ํ•ฉ์นจ, ์ค‘๋ณต/ํŒŒ์ƒ
    • ๊ด€๊ณ„ ๋ฐ˜์ •๊ทœํ™”
      • ex) ๊ด€์‹ฌ๋ฌผ๊ฑด ํ…Œ์ด๋ธ”์— ์ž„๋Œ€์ธ ์—ฐ๋ฝ์ฒ˜ ์ปฌ๋Ÿผ ์ƒ์„ฑ
        ๋ฌผ๊ฑด ํ…Œ์ด๋ธ”๋งŒ ์กฐ์ธํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‹ฌํ”Œํ•ด์ง

๋ชจ๋ธ๋ง ๊ธฐ๋ฒ•(์š”๋ น)

  1. PK(๊ธฐ๋ณธํ‚ค)๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”!

    • unique, not null, ๋ณ€๊ฒฝ X (์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
    • ๊ฐ€๋Šฅํ•œ 1๊ฐœ ์ปฌ๋Ÿผ (๋ณตํ•ฉํ‚ค๋กœ ์žก์œผ๋ฉด join ๋น„์šฉ ๋ถ€๋‹ด ํผ,...)
    • ์‹ค์ˆ˜ํ˜• ๋ณด๋‹ค๋Š” ์ •์ˆ˜ํ˜•! (์ž๋™ ์ฆ๊ฐ€ ์ปฌ๋Ÿผ: auto_increment)
  2. ์ ์ ˆํ•œ ์ •๊ทœํ™”!

    • ์›์ž์„ฑ(1NF) ์ตœ๋Œ€ํ•œ ์ค€์ˆ˜! (์ตœ๋Œ€ํ•œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์—†๋„๋ก)
    • ๊ณ„์‚ฐ ๊ฒฐ๊ณผ ์ปฌ๋Ÿผ ์ตœ๋Œ€ํ•œ ์ž์ œ
    • Nullable ํ•  ํ•„์š” ์—†์œผ๋ฉด NOT NULL๋กœ ํ•˜์ž!
  3. ์ฐธ์กฐ(๋ฐ์ดํ„ฐ) ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด FK ์ •์˜

    • ON DELETE CASCADE (PK ์‚ญ์ œ ์‹œ FK ์“ฐ๋ ˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋จ)
  4. ์„œ๋กœ ๋‹ค๋ฅธ ์„ฑ๊ฒฉ์˜ ์ปฌ๋Ÿผ๋“ค์€ ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ!

    • ex) ์•„ํŒŒํŠธ ๋‹จ์ง€ ํ…Œ์ด๋ธ”, ํ† ์ง€ ํ…Œ์ด๋ธ” ๋“ฑ ๋ถ„๋ฆฌ

Use Case Diagram ์‹ค์Šต

  • MyDeal Modeling

  • mydealdb

  • Use Case Diagram ์ž‘์„ฑ

    • ์น ํŒ์— ๊ทธ๋ฆฌ๊ธฐ (์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„)
      • ๋ช…์‚ฌ๋Š” ๋ชจ๋‘ Entity (table or column)
      • ๋™์‚ฌ(ํ–‰๋™)๋Š” Use Case (ํ–‰์œ„)
      • <๊ฐ€์ž… ์œ ์ฆˆ์ผ€์ด์Šค>
        ์ž„์ฐจ์ธ -> ํšŒ์›๊ฐ€์ž… -> ์‹ค๋ช…์ธ์ฆ
        ์ž„์ฐจ์ธ -> ๋กœ๊ทธ์ธ
      • ํŽ˜๋ฅด์†Œ๋‚˜
        ์ž„๋Œ€์ธ(์ง‘์ฃผ์ธ - ๋ณ„์นญ): ๋‚˜์ด, ๊ฑฐ์ฃผ์ง€, ์•„ํŒŒํŠธ ์†Œ์œ ,...
        ์ค‘๊ฐœ์ธ: ๋‚˜์ด, ๊ณต์ธ์ค‘๊ฐœ์‚ฌ๋ฌด์†Œ ๋Œ€ํ‘œ
        ์ž„์ฐจ์ธ(์„ธ์ž…์ž): ์ด๋ฆ„, ๋‚˜์ด, ์ง์—…,...
      • ์œ ์ฆˆ ์ผ€์ด์Šค
        • ์ž„๋Œ€์ธ(์ง‘์ฃผ์ธ) -> ๋กœ๊ทธ์ธ(/ํšŒ์›๊ฐ€์ž…) -> ๋ฌผ๊ฑด ์˜ฌ๋ฆผ -> ๋ฌผ๊ฑด
          ์ž„๋Œ€์ธ -> ๋กœ๊ทธ์ธ -> ๊ณ„์•ฝ์•Œ๋ฆผ -> ๊ณ„์•ฝ
          ์ž„๋Œ€์ธ -> ๋กœ๊ทธ์ธ -> ์ค‘๊ฐœ์ธ ์Šน์ธ (์ค‘๊ฐœ์ธ ์Šน์ธ --- ์ค‘๊ฐœ์ธ ๋“ฑ๋ก)
          ->
        • ์ž„์ฐจ์ธ(์„ธ์ž…์ž) -> ๋กœ๊ทธ์ธ(/ํšŒ์›๊ฐ€์ž…) -> ๋ฌผ๊ฑด ๊ฒ€์ƒ‰(/์ถ”์ฒœ๋ฌผ๊ฑด) -> ๋ฌผ๊ฑด
          -> ๊ณ„์•ฝ ์‹ ์ฒญ -> ๊ณ„์•ฝ -> ์ด์‚ฌ (์ข…๋ฃŒ) ์ž„์ฐจ์ธ -> ๋ฌผ๊ฑด ๊ฒ€์ƒ‰ -> ๋ฌผ๊ฑด -> ์ฐœํ•˜๊ธฐ -> ๊ด€์‹ฌ ๋ฌผ๊ฑด ๋ชฉ๋ก
        • ์ค‘๊ฐœ์ธ -> ๋กœ๊ทธ์ธ(/ํšŒ์›๊ฐ€์ž…) -> ์ค‘๊ฐœ์ธ๋“ฑ๋ก
          ์ค‘๊ฐœ์ธ -> ๋กœ๊ทธ์ธ -> ๊ณ„์•ฝ
        • ๊ณ„์•ฝ ์ข…๋ฃŒ ์ „์— ๊ฐ€๊ณ„์•ฝ, ์ตœ์ข… ๊ณ„์•ฝ์„œ ์ž‘์„ฑ (๋ชจ๋‘ ์ฐธ์—ฌ)
        • ์ค‘๊ฐœ์ธ์€ ๊ณ„์•ฝ ๋“ค์–ด๊ฐˆ ๋•Œ ๋“ฑ๊ธฐ๋ถ€๋“ฑ๋ณธ ๋“ฑ ๊ทผ๊ฑฐ ์ž๋ฃŒ ์ œ์‹œ ํ•„์š”
          ์ž„๋Œ€์ธ, ์ž„์ฐจ์ธ ๋ชจ๋‘ ๊ฒ€์ฆ ํ•„์š”
        • ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž -> ๋กœ๊ทธ์ธ -> ์ค‘๊ฐœ๋Œ€ํ–‰(์ค‘๊ฐœ์ธ ์—†๋Š” ๋ฌผ๊ฑด)
          MVP์—์„œ๋Š” ๋ณดํ†ต ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์ œ์™ธ
    • ํˆด๋กœ ๊ทธ๋ฆฌ๊ธฐ (draw.io)
      • ๋ฌธ์„œ update ํž˜๋“ฆ
  • ์œ ์ฆˆ์ผ€์ด์Šค๋กœ Entity ๋ชจ๋‘ ๋„์ถœ ์ดํ›„ ERD ์ž‘์„ฑ

  • MySQL Workbench ์ด์šฉ

Forward Engineering

์ˆ˜์ • ๋ฐ ๊ฒ€ํ† 

  • reverse engineering
    • ์ฟผ๋ฆฌ๋กœ ๋งŒ๋“  ํ›„ diagram์œผ๋กœ ํ™•์ธ (์—ญ ์ •๊ทœํ™”)

[Note]

  • MySQL EERD (Enhanced Entity Relationship Diagram)
  • ๋ชจ๋“  ๋ฌธ์ œ๋Š” ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋จ!
  • ์ดˆ๊ธฐ DB ์„ค๊ณ„์‹œ ์ž˜ ์ •๊ทœํ™” ํ•ด๋†“์œผ๋ฉด ๋‚˜์ค‘์— ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ
  • nginx; ๋…ผ๋ฆฌ์ ์ธ ์„œ๋ฒ„
  • cloud ์„œ๋ฒ„๋Š” device
  • instance: ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ ์ƒํƒœ
  • table (value object) -> class
  • ์—…๋ฌด ํ๋ฆ„๋„ ์œ„ํ•ด์„œ ๊ธฐํš์ž๋“ค๋„ flow chart ๋งŽ์ด ์‚ฌ์šฉ
  • ๋ฐ˜์ •๊ทœํ™”; ๋ฐ์ดํ„ฐ ์œ ์ง€ ์–ด๋ ค์›€
  • ๋ทฐ๋„ ๋งค๋ฒˆ ์กฐ์ธ๋งˆ๋‹ค ๋น„์šฉ ๋ฐœ์ƒ
  • ๋น…๋ฐ์ดํ„ฐ์—์„œ ๋ฐ˜์ •๊ทœํ™” ๋งŽ์ด ํ•˜๊ธด ํ•จ (์„ฑ๋Šฅ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ณ„ํš ํ•„์ˆ˜)
  • Column์€ ๋น„์‹ธ๊ณ  row๋Š” ์Œˆ
  • ๊ธฐํƒ€์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ปฌ๋Ÿผ์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋‚ญ๋น„์ž„
    ๊ธฐํƒ€์ •๋ณด๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•ด์„œ type, value๋ฅผ row๋กœ ๋งŒ๋“ฌ
    column -> row๋กœ ๋ณ€๊ฒฝ (์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ์—ญ์ •๊ทœํ™”, ๊ธฐํƒ€์ •๋ณด ์ปฌ๋Ÿผ ๋ฌด์ˆ˜ํžˆ ๋งŽ์œผ๋ฉด ๋ถ„๋ฆฌ)
  • persona - ๊ฐ€์ƒ ๋Œ€ํ‘œ ์ธ๋ฌผ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” (ssh 512 ์“ธ ๊ฒƒ์ด๋ฏ€๋กœ varchar(256)๋กœ ์„ธํŒ…)
  • ์ฃผ๋ฏผ๋ฒˆํ˜ธ๋Š” ์–‘๋ฐฉํ–ฅ ์•”ํ˜ธํ™” (์•”ํ˜ธํ™” ํ›„ ๋‚˜์ค‘์— ๋ณตํ˜ธํ™”, varchar(60) ์ด์ƒ ์„ธํŒ…)

Reference