๐ปNoSQL์ด๋
1. NoSQL
NoSQL์ด๋(Not Only SQL)์ ์ฝ์๋ก ๋ง ๊ทธ๋๋ ์์์ ์ค๋ช ํ RDB ํํ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ๋ค๋ฅธ ํํ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ธฐ์ ์ ์๋ฏธํ๊ณ ์์ต๋๋ค. ๋ํ NoSQL์์๋ RDBMS์๋ ๋ฌ๋ฆฌ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ ํ ์ด๋ธ์ ๊ทธ๋ฅ ํ๋์ ํ ์ด๋ธ์ด๋ฉฐ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์์ ์ผ๋ฐ์ ์ผ๋ก ํ ์ด๋ธ ๊ฐ Join๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
NoSQL์ ๋งํ๋ค์ํผ 2์ฐจ์ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ก ์ ๋ณด๋ฅผ ๋งคํํ๋ SQL๊ณผ๋ ๋ค๋ฅด๋ค. NoSQL์ “๊ด๊ณํ์ด์ง ์์”(์ฌ์งํฉ) DB๋ฅผ ์์ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ข ๋ฅ๊ฐ ๋งค์ฐ ๋ค์ํ๋ฐ ๋ํ์ ์ผ๋ก๋ ์ฐ๊ด๋ฐฐ์ด์ ์ฌ์ฉํ๋ key-value, ๊ธฐ์กด์ ํ ๋์ ์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ Column-based, Json์ด๋ XML๋ฅผ ๋ฐ์ดํฐ๋ก ์ผ๋ Document-oriented ๋ฑ์ด ์๋ค.
1.1 NoSQL ๋์จ ์ด์
NoSQL์ ์ ์ ๋น ๋ฐ์ดํฐ์ ๋ฑ์ฅ์ผ๋ก ์ธํด ๋ฐ์ดํฐ์ ํธ๋ํฝ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํจ์ ๋ฐ๋ผ RDBMS์ ๋จ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด์๋ ์ฅ๋น๊ฐ ์ข์์ผ ํ๋ Scale-Up์ ํน์ง์ด ๋น์ฉ์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ํฌ๊ธฐํ๋ ๋น์ฉ์ ๊ณ ๋ คํ์ฌ ์ฌ๋ฌ ๋์ ๋ฐ์ดํฐ์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ Scale-Out์ ๋ชฉํ๋ก ๋ฑ์ฅํ์์ต๋๋ค. (ex: mongoDB, Redis ๋ฑ)
1.2 ํน์ง
- ๋ฐ์ ํํ, ๋น์ ํํ๋ ๋ฐ์ดํฐ์ ์ ํฉํ๋ค.
- SQL์ ํ ์ด๋ธ๋ก ๋ํ๋๋ ์ ํํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค. ๊ทธ๋ฌ๋ ๋น ๋ฐ์ดํฐ ์๋ ์ดํ๋ก๋ ๋ค์ํ ์ ํํ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ๋ฟ์ด์ ธ๋์๊ณ NoSQL์ ์ด๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ์ฉํ๋ค. ๋ฐ์ดํฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํธ๋ฆฌํ์ผ๋ก ๊ตฌ์ฑํ ์๋ ์๊ณ ์ถ์ํ๋ ๊ทธ๋ํ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํํํ ์๋ ์๋ค.
- “ACID” ๋์ “Eventual Consistency”๋ฅผ ํ์ฉํ๋ค.
- ๊ทธ๋ฌ๋ NoSQL์ ๋ถ์ฐํ์ ํน์ฑ์ ์ ๋ณด์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ์๋ง์ ๋จธ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ ์ฅํ๋๋ฐ ํ ์์ญ์ Update๊ฐ ์๊ธธ ์ ๊ทธ๊ฒ์ ์ค์๊ฐ์ผ๋ก ๋ค๋ฅธ ์์ญ์ ์ ํํ๋ ๊ฒ์ด ์ฝ์ง๋ง์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐ๋์ ์ด๋ ์ ๋์ ์ ํ ๋น์ฉ์ ์๋ฐ๋ ์๋ฐ์ ์๋ค. ๊ทธ๋์ NoSQL์ Consistency๋ฅผ ์กฐ๊ธ ํํํ๊ณ ๊ผญ ์ค์ ์ต์ ์ ์๋ ์ ์์ง๋ง “์ ๋ฐ์ดํธ๊ฐ ๋๊ธฐ ์ ๊น์ง๋” ๊ฐ์ง๊ณ ์๋ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค๋ “Eventual Consistency”๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค.
- ๋์ฉ๋์ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ ์ ๋ฆฌํ๋ค.
- ๋ถ์ฐํ ์ปดํจํ ์ ์ ๋ฆฌํ NoSQL์ ํน์ฑ์ ๋์ฉ๋์ ๋ฐ์ดํฐ ์ ์ฅ์ ๋งค์ฐ ์ฉ์ดํ๋ค. ํด๋ฌ์คํฐ ๋ด์ ๋จธ์ ๋ง ์ถ๊ฐํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ํน์ ๋๋ฉ์ธ์ ๋ฌธ์ ํด๊ฒฐ์ ๋ฐ์ด๋๋ค.
- SQL์ 2์ฐจ์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ ์ฅํ๋ค. ํ์ง๋ง NoSQL์ Key-value, Graph ๋ฑ์ ์๋ฃํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ด๋ก ์ธํด ํน์ ๋๋ฉ์ธ์์๋ ๊ณ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค.
- ๊ฐ๋ น ์์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ ๋๋ฉ์ธ์ผ๋ก ํ๋ ํ์ฌ์์ ์ธ๊ฐ ๊ด๊ณ๋ ๋ชจ๋ ๊ทธ๋ํ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ํ์ ์ต์ ํ๋ API๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ๋ ํฅ์์ํฌ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๋ API๊ฐ ๋ค์ํ๋ค.
- ๋ฐ๋ฉด NoSQL์ ์ ํ๋ง๋ค, ์ ํ๋ง๋ค ๋ค์ํ ์ง์์ธ์ด๊ฐ ์์ ์ ์๋ค. NoSQL์ ์ง์์ธ์ด๋ฅผ UnQL(Unstructured Query Language)๋ผ๊ณ ๋ ํ๋๋ฐ ๋๋ถ๋ถ SQL์ ๋นํด ์ ์์ค์ผ๋ก, ๋ณต์กํ ์ง์๊ฐ ์ด๋ ต๋ค. ๋ณต์กํ ์ง์๊ฐ ํ์ํ ๋๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ๋ง์ฌ์งํ๊ฑฐ๋, ์ฌ๋ฌ ์ง์๋ฅผ ์ค์ฒฉํ๊ธฐ๋ ํ๊ณ ๋๋ก๋ SQL์ ์์ด๋์ด๋ฅผ ์ฐจ์ฉํ๊ธฐ๋ ํ๋ค.
- ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๋งค์ฐ ๋ค์ํ๋ค.
- Document-oriented, Graph, Key-value ๋ฑ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ๋ค์ํ๋ค.
2. NoSQL์ ์ ํ
๋น๊ด๊ณํ ๋ชจ๋ธ์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์
- Wide Column Database ๋ฐฉ์(HBase, Hypertable)
- Key-value ๋ฐฉ์(Riak, Redis, Voldmort)
- Document ๋ฐฉ์(MongoDB, CouchDB)
- Graph ๋ฐฉ์(Sones, AllegroGraph)
2.1. Column-based
์์ด๋ ์ปฌ๋ผ ์คํ ์ด๋ ํ
์ด๋ธ, ํ ๋ฐ ๋์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์์ด๋ ์ปฌ๋ผ ์คํ ์ด๋ ๊ฐ ํ์ด ๋์ผํ ์ด์ ๊ฐ์ง ํ์๊ฐ ์๋ค๋ ์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ๋ฐ์ด๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์์ด๋ ์ปฌ๋ผ ์คํ ์ด๋ฅผ 2์ฐจ์์ ํค-๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์๊ฐํ๋ ์ฌ๋๋ค์ด ๋ง์ต๋๋ค. ์์ด๋ ์ปฌ๋ผ ์คํ ์ด๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ ๋ ์ ํฉํ๋ฉฐ, ์ฟผ๋ฆฌ ํจํด์ ์์ธกํ ์ ์์ต๋๋ค. ์์ด๋ ์ปฌ๋ผ ์คํ ์ด๋ ๋ณดํต ์ฌ๋ฌผ์ธํฐ๋ท ๋ฐ์ดํฐ์ ์ฌ์ฉ์ ํ๋กํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ํ์ ์ธ ์ ํ์ผ๋ก๋ Cassandra์ HBase๋ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์์ด๋ ์ปฌ๋ผ ์คํ ์ด์ ๋๋ค.
2.2. Document-oriented
Document-oriented(์ดํ “๋ฌธ์ ์งํฅ”) ์ ํ์ “๋ฌธ์”๋ผ๋ ํต์ฌ ๊ฐ๋ ์ ์ ์ํ๋ค. ๋ฌธ์ ์งํฅ ์ ํ์ ๋ฌธ์๋ฅผ ํฌ์ฅ๋๊ณ (encapsulated) ์ธ์ฝ๋๋ ๋ฐ์ดํฐ๋ก ์ดํดํ๋ค.
์ด๋ ๋ฐ์ดํฐ์ ์ ์ฉ๊ฐ๋ฅํ ์ธ์ฝ๋ฉ์ XML, YAML ๋ฑ์ด ์๋๋ฐ ์์ฆ์ JSON ์ธ์ฝ๋ฉ์ด ์์ฃผ ์ฌ์ฉ๋๋ค. ๋ค์ ๋งํด ์ฌ์ฉ์์๊ฒ ์ต์ํ JSON ๊ฐ์ฒด๋ก ๋ฌธ์(๋ ์ฝ๋)๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ด๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ์์ ์ ํน์ ํ๋ unique key๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ฌธ์ ์งํฅ์์๋ ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ๊ธฐ์ค์ด ๋ค์ํ๊ธฐ์ ๋จ์ํ ํ ์ด๋ธ์ ๋์ด์ ๋ค์ํ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
์๋ฅผ ๋ค์ด ์ด๋ค ํ์ฌ์ ์กฐ์ง๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์คํํ๊ธฐ ์ํด์ ๊ฐ ๋ฌธ์๋ฅผ ๋๋ ํ ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ํ์ ์ธ ์ ํ์ผ๋ก๋ MongoDB, IBM Domino, CouchDB ๋ฑ์ด ์๋ค.
2.3. Key-Value
Key-value ์ ํ์ ์ฐ๊ด๋ฐฐ์ด(Associative array)์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์ฌ์ฉํ๋ค. ์ฐ๊ด๋ฐฐ์ด์ map, dict ๋ผ๋ ์ด๋ฆ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ฃผ์ ์ธ์ด์์ ์ ๊ณตํ๊ณ ์์ด ์ฐ๋ฆฌ์๊ฒ๋ ์น์ํ ๊ฐ๋ ์ด๋ค.
์ด ์ ํ์์ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ Key, value ์์ ๋ชจ์ Collection(๋๋ ํ ์ด๋ธ)์ผ๋ก ํํ๋๋๋ฐ ์ด๋ ํค๋ ํ collection์์ ํ ๋ฒ๋ง ๋ฑ์ฅํ ์ ์๋ค.
๋ํ์ ์ธ ์ ํ์ผ๋ก๋ Oracle NoSQL Database, Apache Ignite, Dynamo ๋ฑ์ด ์๋ค.
2.4. Graph
๊ทธ๋ํ ์ ํ์ ๋ ธ๋๋ค์ ๊ด๊ณ๋ฅผ ํํํ๋ ๊ทธ๋ํ๋ฅผ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ํ๋ฉฐ ์ง์ ์ธ์ด๋ ๋ ธ๋(Node)์ ์์ง(Edge) ๋ฑ ๊ทธ๋ํ์ ๊ฐ๋ ์ ํ์ฉํ๋ค.
์ด ์ ํ์ ์ฅ์ ์ ๋ฐ์ดํฐ๋ค์ ๊ด๊ณ๋ฅผ ์ค์์ํด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ด ์์ง๋ก ์ง์ ์ฐ๊ฒฐ๋ ์ ์์ด ๋ฐ์ดํฐ ์ง์ ์ ํน์ ๋ ธ๋์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฐ์ฐ์ผ๋ก ํ๋(Retrieve) ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
๋ํ์ ์ธ ์ ํ์ผ๋ก๋ IBM DB2, Neo4j ๋ฑ์ด ์๋ค.
๋ ํผ์ธ์ค(Reference)
'DB > MongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
mongoDB ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ ํ์ผ๋ง๋ค๊ธฐ (0) | 2022.04.12 |
---|---|
mongoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง (0) | 2021.12.28 |
[mongoDB] ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ฝ๋ ์ , ๋ํ๋จผํธ ๋ค์ด๋ฐ ๊ด์ต (0) | 2021.12.23 |
[๋ณด์]DB์ฐ๊ฒฐ ํ ๋ ๋น๋ฐ ํค(SECRET_KEY) ๊ด๋ฆฌํ๊ธฐ (0) | 2021.12.16 |