๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿช CS

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (DB, DataBase)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (DB, DataBase)


์ผ์ •ํ•œ ๊ทœ์น™, ํ˜น์€ ๊ทœ์•ฝ์„ ํ†ตํ•ด ๊ตฌ์กฐํ™”๋˜์–ด ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ํŠน์ • DBMS๋งˆ๋‹ค ์ •์˜๋œ ์ฟผ๋ฆฌ ์–ธ์–ด(query language)๋ฅผ ํ†ตํ•ด ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •, ์กฐํšŒ ๋“ฑ ์ˆ˜ํ–‰

DBMS
: ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์–ด, ๊ด€๋ฆฌํ•˜๋Š” ํ†ตํ•ฉ ์‹œ์Šคํ…œ

  • ์‹ค์‹œ๊ฐ„ ์ ‘๊ทผ

  • ๋™์‹œ ๊ณต์œ  ๊ฐ€๋Šฅ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ„์— DBMS๊ฐ€ ์žˆ๊ณ , ๊ทธ ์œ„์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์กด์žฌํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.

  • MySQL(DBMS) ์œ„์— Node.js๋‚˜ php(์‘์šฉ ํ”„๋กœ๊ทธ๋žจ)์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„์ง‘์–ด๋‚ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ด€๋ จ ๋กœ์ง ๊ตฌ์ถ•

์ข…๋ฅ˜

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

1. ์—”ํ„ฐํ‹ฐ (entity)


์‚ฌ๋žŒ, ์žฅ์†Œ, ๋ฌผ๊ฑด, ์‚ฌ๊ฑด, ๊ฐœ๋… ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†์„ฑ์„ ์ง€๋‹Œ ๋ช…์‚ฌ
ex) ํšŒ์› (์—”ํ„ฐํ‹ฐ) - ์ด๋ฆ„, ์•„์ด๋””, ์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ

  • ์—”ํ„ฐํ‹ฐ๋Š” ์•ฝํ•œ ์—”ํ„ฐํ‹ฐ์™€ ๊ฐ•ํ•œ ์—”ํ„ฐํ‹ฐ๋กœ ๋‚˜๋‰œ๋‹ค.
  • ์„œ๋น„์Šค์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž์ถฐ ์†์„ฑ์ด ์ •ํ•ด์ง„๋‹ค.
    • ์ฃผ์†Œ๋ผ๋Š” ์†์„ฑ์ด ์„œ๋น„์Šค์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋ฌด๊ด€ํ•œ ์†์„ฑ์ด๋ผ๋ฉด, ์ฃผ์†Œ ์†์„ฑ์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

์•ฝํ•œ ์—”ํ„ฐํ‹ฐ, ๊ฐ•ํ•œ ์—”ํ„ฐํ‹ฐ

  • ์•ฝํ•œ ์—”ํ„ฐํ‹ฐ : ์ž์ฒด์ ์œผ๋กœ ํ‚ค๋ฅผ ๋ณด์œ ํ•˜์ง€ ๋ชปํ•œ ์—”ํ„ฐํ‹ฐ

  • ๊ฐ•ํ•œ ์—”ํ„ฐํ‹ฐ : ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์—”ํ„ฐํ‹ฐ

  • A๊ฐ€ ํ˜ผ์ž์„œ๋Š” ์กด์žฌํ•˜์ง€ ๋ชปํ•˜๊ณ , B์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ข…์†์ ์ด๋ผ๋ฉด A๋Š” ์•ฝํ•œ ์—”ํ„ฐํ‹ฐ, B๋Š” ๊ฐ•ํ•œ ์—”ํ„ฐํ‹ฐ

  • ๋ฐฉ์€ ๊ฑด๋ฌผ ์•ˆ์—๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ์€ ์•ฝํ•œ ์—”ํ„ฐํ‹ฐ, ๊ฑด๋ฌผ์€ ๊ฐ•ํ•œ ์—”ํ„ฐํ‹ฐ

2. ๋ฆด๋ ˆ์ด์…˜ (relation)


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„
์—”ํ„ฐํ‹ฐ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DB๋Š” ๋ฆด๋ ˆ์ด์…˜ ํ•˜๋‚˜์— ๋‹ด์•„์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ๋ฆด๋ ˆ์ด์…˜ == ํ…Œ์ด๋ธ” (๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ)
    • ๋ฆด๋ ˆ์ด์…˜ == ์ปฌ๋ ‰์…˜ (NoSQL์—์„œ)
  • ํšŒ์›์ด๋ผ๋Š” ์—”ํ„ฐํ‹ฐ๊ฐ€ DB์—์„œ ๊ด€๋ฆฌ๋  ๋•Œ ๋ฆด๋ ˆ์ด์…˜์œผ๋กœ ๋ณ€ํ™”๋œ๋‹ค.

ํ…Œ์ด๋ธ”, ์ปฌ๋ ‰์…˜

  • ๋Œ€ํ‘œ์  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - MySQL
    • ๊ตฌ์กฐ : ๋ ˆ์ฝ”๋“œ-ํ…Œ์ด๋ธ”-DB
  • ๋Œ€ํ‘œ์  NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - MongoDB
    • ๊ตฌ์กฐ : ๋„ํ๋จผํŠธ-์ปฌ๋ ‰์…˜-DB
  • ๋ ˆ์ฝ”๋“œ๊ฐ€ ์Œ“์—ฌ์„œ ํ…Œ์ด๋ธ”์ด ๋˜๊ณ , ํ…Œ์ด๋ธ”์ด ์Œ“์—ฌ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

3. ์†์„ฑ (attribute)


๋ฆด๋ ˆ์ด์…˜์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์ฒด์ ์ด๋ฉฐ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ์ •๋ณด

ex) '์ฐจ' ์—”ํ„ฐํ‹ฐ
์†์„ฑ : ์ฐจ ๋„˜๋ฒ„, ๋ฐ”ํ€ด ์ˆ˜, ์ƒ‰์ƒ, ์ฐจ์ข… ๋“ฑ
์ด ์ค‘์—์„œ ์„œ๋น„์Šค์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์†์„ฑ๋“ค๋งŒ ์—”ํ„ฐํ‹ฐ์˜ ์†์„ฑ์ด ๋œ๋‹ค.

4. ๋„๋ฉ”์ธ (domain)


๋ฆด๋ ˆ์ด์…˜์— ํฌํ•จ๋œ ๊ฐ๊ฐ์˜ ์†์„ฑ๋“ค์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ง‘ํ•ฉ

ex) '์„ฑ๋ณ„' ์†์„ฑ
๊ฐ’์˜ ์ง‘ํ•ฉ : [๋‚จ, ์—ฌ]

  • ๋ฆด๋ ˆ์ด์…˜ : ํšŒ์›
  • ์†์„ฑ : ์ด๋ฆ„, ์•„์ด๋””, ์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ, ์„ฑ๋ณ„
  • ๋„๋ฉ”์ธ : ์„ฑ๋ณ„์˜ [๋‚จ, ์—ฌ]

5. ํ•„๋“œ์™€ ๋ ˆ์ฝ”๋“œ


  • ๋ ˆ์ฝ”๋“œ : ํ…Œ์ด๋ธ”์— ์Œ“์ด๋Š” ํ–‰(raw) ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ
    • ํŠœํ”Œ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

์˜ˆ์‹œ
์—”ํ„ฐํ‹ฐ, ํ…Œ์ด๋ธ” : ์ฑ…
์†์„ฑ : ์ œ๋ชฉ, ๊ฐ€๊ฒฉ, ISBN, ์ €์ž, ์ถœํŒ๋…„๋„ ๋“ฑ
๊ทธ ์ค‘ ' ์ด๋ฆ„, ์ €์ž์˜ ์•„์ด๋””, ์ถœํŒ๋…„๋„, ์žฅ๋ฅด, ์ƒ์„ฑ์ผ์‹œ, ์—…๋ฐ์ดํŠธ ์ผ์‹œ'๋งŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •

์ด ์—”ํ„ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ์–ด ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค๋ ค๋ฉด ์†์„ฑ์— ๋งž๋Š” ํƒ€์ž…์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

CREATE TABLE book (
    id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(255),
    author_id INT,
    phblishing_year VARCHAR(255),
    genre VARCHAR(255),
    created_at DATETIME,
    update_at DATETIME,
    PRIMARY KEY (id)
);

ํ•„๋“œ ํƒ€์ž…

  • ์ˆซ์ž ํƒ€์ž… : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT ๋“ฑ
  • ๋‚ ์งœ ํƒ€์ž…
    • DATE : ๋‚ ์งœ ๋ถ€๋ถ„์€ ์žˆ์œผ๋‚˜ ์‹œ๊ฐ„ ๋ถ€๋ถ„์€ ์—†๋Š” ๊ฐ’์— ์‚ฌ์šฉ
    • DATETIME : ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๊ฐ’์— ์‚ฌ์šฉ
    • TIMESTAMP : ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๊ฐ’์— ์‚ฌ์šฉ
  • ๋ฌธ์ž ํƒ€์ž…
    • CHAR : ๊ณ ์ • ๊ธธ์ด ๋ฌธ์ž์—ด (0 ~ 255), ๋ ˆ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ฌด์กฐ๊ฑด ์„ ์–ธํ•œ ๊ธธ์ด ๊ฐ’์œผ๋กœ ๊ณ ์ •ํ•ด์„œ ์ €์žฅ๋œ๋‹ค.
      • ์œ ๋™์ ์ด์ง€ ์•Š์€ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์— ํšจ์œจ์ 
    • VARCHAR : ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž์—ด (0 ~ 65,535), ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์šฉ๋Ÿ‰์„ ๊ฐ€๋ณ€์‹œ์ผœ ์ €์žฅํ•œ๋‹ค.
      • ์œ ๋™์ ์ธ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์— ํšจ์œจ์ 
    • TEXT : ํฐ ๋ฌธ์ž์—ด ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ (๊ฒŒ์‹œํŒ์˜ ๋ณธ๋ฌธ)
    • BLOB : ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ (AWS S3 ์ด์šฉํ•ด ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๊ณ , ํŒŒ์ผ์— ๊ด€ํ•œ ๊ฒฝ๋กœ๋ฅผ VARCHAR๋กœ ์ €์žฅ)
    • ENUM : ENUM('x-small', 'small', 'medium', ' large', 'x-large') ํ˜•ํƒœ
      • ํ•˜๋‚˜๋งŒ ์„ ํƒ ๊ฐ€๋Šฅ
      • ENUM ๋ฆฌ์ŠคํŠธ์— ์—†๋Š” ์ž˜๋ชป๋œ ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋ฉด ๋นˆ ๋ฌธ์ž์—ด์ด ๋Œ€์‹  ์‚ฝ์ž…๋œ๋‹ค.
      • x-small ๋“ฑ์ด 0, 1 ๋“ฑ์œผ๋กœ ๋งคํ•‘๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ด์ 
      • ์ตœ๋Œ€ 65,535๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
    • SET : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์„ ํƒ ๊ฐ€๋Šฅ
      • ๋น„ํŠธ ๋‹จ์œ„์˜ ์—ฐ์‚ฐ ๊ฐ€๋Šฅ
      • ์ตœ๋Œ€ 64๊ฐœ์˜ ์š”์†Œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ENUM์ด๋‚˜ SET์„ ์“ธ ๊ฒฝ์šฐ, ๊ณต๊ฐ„์ ์œผ๋กœ ์ด์ ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ˆ˜์ •์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ENUM์ด๋‚˜ SET์—์„œ ์ •์˜ํ•œ ๋ชฉ๋ก์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

6. ๊ด€๊ณ„


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ”์€ ์„œ๋กœ์˜ ๊ด€๊ณ„๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ด ๊ด€๊ณ„๋ฅผ ๊ด€๊ณ„ํ™”์‚ดํ‘œ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

![[Pasted image 20230206100851.png]]

1:1 ๊ด€๊ณ„

ํ•˜๋‚˜์˜ A๋Š” ํ•˜๋‚˜์˜ B๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ ํ•œ ๊ฐœ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ €๋‹น ์œ ์ € ์ด๋ฉ”์ผ์€ ํ•œ ๊ฐœ์”ฉ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ

  • ์œ ์ € ํ…Œ์ด๋ธ” : ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ฃผ์†Œ
  • ์ด๋ฉ”์ผ ํ…Œ์ด๋ธ” : ์ด๋ฆ„, ์ด๋ฉ”์ผ

1:N(์ผ๋Œ€๋‹ค) ๊ด€๊ณ„

ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
ํ•œ ๊ฐœ์ฒด๊ฐ€ ๋งŽ์€ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ด€๊ณ„

์˜ˆ๋ฅผ ๋“ค์–ด ์‡ผํ•‘๋ชฐ์„ ์šด์˜ํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, ํ•œ ์œ ์ €๋‹น ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ƒํ’ˆ์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ํ•˜๋‚˜๋„ ๋„ฃ์ง€ ์•Š๋Š” 0๊ฐœ์˜ ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‹ˆ 0๋„ ํฌํ•จ๋˜๋Š” ํ™”์‚ดํ‘œ๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•œ๋‹ค.

  • ์œ ์ € ํ…Œ์ด๋ธ” : ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ฃผ์†Œ
  • ์ƒํ’ˆ ํ…Œ์ด๋ธ” : ์ด๋ฆ„, ๊ฐ€๊ฒฉ, ์ถœ์‹œ์ผ

N:M(๋‹ค๋Œ€๋‹ค) ๊ด€๊ณ„

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ์™€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
์–‘๋ฐฉํ–ฅ์—์„œ ๋‹ค์ˆ˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•™์ƒ๊ณผ ๊ฐ•์˜์˜ ๊ด€๊ณ„๋กœ ๋ณผ ๋•Œ, ํ•™์ƒ์€ ๊ฐ•์˜๋ฅผ ๋งŽ์ด ๋“ค์„ ์ˆ˜ ์žˆ๊ณ  ๊ฐ•์˜๋„ ์—ฌ๋Ÿฌ ๋ช…์˜ ํ•™์ƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋Š” ํ…Œ์ด๋ธ” ๋‘ ๊ฐœ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๊ตฌ์ถ•ํ•˜์ง€๋Š” ์•Š๊ณ  1:N, 1:M์ด๋ผ๋Š” ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ ์„œ ์„ค์ •ํ•œ๋‹ค.

  • ํ•™์ƒ ํ…Œ์ด๋ธ” : ID, ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ฃผ์†Œ
  • ๊ฐ•์˜ ํ…Œ์ด๋ธ” : ID, ์ด๋ฆ„, ๊ต์ˆ˜๋ช…
  • ํ•™์ƒ_๊ฐ•์˜ ํ…Œ์ด๋ธ” : ํ•™์ƒID, ๊ฐ•์˜ID

7. ํ‚ค


ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ณ , ํ…Œ์ด๋ธ” ์ž์ฒด์˜ ์ธ๋ฑ์Šค๋ฅผ ์œ„ํ•ด ์„ค์ •๋œ ์žฅ์น˜
๊ธฐ๋ณธํ‚ค, ์™ธ๋ž˜ํ‚ค, ํ›„๋ณดํ‚ค, ์Šˆํผํ‚ค, ๋Œ€์ฒดํ‚ค

![[Pasted image 20230206102104.png]]
์Šˆํผํ‚ค๋Š” ์œ ์ผ์„ฑ์ด ์žˆ๊ณ  ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ํ›„๋ณดํ‚ค๋Š” ์ตœ์†Œ์„ฑ๊นŒ์ง€ ๊ฐ–์ถ˜ ํ‚ค๋‹ค.
ํ›„๋ณดํ‚ค ์ค‘์—์„œ ๊ธฐ๋ณธํ‚ค๋กœ ์„ ํƒ๋˜์ง€ ๋ชปํ•œ ํ‚ค๋Š” ๋Œ€์ฒดํ‚ค๊ฐ€ ๋œ๋‹ค.

  • ์œ ์ผ์„ฑ : ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ตœ์†Œ์„ฑ : ํ•„๋“œ๋ฅผ ์กฐํ•ฉํ•˜์ง€ ์•Š๊ณ  ์ตœ์†Œ ํ•„๋“œ๋งŒ ์จ์„œ ํ‚ค๋ฅผ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธํ‚ค

์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ํ‚ค๋กœ, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์ค‘ ๊ณ ์œ ํ•˜๊ฒŒ ์กด์žฌํ•˜๋Š” ์†์„ฑ

๊ธฐ๋ณธํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ค‘๋ณต๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์ค‘๋ณต๋œ๋‹ค๋ฉด ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ ID๋ฅผ ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •ํ•œ๋‹ค๋ฉด, ๋ฌผ๋ก  {ID, name}์ด๋ผ๋Š” ๋ณตํ•ฉํ‚ค๋ฅผ ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ž์—ฐํ‚ค ๋˜๋Š” ์ธ์กฐํ‚ค ์ค‘์— ๊ณจ๋ผ ์„ค์ •ํ•œ๋‹ค.

์ž์—ฐํ‚ค

์ค‘๋ณต๋œ ๊ฐ’๋“ค์„ ์ œ์™ธํ•˜๋ฉฐ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ '์ž์—ฐ์Šค๋ ˆ' ๋ฝ‘๋‹ค๊ฐ€ ๋‚˜์˜ค๋Š” ํ‚ค
์–ธ์  ๊ฐ€ ๋ณ€ํ•˜๋Š” ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ € ํ…Œ์ด๋ธ”๋กœ ๊ฐ€์ •ํ•˜๋ฉด, ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋“ฑ์˜ ์†์„ฑ์ด ์žˆ๋‹ค. ์ด ์ค‘ ์ด๋ฆ„, ์„ฑ๋ณ„ ๋“ฑ์€ ์ค‘๋ณต๋œ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ถ€์ ์ ˆํ•˜๋ฏ€๋กœ ๋‚จ๋Š” ๊ฒƒ์€ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ์ด๋‹ค. ์ด๊ฐ€ ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ธ์กฐํ‚ค

์ธ์œ„์ ์œผ๋กœ ์ƒ์„ฑํ•œ ํ‚ค

  • ์ž์—ฐํ‚ค์™€ ๋‹ค๋ฅด๊ฒŒ ๋Œ€์กฐ์ ์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š์•„์„œ ๋ณดํ†ต ๊ธฐ๋ณธํ‚ค๋Š” ์ธ์กฐํ‚ค๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ € ํ…Œ์ด๋ธ”๋กœ ๊ฐ€์ •ํ•˜๋ฉด, ํšŒ์› ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ์ด๋ฆ„, ์„ฑ๋ณ„ ๋“ฑ์˜ ์†์„ฑ์ด ์žˆ๋‹ค. ์ธ์œ„์ ์œผ๋กœ ์œ ์ € ์•„์ด๋””๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ณ ์œ  ์‹๋ณ„์ž๊ฐ€ ์ƒ๊ฒจ๋‚œ๋‹ค.
  • ์˜ค๋ผํด - sequenece, MySQL - auto increment ๋“ฑ

์™ธ๋ž˜ํ‚ค

๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ๊ทธ๋Œ€๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’
๊ฐœ์ฒด์™€์˜ ๊ด€๊ณ„๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

  • ์ค‘๋ณต๋˜์–ด๋„ ๊ดœ์ฐฎ๋‹ค.
  • client ํ…Œ์ด๋ธ” : ๊ธฐ๋ณธํ‚ค - ID
  • product ํ…Œ์ด๋ธ” : ์™ธ๋ž˜ํ‚ค - user_id (client ํ…Œ์ด๋ธ”์˜ ID)

ํ›„๋ณดํ‚ค

  • ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋  ์ˆ˜ ์ž‡๋Š” ํ›„๋ณด๋“ค
  • ์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ์„ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋Š” ํ‚ค

๋Œ€์ฒดํ‚ค

  • ํ›„๋ณดํ‚ค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ, ์–ด๋А ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ณธํ‚ค๋กœ ์ง€์ •ํ•˜๊ณ  ๋‚จ์€ ํ›„๋ณดํ‚ค๋“ค

์Šˆํผํ‚ค

  • ๊ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผ์„ฑ์„ ๊ฐ–์ถ˜ ํ‚ค

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)


ํ–‰๊ณผ ์—ด์„ ๊ฐ€์ง€๋Š” ํ‘œ ํ˜•์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • SQL ์–ธ์–ด๋ฅผ ์จ์„œ ์กฐ์ž‘ํ•œ๋‹ค.
  • ํ‘œ์ค€ SQL์„ ์ง€ํ‚ค๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์ œํ’ˆ์— ํŠนํ™”์‹œํ‚จ SQL์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์˜ค๋ผํด - PL/SQL, SQL Server - T-SQL, MySQL - SQL

MySQL

: ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ์™€ ํ˜ธํ™˜๋˜๋ฉฐ ํ˜„์žฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • c, c++๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • MyISAM ์ธ๋ฑ์Šค ์••์ถ• ๊ธฐ์ˆ , B-ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ธ๋ฑ์Šค, ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹œ์Šคํ…œ, ๋งค์šฐ ๋น ๋ฅธ ์กฐ์ธ, ์ตœ๋Œ€ 64๊ฐœ์˜ ์ธ๋ฑ์Šค ์ œ๊ณต
  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.
  • ๋กค๋ฐฑ, ์ปค๋ฐ‹, ์ด์ค‘ ์•”ํ˜ธ ์ง€์› ๋ณด์•ˆ ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ œ๊ณต

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜

  • ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹ฌ์žฅ๊ณผ๋„ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๊ณณ์ด๋‹ค. ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋กœ ์‰ฝ๊ฒŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์ง•, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ๊ณ ๊ฐ€์šฉ์„ฑ ์ฒ˜๋ฆฌ์— ๊ฐ•์ ์„ ๋‘๊ณ  ์žˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์œ„์—๋Š” ์ปค๋„ฅํ„ฐ API ๋ฐ ์„œ๋น„์Šค ๊ณ„์ธต์„ ํ†ตํ•ด MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์‰ฝ๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅ

PostgreSQL

  • ๋””์Šคํฌ ์กฐ๊ฐ์ด ์ฐจ์ง€ํ•˜๋Š” ์˜์—ญ์„ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜์ธ VACUUM์ด ํŠน์ง•
  • ์ตœ๋Œ€ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ : 32TB
  • SQL ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JSON์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ง€์ • ์‹œ๊ฐ„์— ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ, ๋กœ๊น…, ์ ‘๊ทผ ์ œ์–ด, ์ค‘์ฒฉ๋œ ํŠธ๋žœ์žญ์…˜, ๋ฐฑ์—… ๋“ฑ ๊ฐ€๋Šฅ

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (Not only SQL)


SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ๋Œ€ํ‘œ์ ์œผ๋กœ MongoDB์™€ redis ๋“ฑ์ด ์žˆ๋‹ค.

MongoDB
: JSON์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , Binary JSON ํ˜•ํƒœ(BSON)๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋ฉฐ ์™€์ด์–ด๋“œํƒ€์ด๊ฑฐ ์—”์ง„์ด ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ์žฅ์ฐฉ๋œ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์—์„œ ํ™•์žฅ๋œ ๋„ํ๋จผํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
  • ๋น…๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
  • ๊ณ ๊ฐ€์šฉ์„ฑ
  • ์ƒค๋”ฉ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ์ง€์›
  • ์Šคํ‚ค๋งˆ๋ฅผ ์ •ํ•ด ๋†“์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ๋กœ๊น… ๋“ฑ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ•์ ์„ ๋ณด์ธ๋‹ค.
  • ๋„ํ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์„ ์ง€๋‹ˆ๊ธฐ ํž˜๋“  ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ธ ObjectID๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • ๊ธฐ๋ณธํ‚ค๋กœ ์œ ๋‹‰์Šค ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜์˜ ํƒ€์ž„์Šคํƒฌํ”„(4๋ฐ”์ดํŠธ), ๋žœ๋ค ๊ฐ’(5๋ฐ”์ดํŠธ), ์นด์šดํ„ฐ(3๋ฐ”์ดํŠธ)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

redis
: ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด์ž ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋ฌธ์ž์—ด(string)์ด๋ฉฐ ์ตœ๋Œ€ 512MB๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ
  • ์…‹, ํ•ด์‹œ ์ง€์›
  • pub/sub ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ฑ„ํŒ… ์‹œ์Šคํ…œ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ž๋‹จ์— ๋‘์–ด ์‚ฌ์šฉํ•˜๋Š” ์บ์‹ฑ ๊ณ„์ธต, ๋‹จ์ˆœํ•œ ํ‚ค-๊ฐ’์ด ํ•„์š”ํ•œ ์„ธ์…˜ ์ •๋ณด ๊ด€๋ฆฌ, ์ •๋ ฌ๋œ ์…‹(sorted set) ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ ์„œ๋น„์Šค์— ์‚ฌ์šฉ