Database : ํ์ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ๋
ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๊ตฌ์กฐ์ ์ผ๋ก ํตํฉํด ๋์ ๊ฒ
DBMS(Database Management System) : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ผ๋ก ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ํํธ์จ์ด
SQL(Structured Query Language) : ๊ตฌ์กฐ์ ์ง์์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ดํ๊ณ ๊ด๋ฆฌํ๋ ์ธ์ด
Scaling Out : ์ํ์ ํ์ฅ์ผ๋ก ์๋ฒ๋ฅผ ์ฆ์คํ๋ ๊ฒ
Scaling Up : ์์ง์ ํ์ฅ์ผ๋ก ์๋ฒ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ
๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ๋ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ ์ผ๊ด์ฑ(Consistency), ๊ฐ์ฉ์ฑ(Availability), ๋ถํ ๋ด๊ตฌ์ฑ(Partition Tolerance) ์ด๋ผ๋ 3๊ฐ์ง ํน์ฑ ์ค 2๊ฐ์ง ํน์ฑ๋ง ๋ง์กฑํ ์ ์๋ค๋ ์ด๋ก
- 3๊ฐ์ง ํน์ฑ์ ๋ชจ๋ ๋ง์กฑํ ์ ์๋ค
3๊ฐ์ง ํน์ฑ
์ผ๊ด์ฑ (Consistency): ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์์ ๊ฐ์ ์์ ์ ์กฐํํ๋ ๋ฐ์ดํฐ๋ ํญ์ ๋์ผํ ๊ฐ์์ ๋ณด์ฅํ๋ ํน์ฑ- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์ Transaction๊ณผ ๊ฐ์ ๋งค์ปค๋์ฆ์ด ํ์ํ๋ค
- RDBMS์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง๋ง, NoSQL์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋๋ค
- NoSQL์
์ต์ข ์ผ๊ด์ฑ(๊ถ๊ทน์ ์ผ๊ด์ฑ)์ ์ง์ํ๋ค. (๊ถ๊ทน์ ์ผ๊ด์ฑ์ด๋ ์ผ๊ด์ฑ์ ์์ ํ ๋ณด์ฅํ์ง ์์ง๋ง, ๊ถ๊ทน์ ์ผ๋ก ์ธ์ ๊ฐ๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅ๋จ์ ์๋ฏธํ๋ค)NoSQL์ ๋๊ธฐ์ ์ผ๊ด์ฑ ์ ์ง๋ฒ- ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์ ์๋ตํ๊ธฐ ์ ์ ๋ชจ๋ ์๋ฒ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ ๋ค์ ์๋ตํ๋ ๋ฐฉ๋ฒ
- ์๋ต์๊ฐ์ด ๋๋ฆฌ์ง๋ง ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ณด์ฅํ๋ค
NoSQL์ ๋น๋๊ธฐ์ ์ผ๊ด์ฑ ์ ์ง๋ฒ- ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋ ๊ฒฝ์ฐ, ๋ณ๊ฒฝ์ฌํญ์ ์์ ํ์ผ์ ๊ธฐ๋กํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ตํ ๋ค์ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ๋ ์๋ฒ์ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ
- ์๋ต์๊ฐ์ด ๋น ๋ฅด์ง๋ง ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๋ ์๋ฒ์ ์ฅ์ ํ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์๋ค
๊ฐ์ฉ์ฑ (Availability): ๋ชจ๋ ํด๋ผ์ด์ธํธ์ Read/Write ์์ฒญ์ ๋ํด ํญ์ ์๋ต ๊ฐ๋ฅํด์ผํ๋ค๋ ํน์ฑ- ํน์ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ์ฑ๊ณต์ ์ผ๋ก ์๋น์ค๋ฅผ ์ง์ํ๋ ๊ฒ
- ๋ฐ์ดํฐ ์ ์ฅ์์ ๋ํ ๋ชจ๋ ๋์(read, write ๋ฑ) ํญ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฆฌํด๋์ด์ผํ๋ค.
- NoSQL์ ์ฌ๋ฌ ์๋ฒ์ ๋ฐ์ดํฐ ๋ณต์ (Replication)๋ฅผ ํ์ฌ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ค
- Replication ๋ฐฉ์์๋ Master-Slave, Peer-to-Peer ๋ฐฉ์์ด ์๋ค
๋ถํ ๋ด๊ตฌ์ฑ(Partition Tolerance): ์ง์ญ์ ์ผ๋ก ๋ถํ ๋ ๋คํธ์ํฌ ํ๊ฒฝ์์ ๋์ํ ๋, ๋ ์ง์ญ๊ฐ ๋คํธ์ํฌ๊ฐ ๋จ์ ๋๊ฑฐ๋ ๋คํธ์ํฌ ๋ฐ์ดํฐ ์ ์ค์ด ์ผ์ด๋๋ ๊ฐ๊ฐ์ ์ง์ญ ๋ด์ DB ์์คํ ์ ์ ์๋์ํด์ผ ํ๋ค๋ ํน์ฑ- RDBMS๋ ๋ถ์ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง Replication๋ฅผ ํ ๊ฒฝ์ฐ ํผํฌ๋จผ์ค๋ฅผ ๊ณ ๋ คํด์ผํ๊ณ Sharding์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๊ด๊ณ๊ฐ ๋ฌด๋์ง ์ ์๋ ๋ถ๋ด๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ๊นจ์ง๋ ๋ฆฌ์คํฌ๊ฐ ๋ฐ์ํ ์ ์๋ค
์กฐํฉ
CA : ์ผ๊ด์ฑ + ๊ฐ์ฉ์ฑโ RDBMS- ์์คํ ์ด ๋ค์ด๋์ด๋ ๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๊ณ , ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
CP : ์ผ๊ด์ฑ : ๋ถํ ๋ด๊ตฌ์ฑโ NoSQL- ๋ชจ๋ Read/Write ์ฐ์ฐ์ ๋ํด ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ ์งํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
- ๋ฐ์ดํฐ๋ณด๋ค๋ ์ฑ๋ฅ์ด ์ค์ํ ์์คํ ์ ์ ํฉํ๋ค
AP : ๊ฐ์ฉ์ฑ + ๋ถํ ๋ด๊ตฌ์ฑโ NoSQL- ๊ถ๊ทน์ ์ผ๊ด์ฑ(Eventual Consistency)์ ๋ณด์ฅํ๋ ์์คํ ์ ์ ํฉํ๋ค
- ์ผ๊ด์ฑ์ ์๊ตฌํ์ง ์๋ ์์คํ ์ ์ ํฉํ๋ค
RDBMS(Relational Database Management System) ์ด๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ด๋ค.
ํน์ง
Relational: ๋ฐ์ดํฐ๋ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ถ์ฐ๋์ด ์ ์ฅ๋๋ค. (๊ด๊ณ๋ผ๋ ๊ฐ๋ ์ผ๋ก ๋ฐ์ดํฐ ์ค๋ณต์ ํผํ ์ ์๋ค)Schema: RDBMS์ ๋ฐ์ดํฐ๋ ์ ํด์ง ์คํค๋ง์ ๋ฐ๋ผ ํ ์ด๋ธ์ ์ ์ฅ๋๋ค- RDBMS๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค Scaling Out์ด ๋ฒ๊ฑฐ๋กญ๋ค (๊ด๊ณ๋ฅผ ๋งบ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฅธ DB์๋ฒ์ ๋ถ์ฐ์ํค๊ธฐ ์ด๋ ต๋ค)
๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค (ํธ๋์ญ์ ์ ํตํด) = ๋ฐ์ดํฐ์ ACID ์์ฑ์ ์ ๊ณตํ๋ค- RDBMS๋
CA(Consistency + Avaliablity) ์์คํ ์ด๋ค. (๋คํธ์ํฌ ๋ถํ ๋ด๊ตฌ์ฑ P์ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ Scaling Out์ ํตํ ์๋ฒ Clustering ๊ตฌ์กฐ์ ๋ถ์ ํฉํ๋ค)
์ฅ๋จ์
์ฅ์
๊ด๊ณ๋ผ๋ ๊ฐ๋ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์์ด ์ ์ฅํ ์ ์๋ค.- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค (๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์งํค๋
๊ด๊ณ๊ฐ๋ ๋๋ถ์) - ๋ช ํํ ์ ์๋ ์คํค๋ง ๋๋ถ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ค
๋จ์
- NoSQL์ ๋นํด DB ์๋ฒ์ Scaling Out์ด ๋ฒ๊ฑฐ๋กญ๋ค. Scaling Up์ผ๋ก ์๋ฒ ์ฑ๋ฅ์ ํฅ์ํ ์ ๋ฐ์ ์๋ค
- ์คํค๋ง ๋๋ฌธ์ ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ์ ํํ๊ฐ ์ ํ๋๋ค. (๋์ ๋๋ผ ์ฅ์ ์ด ๋ ์๋)
- ํ ์ด๋ธ ๊ด๊ณ๊ฐ ๋ณต์กํด ์ง์๋ก JOIN ์ฐ์ฐ์ ์ํ์๊ฐ์ด ๊ธธ์ด์ง๋ค.
NoSQL(Not Only SQL) ์ด๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ ์นญํ๋ ๋จ์ด์ด๋ค.
NoSQL์ด ๋ํ๋ ๋ฐฐ๊ฒฝ
๋น ๋ฐ์ดํฐ์ ๋ฑ์ฅ์ผ๋ก DB ์๋ฒ๋ก์ ํธ๋ํฝ ์ฆ๊ฐ
โ RDB์ ์ฑ๋ฅ ํฅ์ ํ์์ฑ ๋๋
โ Scaling Out์ RDB ํน์ฑ์ ๋ถ์ ์ , Scaling Up์ ๋น์ฉ ๋ฌธ์ ๊ฐ ํผ
โ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ํฌ๊ธฐํ๋ Scaling Out์ด ๊ฐ๋ฅํ NoSQL์ด ๋ฑ์ฅํ๊ฒ ๋จ
ํน์ง
Not Relational: ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๊ด๊ณ๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์๋๋ค.No Schema: ๋ฐ์ดํฐ์ ๋ํ ์คํค๋ง๊ฐ ์๋ค (์๋ก ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ปฌ๋ ์ ์ ์ ์ฅํ ์ ์๋ค.)- ์๋ฒ์ Scaling Up, Scaling Out ๋ฐฉ์์ ์ง์ํ๋ค
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์๋ฒฝํ๊ฒ ๋ณด์ฅํ์ง ๋ชปํ๋ค. (
๊ถ๊ทน์ ์ผ๊ด์ฑ) = ์ํ๋ ๋ฐ์ดํฐ์ ACID ์์ฑ์ ์ ๊ณตํ๋ค ๋ถ์ฐํ ๊ตฌ์กฐ: ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ณต์ ํ์ฌ ๋ถ์ฐ ์ ์ฅํ๋ค. (ํน์ DB ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ฌด์ค๋จ ์๋น์ค ์ ๊ณต ๊ฐ๋ฅ)- NoSQL์
CP(Consistency + Partition Tolerance) ๋๋ AP(Avaliablity + Partition Tolerance) ์์คํ ์ด๋ค.
์ฅ๋จ์
์ฅ์
- ์คํค๋ง๊ฐ ์์ด์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ์ ์ฝ์ด ๋น๊ต์ ์๋ค
- ์ดํ๋ฆฌ์ผ์ด์ ์ด ํ์๋ก ํ๋ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค
- Read ์ฐ์ฐ ์๋๊ฐ RDB๋ณด๋ค ๋น ๋ฅด๋ค
- Scaling Out์ด ๊ฐ๋ฅํ๋ค.
๋จ์
- ์ ์ฅ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ ๊ฒฐ์ ํด์ผ ํ๋ค
- ๋ฐ์ดํฐ ์ค๋ณต ๋ฌธ์ ๊ฐ ์ฌํ๋ค (๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ์, ์ฌ๋ฌ collection์ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๊ฐฑ์ ํด์ผ ํ๋ค)
NoSQL์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์
Key-Value ๋ฐฉ์: key๋ฅผ ๋ฐ์ดํฐ์ ๊ณ ์ ์๋ณ์๋ก ์ฌ์ฉํ์ฌ key-value ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.- Partitioning, Scaling out์ด ๊ฐ๋ฅํ๋ค
- Redis, Riak, Voldmort
Document ๋ฐฉ์: ๋ฐ์ดํฐ๋ฅผ document๋ผ๋ ํ์ ์ผ๋ก ์ ์ฅํ๋ค- document๋ XML, JSON, YAML๊ณผ ๊ฐ์ ํ์์ผ๋ก JSON์ ๋ง์ด ์ฌ์ฉํ๋ค.
- document๋ค์ collection์ผ๋ก ๊ด๋ฆฌํ๋ค. collection์๋ document์ id๊ฐ ์ ์ฅ๋์ด ์๊ณ , O(1) ์๊ฐ๋ณต์๋๋ก document๋ฅผ ์กฐํํ ์ ์๋ค
- Write๋ณด๋ค Read์ฐ์ฐ์ด ๋ง์ ์๋น์ค์ ์ ํฉํ๋ค
- MongoDB, CouchDB
Column Model ๋ฐฉ์: ํ๋์ key์Column ์ด๋ฆ - Column ๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํ๋ค- Column์
Column ์ด๋ฆ, Column ๊ฐ, Timestamp๋ก ๊ตฌ์ฑ๋๋ค - Read๋ณด๋ค Write ์ฐ์ฐ์ด ๋ง์ ์๋น์ค์ ์ ํฉํ๋ค
- ๊ตฌ๊ธ์ Big Table
- Column์
Graph ๋ฐฉ์: ๋ฐ์ดํฐ๋ฅผ ๋ ธ๋๋ก ํํํ๊ณ ๋ ธ๋ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํ์ดํ๋ก ํํํ๋ ๋ฐฉ์- ๋ฐ์ดํฐ๋ค์ ๊ด๊ณ๋ฅผ ์ค์์ํ๋ค.
- Sones, Allegro Graph
์ฉ์ด ๋น๊ต (์ฐธ๊ณ )
| SQL | MongoDB | DynamoDB | Cassandra | Couchbase |
|---|---|---|---|---|
| ํ ์ด๋ธ | ์ปฌ๋ ์ | ํ ์ด๋ธ | ํ ์ด๋ธ | ๋ฐ์ดํฐ ๋ฒํท |
| ์ด | ๋ฌธ์ | ํญ๋ชฉ | ์ด | ๋ฌธ์ |
| ์ปฌ๋ผ | ํ๋ | ์์ฑ | ์ปฌ๋ผ | ํ๋ |
| ๊ธฐ๋ณธ ํค | ObjectId | ๊ธฐ๋ณธ ํค | ๊ธฐ๋ณธ ํค | ๋ฌธ์ ID |
| ์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ๋ณด์กฐ ์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ์ธ๋ฑ์ค |
| ๋ณด๊ธฐ | ๋ณด๊ธฐ | ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค | ๊ตฌ์ฒดํ๋ ๋ณด๊ธฐ | ๋ณด๊ธฐ |
| ์ค์ฒฉ๋ ํ ์ด๋ธ ๋๋ ๊ฐ์ฒด | ํฌํจ ๋ฌธ์ | ๋งต | ๋งต | ๋งต |
| ๋ฐฐ์ด | ๋ฐฐ์ด | ๋ชฉ๋ก | ๋ชฉ๋ก | ๋ชฉ๋ก |
RDBMS๊ฐ ์ ํฉํ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ท์น์ด ์ค์ํ ๊ฒฝ์ฐ
- ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ(NoSQL์ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ์ค๋ณต ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฐพ์ ์ ๋ฐ์ดํธ ํด์ค์ผ ํ๋ค)
NoSQL์ด ์ ํฉํ ๊ฒฝ์ฐ
- ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ ์ ์๊ฑฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๊ณ ํ์ฅ๋ ๊ฒฝ์ฐ
- Read ์ฐ์ฐ์ด ๋ง๊ณ Write ์ฐ์ฐ์ด ๋๋ฌธ๊ฒฝ์ฐ
- ๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ Scaling Out์ด ๋ถ๊ฐํผํ ๊ฒฝ์ฐ