Introduction of Database - Suja-dot/Database GitHub Wiki

Database?

  • ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๊ตฌ์กฐํ™”๋œ ์ •๋ณด ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฒด๊ณ„์ ์ธ ์ง‘ํ•ฉ

DBMS(DataBase Management System)?

  • ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด

SQL(Structured Query Language)?

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ์ž๋ฃŒ์˜ ๊ฒ€์ƒ‰๊ณผ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ฑ๊ณผ ์ˆ˜์ •, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ ‘๊ทผ ์กฐ์ • ๊ด€๋ฆฌ

RDBMS(Relational DBMS)?

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • SQL์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • RDB๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ (RDB : ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ธฐ์ดˆ๋กœ ๋‘๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ 2์ฐจ์› ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
  • ์™ธ๋ž˜ํ‚ค(Foreign key)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋“ค๊ณผ์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ(Join ๊ฐ€๋Šฅ)

์žฅ์ 

  • ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅ
  • ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ํ•œ ๋ฒˆ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ

๋‹จ์ 

  • ํ…Œ์ด๋ธ”๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ์–ด ์‹œ์Šคํ…œ์ด ์ปค์งˆ ๊ฒฝ์šฐ JOIN๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์Œ
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œ์ผœ์•ผํ•˜๋Š” Scale-up๋งŒ์„ ์ง€์›(๋น„์šฉ ์ฆ๊ฐ€)
  • ์Šคํ‚ค๋งˆ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๋ฉฐ, ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๊ฒฝ์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์–ด๋ ค์›€

NoSQL(Not only SQL)?

  • RDB ํ˜•ํƒœ์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ์ˆ 
  • ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์Œ(Join ๋ถˆ๊ฐ€๋Šฅ)
  • ๋น…๋ฐ์ดํ„ฐ์˜ ๋“ฑ์žฅ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ์™€ ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ RDBMS์˜ ๋‹จ์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์€ ํฌ๊ธฐํ•˜๋˜ ๋น„์šฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐ์ดํ„ฐ์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” Scale-Out์„ ๋ชฉํ‘œ๋กœ ๋“ฑ์žฅ

์žฅ์ 

  • ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•˜๊ณ  ์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • ์–ธ์ œ๋“  ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ์ด ์šฉ์ดํ•˜๋ฉฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ Scale-up ๋ฟ๋งŒ ์•„๋‹Œ Scale-out๋„ ๊ฐ€๋Šฅ

๋‹จ์ 

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ˆ˜์ •์„ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ์— ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฒฐ์ •์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ

1. Key-Value Database

  • Data๊ฐ€ Key์™€ Value ์Œ์œผ๋กœ ์ €์žฅ๋˜๋ฉฐ Key๋Š” Value์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ
  • ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค๋„ ๊ฐ€๋Šฅ
  • ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ ์งˆ์˜ ์†๋„๊ฐ€ ๊ต‰์žฅํžˆ ๋น ๋ฆ„
  • e.g. Redis, Riak, Amazon Dynamo DB ๋“ฑ

2. Document Database

  • Key์™€ Document ํ˜•ํƒœ๋กœ ์ €์žฅ
  • Key-Value ๋ชจ๋ธ๊ณผ์˜ ์ฐจ์ด์ ์€ Value๊ฐ€ ๊ณ„์ธต์ ์ธ ํ˜•ํƒœ์ธ Document๋กœ ์ €์žฅ๋จ
  • ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌ
  • ๊ฒ€์ƒ‰์— ์ตœ์ ํ™”๋˜์–ด์žˆ์Œ
  • e.g. MongoDB, CouthDB ๋“ฑ

3. Wide Column Database

  • Column-family Model ๊ธฐ๋ฐ˜์˜ Database
  • Key์—์„œ field๋ฅผ ๊ฒฐ์ •ํ•จ
  • Key๋Š” Row(ํ‚ค ๊ฐ’)๊ณผ Column-family, Column-name์„ ๊ฐ€์ง€๋ฉฐ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ๊ฐ™์€ Column-family ์•ˆ์— ์†ํ•ด์žˆ๊ณ  ๊ฐ์ž์˜ Column-name์„ ๊ฐ€์ง
  • ์งˆ์˜๋Š” Row, Column-family, Column-name์„ ํ†ตํ•ด ์ˆ˜ํ–‰
  • e.g. HBase, Hypertable ๋“ฑ

4. Graph Database

  • ๋ฐ์ดํ„ฐ๋ฅผ Node์™€ Edge, Property์™€ ํ•จ๊ป˜ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” Database
  • ํŽ˜์ด์Šค๋ถ์ด๋‚˜ ํŠธ์œ„ํ„ฐ ๊ฐ™์€ ์†Œ์…œ ๋„คํŠธ์›Œํฌ์—์„œ ์ ํ•ฉ
  • ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ฒœํ•ด์ฃผ๋Š” ์ถ”์ฒœ์—”์ง„์ด๋‚˜ ํŒจํ„ด ์ธ์‹ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋กœ๋„ ์ ํ•ฉ
  • e.g. Neo4J