Community

< ๐Ÿ’ก NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜ >

NoSQL ์€ 'Not Only SQL' ์˜ ์ค„์ž„๋ง๋กœ ๊ธฐ์กด์— ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฑธ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ์ด ๋œป์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)๋ฅผ ์•ˆ์“ด๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ „๋‹ฌ๋˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ์ด๋Š” ์ž˜๋ชป๋œ ํ•ด์„์ด๊ณ  ๊ธฐ์กด์— ๋…์ ์ ์ธ ํ˜•ํƒœ์˜ RDBMS ๋ฅผ ํƒˆํ”ผํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฌ๋‹ค ๋ผ๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. NoSQL ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๊ธฐ์กด์— RDBMS ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ์ด์Šˆ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ๋ฌด์กฐ๊ฑด NoSQL ์ด RDBMS ๋ณด๋‹ค ๋›ฐ์–ด๋‚˜๋‹ค๊ณ  ๋ณผ ์ˆœ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ง„ ํŠน์ง•๊ณผ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ• ์ง€์— ๋”ฐ๋ผ NoSQL ์ด ๋” ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜๋„, RDBMS ๊ฐ€ ๋” ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ฐ€์ง„ ํŠน์ง•์„ ์ž˜ ํŒŒ์•…ํ•˜๊ณ  ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€ ์ถœ์‹œ๋œ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. โœ”๏ธ Key-Value Database Key ๊ฐ€ ๊ณ ์œ  ์‹๋ณ„์ž ์—ญํ• ์„ ํ•˜๋Š” Key-Value ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ฐ’์€ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Key-Value ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ Redis, Memcached, Hazelcast ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. โœ”๏ธ Wide Column Database ํ–‰๋งˆ๋‹ค ๊ณ ์œ ํ•œ key ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ํ–‰์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—ด(Column)์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋•Œ ์ €์žฅ๋˜๋Š” ์—ด์˜ ํ˜•ํƒœ๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ(๋‹ค์–‘ํ•œ ์Šคํ‚ค๋งˆ๋กœ) ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(Wide Column Database ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ https://database.guide/what-is-a-column-store-database/ ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”) ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์˜ ์••์ถ•, ๋ถ„์‚ฐ์ฒ˜๋ฆฌ, ์ง‘๊ณ„ ์ฟผ๋ฆฌ(SUM, COUNT, AVG ๋“ฑ) ๋ฐ ์ฟผ๋ฆฌ ๋™์ž‘ ์†๋„ ๊ทธ๋ฆฌ๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Wide Column ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ Cassandra, Hbase, Druid ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. โœ”๏ธ Document Database ๊ฐ์ฒด ํ˜น์€ Metadata ๋ฅผ ํ•˜๋‚˜์˜ Document ํ˜น์€ Page ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. Document ๋Š” JSON, XML ๋“ฑ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ €์žฅ๋˜๋Š” ๋ฌธ์„œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์Šคํ‚ค๋งˆ๋กœ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Document ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ MongoDB, Apache CouchDB ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. โœ”๏ธ Graph Database Graph ๋ฐ์ดํ„ฐ๋Š” ์ˆ˜ํ•™์  ๊ทธ๋ž˜ํ”„ ์ด๋ก ์— ํ† ๋Œ€๋ฅผ ๋‘๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐœ๋ณ„ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ (Node ํ˜น์€ Vertex), ์„ฑ์งˆ์ด ๋น„์Šทํ•œ ๊ฐ์ฒด๋“ค์„ ๋ฌถ์–ด์ฃผ๋Š” ๋ฌถ์Œ(Label), ๊ฐ์ฒด๋“ค๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ด€๊ณ„์„ (Edge ํ˜น์€ Relationship)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. Graph ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ด๋Ÿฌํ•œ Graph ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ ๊ณผ ์„ ์˜ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ , ์„ ์„ ๋”ฐ๋ผ ํŠน์ • ํŒจํ„ด๊ณผ ์ด์ƒ ํ˜„์ƒ์„ ๋น ๋ฅด๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๋„๊ตฌ๋กœ ์ด๋ฅผ ์‹œ๊ฐํ™”ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋ณด๋‹ค ์ง๊ด€์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ Graph ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ Neo4j, Blazegraph, OrientDB , AgensGraph ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค