NoSQL์ด ๋ฌด์์ด๊ณ , ์ฌ์ฉ ๋ชฉ์ ์ด ๋ฌด์์ธ์ง ๋ค๋ฃจ๊ธฐ์ ์์, RDBMS์์ ๋น๊ต๊ฐ ํ์ํ๋ค.
์ ํต์ ์ธ RDBMS์ ํน์ง
RDBMS๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ฉฐ, SQL์ ํตํด ์กฐ์ํ ์ ์๋ค.
๊ด๊ณํ์ ํน์ง์ ์ด๋ ค ๋ค์ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์ ๊ทํ, ํธ๋์ญ์
, ๋ณํ์ฒ๋ฆฌ, 2PL, Recovery, Log ... ๋ฑ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ด ์กด์ฌํ๊ณ ,
์ด๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์๊ตฌ์ฌํญ์ ๊ตฌํํ๊ณ ์ต์ ํํ๋ ๋ฑ ์ฑ๋ฅ์ ์ผ๋ก๋ ํ๋ฅญํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์์ง๋ง, ๋ฌธ์ ์ ๋ํ ๋ง๋ง์น ์๋ค.
- ๋น์ฉ: RDBMS๋ ๋ค์ํ ๊ธฐ๋ฅ๋งํผ์ด๋ ๋น์ฉ๋ ๋ง์ด ๋๋ ํธ์ด๋ค. ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ณ ์ฌ์ฉํ๋ ์ ์ (์ ์๋)๊ฐ ๋ง๋ค๋ฉด DB๋ฅผ ์ฌ๋ฟ ๋ค๋ค์ผ ํ๋๋ฐ, ๋น์ฉ์ด ๋ง์ด ๋ค์ด ์ฝ์ง ์๋ค.
- ์คํค๋ง: ์ ํ๋ ์คํค๋ง๊ฐ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ปฌ๋ผ์ ์ถ๊ฐํ๋๊ฒ๋ ์ฝ์ง ์๋ค.
- ํผํฌ๋จผ์ค: ์ด๋น ๋ง๊ฑด ์ด์์ ๋ณ๊ฒฝ, ์์ญ๋ง๊ฑด์ ์กฐํ ๋ฑ์ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ์์ด์ ์ฒด๊ณ์ ์ด๊ณ ๊ท์น์ ๋ง์ถฐ ์์ฑ๋ RDBMS๋ ์ข์ง๋ง, ์ข ๋ ๋น ๋ฅด๊ณ , ์ข ๋ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์์ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ฌ๊ธฐ์ NoSQL์ด ๋ฑ์ฅํ๋ค.
NoSQL์ ์ ์์ ํน์ง
RDBMS์๋ ๋ค๋ฅธ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ง์นญํ๋ฉฐ, ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฐํ๊ฒ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก NoSQL์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค. RDBMS์๋ ๋ค๋ฅธ ๊ฒ์ ์ง์คํ๊ณ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
NoSQL์ ์ ์ฐํ ์คํค๋ง๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ค์น ๋ฐ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋งํผ ํ์ฅ์ฑ๋ ์ฉ์ดํ๋ฉฐ ํน์ ์์ ์ ์ต์ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํตํด ์ฑ๋ฅ์ ๊ทน๋ํ ์ํฌ ์ ์๋ค.
(ex: Key-Value Store๋ ํค ๊ธฐ๋ฐ ๊ฒ์์ ์ต์ ํ, Document Store๋ ๋ณต์ซ๋ฐ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ)
๋ฐ์ดํฐ๋ค์ ์ผ๊ด์ฑ์ ์ค์(strong consistency)ํ๋ RDBMS์ ๋ฌ๋ฆฌ ์ํ๋ ์ผ๊ด์ฑ์ ์ถ๊ตฌํ๋ NoSQL์ ๋์ ํผํฌ๋จผ์ค์ ๊ฐ์ฉ์ฑ์ด ํน์ง์ด๋ค.
๋์ ์์ ๋ก์ด ๊ตฌ์กฐ๋ก ์ธํด SQL๊ณผ ๊ฐ์ ํ์ค ์ง์ ์ธ์ด๊ฐ ๋ถ์กฑํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ๋์ ์ด ํ์ํ๊ณ
์ผ๊ด์ฑ์ด ์ํ๋ ๋งํผ ACID๊ฐ ๋ณด์ฅ์ด ์๋๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ธฐ์กด RDBMS์ ์ฐจ๋ณํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ์ฅ์ ํ๋ค.
์ด๋ฌํ ํน์ง๋ค์ด ์ด๋์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ดํด๋ณด์
๋ถ์ฐ ์์คํ
NoSQL์ ๋ถ์ฐ ์์คํ ์์ ํ์ฅ์ฑ๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ ์ฑ๋ฅ์ ๊ทน๋ํํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฐ์ดํฐ์ ํธ๋ํฝ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฒ๋ฅผ ์ํ์ ์ผ๋ก ํ์ฅํ ์ ์๋ค.
์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋๋์ด ์ ์ฅํ์ฌ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค๋ ํน์ง์ด ์๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์์ ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ค.
๋ฐ์ดํฐ ๋ชจ๋ธ ๋ฐ ์ฟผ๋ฆฌ ์ธ์ด ๊ด๋ จ ํน์ง
NoSQL์ ์ ์ฐํ๊ธฐ ๋๋ฌธ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฉ์ดํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์คํค๋ง ์ค๊ณ๊ฐ ํ์ํ์ง ์์ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ์ ์ฅ ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ ๋ฒ์ ์ ๊ด๋ฆฌํ์ฌ ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ ์ฅํ๊ณ ํ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
๋ค์ํ NoSQL ์์คํ
๊ฐ NoSQL ๋ฐ์ดํฐ๋ชจ๋ธ ๋ณ๋ก ๋ํ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
Document Database
์คํค๋ง๊ฐ ์ ๋์ ์ธ ๊ฒ์ด ํน์ง์ด๋ค.
XML, JSON๋ฑ์ Document๋ฅผ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๋ค.
ํธ๋ฆฌํ ๊ตฌ์กฐ๋ก ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๊ฑฐ๋ ํ์ํ ์ ์๋ค.
MongoDB, Auzre Cosmos DB, CouchDB ... ๋ฑ๋ฑ์ด ํด๋น๋๋ค.
MongoDB Data Model
๊ฐ์ฅ ์ ๋ช ํ NoSQL์ค ํ๋์ด๊ณ , ๊ฐํธํ๋ฉด์ ๋ค๋ฃจ๊ธฐ ์ฌ์ด ํน์ง์ผ๋ก ์ธํด ๋ค์ํ ๊ฐ์๋ ๊ต์ก์์ ์ ๋ฌธ์๋ค์๊ฒ ์ ์ฒด์ ์ธ ๋ฐฑ์๋ ์ฌ์ดํด์ ๊ฐ๋ฅด์น ๋ ์์ฃผ ์ฑํ๋๋ค.
MongoDB Atlas๋ ์ ๋ฃ ํด๋ผ์ฐ๋ ์๋น์ค์ด๋ค.
Collection์ ๊ฐ๊ฐ์ Document๋ค์ ๊ณ ์ ํ ObjectID ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฌ์ฉ ์์)
db.createCollection("proejct", {capped:true, size: 1310720,max:500})
db.<collection_name>.insert(<document(s)>) - Insert๋ฐฉ์
db.<collection_name>.remove(<condition>) - remove ๋ฐฉ์
์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ฐ๋ ๋ฐฉ์์ผ๋ก ์กฐ์์ด ๊ฐ๋ฅํ๋ค. (๋ฒ์ ๋ง๋ค ์ฌ์ฉ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค)
Key-value
Key-Value๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ Key์ Value๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
Key๋ ๋ฐ์ดํฐ ํญ๋ชฉ๊ณผ ์ฐ๊ฒฐ๋ ๊ณ ์ ์๋ณ์๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ ์ฌ์ฉ๋๋ค.
Value๋ ๋ฐ์ดํฐ ํญ๋ชฉ ๊ทธ ์์ฒด๋ฅผ ์๋ฏธํ๊ณ ๋ฌธ์์ด ๋๋ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด์๋๋ค.
์ด ๋ฐฉ์์ ๊ณ ์ฑ๋ฅ, ๊ฐ์ฉ์ฑ, ํ์ฅ์ฑ์ ์ค์ ์ ๋๊ณ ์๋ค.
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ, ๋น๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ, ๋ฐ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๋ชจ๋ ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋น ๋ฅธ ์ ๊ทผ ์๋๋ฅผ ์ ๊ณตํ์ฌ ๋ถ์ฐ ์ ์ฅ์ ์ ํฉํ๋ค.
์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ธ์ด ์์ด ๋์ํ๋ค.
์ฃผ์ Key-Value ๋ฐ์ดํฐ์ด์ค๋ก๋ Redis, DynamoDB(AWS), Oracle NoSQL Database, Voldemort, Oracle Berkeley DB ๋ฑ ๋ค์ํ๊ฒ ์๋ค.
Key-Value ์ ์ฅ์๋ ๋จ์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ๋น ๋ฅธ ๊ฒ์ ์ฑ๋ฅ์ด ํ์ํ ํ๊ฒฝ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค. ์บ์ฑ, ์ธ์ ๊ด๋ฆฌ, ๋ก๊ทธ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ ์ฉํ๋ค.
Column-based or Wide Cloumn NoSQL
Cassandra, BigTable(Google์ ๋ถ์ฐ ์คํ ๋ฆฌ์ง ์์คํ ), Apache Hbase(BigTable๊ณผ ์ ์ฌ) ๋ฑ์ด ๋ํ์ ์ด๋ค.
Wide Column Database๋ ๊ฐ ํ๋ง๋ค ํค์ ํด๋น ๊ฐ์ด ์กด์ฌํ๋ฉฐ, ๊ฐ ํ์ ์คํค๋ง๋ ์๋ก ๋ค๋ฅผ ์ ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
์ฆ ์ ์ฐํ ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
์์ถ, ๋ถ์ฐ์ฒ๋ฆฌ, ์ง๊ณ ์ฒ๋ฆฌ(sum, avg, count) ๋ฑ์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ด๋ฉฐ, ์ฟผ๋ฆฌ ๋์ ์๋์ ํ์ฅ์ฑ์์ ๊ฐ์ ์ ๋ณด์ด๋ ๋ฐฉ์์ด๋ค.
์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํค์คํ์ด์ค ๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ๊ด๊ณํ ๋ชจ๋ธ์ ์คํค๋ง์ ๋น์ทํ๋ค. ์ด ํค์คํ์ด์ค๋ ๋ชจ๋ ์ปฌ๋ผ ํจ๋ฐ๋ฆฌ๋ฅผ ํฌํจํ๋ฉฐ, ์ปฌ๋ผ ํจ๋ฐ๋ฆฌ๋ ํ์ ํฌํจํ๊ณ , ํ์ ์ปฌ๋ผ์ ํฌํจํ๋ค. ์ดํดํ๊ธฐ ํ๋ค๊ฒ ์๊ฒผ์ง๋ง ๋น๊ต์ ๊ฐ๋จํ๋ค.
์์๋ฅผ ๋ณด๋ฉด, ์ ์ ํ๋กํ์ Bob, Britney, Tori๋ ๋ชจ๋ ์ด๋ฉ์ผ์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ง๋ง, Bob๊ณผ Britney๋ง ์ฑ๋ณ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๊ณ , Bob๋ง age์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ์ ์ฐ์ฑ์ ๋ณด์ธ๋ค. ์ฆ ํ์ค์ ๋ฐ๋ฅผ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ์ด์ ์์ฒด ํ์๋ง ์กด์ฌํ๋ฉฐ ๊ฐ ์, ์ด๋ฆ, ํ์์คํฌํ๋ฅผ ํฌํจํ ์ ์๋ค.
Graph-based
๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ๋ก ํํํ๋ ๋ฐฉ์์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ ธ๋๋ก, ๋ฐ์ดํฐ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ์ ์ผ๋ก ํํํ๋ค.
RDBMS๋ณด๋ค ํผํฌ๋จผ์ค๊ฐ ์ข๊ณ ์ ์ฐํ๋ฉฐ, ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค๋ ํน์ง์ด ์๋ค.
SNS, Network Diagram๋ฑ์ ์ฌ์ฉ๋๋ฉฐ ๋ํ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ Neo4J, Blazegraph, OrientDB, AgensGraph(๊ตญ๋ด์๋ฃจ์ ) ๋ฑ์ด ์๋ค.
Neo4j
Neo4j๋ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ๋ ธ๋(Node)์ ๊ด๊ณ(Relationship)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์์คํ ์ด๋ค.
๊ฐ ๋ ธ๋๋ 0๊ฐ, 1๊ฐ ๋๋ ์ฌ๋ฌ ๊ฐ์ ๋ ์ด๋ธ(Label)์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ ธ๋์ ๊ด๊ณ ๋ชจ๋ ์์ฑ(Properties)์ ๊ฐ์ง ์ ์๋ค.
์์ฑ์ key-value ํ์์ผ๋ก ์ ์๋๋ฉฐ, ๊ด๊ณ๋ ํญ์ ์์ ๋ ธ๋์ ๋ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ด๊ณ ์ ํ(Relationship Type)๋ ํฌํจ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ER(Entity-Relationship) ๋ชจ๋ธ ๋ฐ EER(Enhanced ER) ๋ชจ๋ธ์ ๊ฐ๋ ๊ณผ ์ ์ฌํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ด๊ณ ์ง๊ด์ ์ผ๋ก ํํํ๋ ๋ฐ ์ ํฉํ๋ค.
Neo4j์์ ๋ ธ๋๋ฅผ ์์ฑํ ๋๋ Cypher๋ผ๋ ๊ณ ์์ค ์ ์ธํ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, CREATE ๋ช ๋ น์ด๋ฅผ ํตํด ๋ ธ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ๋ ธ๋์ ๋ ์ด๋ธ๊ณผ ์์ฑ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.
์์ฑ์ ์ค๊ดํธ {}๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ฉฐ, ์๋ฅผ ๋ค์ด CREATE (n:Person {name: 'Alice', age: 30}) ์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด Person ๋ ์ด๋ธ์ ๊ฐ์ง ๋ ธ๋๋ฅผ ์์ฑํ๊ณ , name๊ณผ age๋ผ๋ ์์ฑ์ ์ค์ ํ ์ ์๋ค.
์ด์ฒ๋ผ Neo4j ๋ฐ์ดํฐ๋ฅผ ๊ด๊ณ ์ค์ฌ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ๊ด๊ณ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํํํ๋ ๋ฐ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค.
์ง๊ธ๊น์ง ์ ๋ฆฌํ ๋๋ก, ๋ค์ํ ํ์ ์ NoSQL์ด ์กด์ฌํ๋ฉฐ ๋ฌด์์ ์ด๋์ ์ฌ์ฉํ ์ง๋ ๋์์ธ ์ด์ด์ค๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์(ํน์ ๊ฐ๋ฐ์)๊ฐ ์ํฉ์ ๋ง์ถฐ ์ํ๋ ํ์ ์ ๊ณจ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค.
CAP ์ ๋ฆฌ(CAP Theorem)
CAP ์ ๋ฆฌ๋ ๋ถ์ฐ ์ปดํจํ ์์คํ ์์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ, ๊ฐ์ฉ์ฑ, ๋คํธ์ํฌ ๋ถํ ๋ด์ฑ์ ๋ชจ๋ ๋์์ ์๋ฒฝํ ๋ง์กฑ์ํฌ ์ ์๋ค๋ ๊ฒ์ ์ค๋ช ํ๋ ์ด๋ก ์ด๋ค. ์ด๋ 2000๋ Eric Brewer๊ฐ ์ฒ์ ์ ์ํ์๊ณ , 2002๋ ์ ์์ผ๋ก ์ฆ๋ช ๋ ์ ๋ฆฌ์ด๋ค.
CAP ์ ๋ฆฌ์ 3๊ฐ์ง ์์
1. ์ผ๊ด์ฑ (Consistency)
- ์ด๋ค ๋ ธ๋์ ์ฐ๊ฒฐํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๋ฐ์ดํฐ๊ฐ ํ ๋ ธ๋์ ๊ธฐ๋ก๋ ๋๋ง๋ค ์ฐ๊ธฐ๊ฐ '์ฑ๊ณต'๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๊ธฐ ์ ์ ์์คํ ์ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์ ๋ฌํ๊ฑฐ๋ ๋ณต์ ํด์ผํ๋ค.
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๊ฐ๋ ฅํ ์ ์งํ๋ฉด, ๋คํธ์ํฌ๊ฐ ๋๋ ค์ง๊ฑฐ๋ ์ฅ์ ์ํฉ์์ ๋๊ธฐ ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
2. ๊ฐ์ฉ์ฑ (Availability)
- ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ๋ ์ด์์ ๋ ธ๋๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ์๋ ์๋ต์ ๋ฐ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ชจ๋ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฑฐ๋, ์คํจ๋๋๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
- ์์คํ ์ ์ผ๋ถ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋, ๋ชจ๋ ์์ ๋ ธ๋๊ฐ ์์ธ ์์ด ๋ชจ๋ ์์ฒญ์ ์ ํจํ ์๋ต์ ๋ฐํํ๋ฉฐ ๊ฐ์ฉ์ฑ์ ์ ์งํด์ผ ํ๋ค.
3. ๋ถํ ๋ด์ฑ(Partition tolerance)
- ๋ถํ ์ ํ๋ฉด ์์คํ ๋ด์ ํต์ ์ค๋จ์ผ๋ก, ๋ ๋ ธ๋ ๊ฐ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๊ฑฐ๋ ์ผ์์ ์ผ๋ก ์ง์ฐ๋๋ค.
- ๋ถํ ๋ด์ฑ์ ์์คํ
์ ๋
ธ๋ ๊ฐ ํต์ ์ค๋จ์ด ์๋ฌด๋ฆฌ ๋ง์๋ ํด๋ฌ์คํฐ๊ฐ ๊ณ์ ์๋ํด์ผ ํจ์ ์๋ฏธํ๋ค.
์ฆ, ๋คํธ์ํฌ ๋ฉ์์ง๊ฐ ์์ค๋๊ฑฐ๋ ์์คํ ์ผ๋ถ๊ฐ ๋ง๋น ๋๋๋ผ๋ ์์คํ ์ด ๊ณ์ ๋์ํ ์ ์์ด์ผ ํ๋ค - ๋คํธ์ํฌ ๋ถ๋ฆฌ ์ํฉ์์๋ ์์คํ ์ด ์๋ต์ฑ์ ์ ์งํ๋ค
์ด๋ ๊ฒ 3๊ฐ์ง๊ฐ CAP์ ๋ฆฌ์ 3์์์ธ๋ฐ, ๋ชจ๋ ์์คํ ์ ์ 3๊ฐ์ง ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํ ์ ์์ผ๋ฉฐ, ๋๊ฐ์ง๋ฅผ ์ ํํด์ผ ํ๋ค.
์๋ฅผ๋ค์ด, ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ์ ํํ๊ณ ๋ถํ ๋ด์ฑ์ ํฌ๊ธฐํ๋๊ฐ(CA), ์ผ๊ด์ฑ๊ณผ ๋ถํ ๋ด์ฑ์ ์ฑ๊ธฐ๋ ๋์ ๊ฐ์ฉ์ฑ์ ํฌ๊ธฐํ๊ฑฐ๋(CP) ๊ฐ์ฉ์ฑ๊ณผ ๋ถํ ๋ด์ฑ์ ์ ํํ๊ณ ์ผ๊ด์ฑ์ ํฌ๊ธฐ(AP) ํด์ผํ๋ค.
์ฃผ๋ก NoSQL ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์ผ๊ด์ฑ๋ณด๋ค ๊ฐ์ฉ์ฑ๊ณผ ๋ถํ ๋ด์ฑ์ ์ค์์ํ์ฌ ๋ณด์ฅํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Eventual Consistency(์ต์ข ์ ์ผ๊ด์ฑ) ๋ชจ๋ธ์ ์ฑํํ์ฌ, ์๊ฐ์ด ์ง๋๋ฉด ์ผ๊ด์ฑ์ ํ๋ณดํ ์ ์๋๋ก ํ๋ค.
'Database > ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] โ๏ธ ๋ฐ์ดํฐ ๋ง์ด๋(Data Mining) (1) | 2024.12.07 |
---|---|
[DB] ๐ Big Data ๊ธฐ์ (feat. MapReduce, Hadoop) (3) | 2024.12.07 |
[DB] ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ ๐๏ธ ๊ตฌ์กฐ with MySQL (0) | 2024.12.06 |
[DB] ๐ ๋์์ฑ ์ ์ด(Concurrency Control) with MySQL (1) | 2024.12.06 |
[DB] ๐ ํธ๋์ญ์ (Transaction), ํ๋ณต(Recovery) with MySQL (0) | 2024.12.02 |