CodeGym /Java Course /All lectures for KO purposes /NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์„ฑ

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์„ฑ

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 891
์‚ฌ์šฉ ๊ฐ€๋Šฅ

2.1 NoSQL์ด๋ผ๋Š” ์šฉ์–ด์˜ ๋“ฑ์žฅ

์ตœ๊ทผ "NoSQL"์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๋งค์šฐ ์œ ํ–‰ํ•˜๊ณ  ์ธ๊ธฐ๋ฅผ ์–ป์—ˆ์œผ๋ฉฐ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜์ด ์ด ๊ธฐํ˜ธ ์•„๋ž˜์—์„œ ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ํ™๋ณด๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NoSQL์€ ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฐ์ดํ„ฐ, ์„ ํ˜• ํ™•์žฅ์„ฑ, ํด๋Ÿฌ์Šคํ„ฐ, ๋‚ด๊ฒฐํ•จ์„ฑ, ๋น„๊ด€๊ณ„์„ฑ๊ณผ ๋™์˜์–ด๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ NoSQL ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์šฉ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋“ฑ์žฅํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ณตํ†ต์ ์ธ ํŠน์ง•์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฉ์ฐจ๋ฅผ ๋ฉ”์šฐ๋„๋ก ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค.

์ด ์šฉ์–ด์˜ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ 90๋…„๋Œ€ ํ›„๋ฐ˜์— ์ฒ˜์Œ ์‚ฌ์šฉ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  2009๋…„ ์ค‘๋ฐ˜์— ํ˜„์žฌ ์‚ฌ์šฉ๋˜๋Š” ํ˜•ํƒœ์—์„œ๋งŒ ์ง„์ •ํ•œ ์˜๋ฏธ๋ฅผ ์–ป์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. - ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ASCII ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  SQL ๋Œ€์‹  ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” Carlo Strozzi๊ฐ€ ๋งŒ๋“  ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ํ˜„์žฌ ํ˜•ํƒœ์˜ "NoSQL"๊ณผ๋Š” ์•„๋ฌด๋Ÿฐ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

2009๋…„ 6์›” Johan Oskarsson์€ ์ƒŒํ”„๋ž€์‹œ์Šค์ฝ”์—์„œ ํšŒ์˜๋ฅผ ์กฐ์งํ•˜์—ฌ IT ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์ฒ˜๋ฆฌ ์‹œ์žฅ์˜ ์ƒˆ๋กœ์šด ๊ฒฝํ–ฅ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์˜์˜ ์ฃผ์š” ์ถ”์ง„๋ ฅ์€ BigTable ๋ฐ Dynamo์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์˜คํ”ˆ ์†Œ์Šค ์ œํ’ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์˜์˜ ๋ฐ์€ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด ํŠธ์œ„ํ„ฐ ํ•ด์‹œํƒœ๊ทธ์— ๋”ฑ ๋งž๋Š” ํฌ๊ณ  ๊ฐ„๊ฒฐํ•œ ์šฉ์–ด๋ฅผ ์ฐพ์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์šฉ์–ด ์ค‘ ํ•˜๋‚˜๋Š” RackSpace์˜ Eric Evans๊ฐ€ ์ œ์•ˆํ•œ "NoSQL"์ž…๋‹ˆ๋‹ค. ์ด ์šฉ์–ด๋Š” ๋‹จ ํ•œ ๋ฒˆ์˜ ํšŒ์˜๋ฅผ ์œ„ํ•ด ๊ณ„ํš๋˜์—ˆ๊ณ  ์˜๋ฏธ ๋ก ์ ์œผ๋กœ ๊นŠ์€ ๋ถ€ํ•˜๊ฐ€ ์—†์—ˆ์ง€๋งŒ ๋ฐ”์ด๋Ÿด ๊ด‘๊ณ ์ฒ˜๋Ÿผ ๊ธ€๋กœ๋ฒŒ ๋„คํŠธ์›Œํฌ ์ „์ฒด์— ํผ์ ธ ์‚ฌ์‹ค์ƒ IT ์‚ฐ์—…์˜ ์ „์ฒด ํŠธ๋ Œ๋“œ์˜ ์ด๋ฆ„์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , Voldemort (Amazon Dynamo ํด๋ก ), Cassandra, Hbase (Google BigTable์˜ ์•„๋‚ ๋กœ๊ทธ), Hypertable, CouchDB, MongoDB๊ฐ€ ํšŒ์˜์—์„œ ์—ฐ์„คํ–ˆ์Šต๋‹ˆ๋‹ค.

"NoSQL"์ด๋ผ๋Š” ์šฉ์–ด๋Š” ๊ทธ ๊ธฐ์›์ด ์™„์ „ํžˆ ์ž๋ฐœ์ ์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ •๋˜๋Š” ์ •์˜๋‚˜ ๊ณผํ•™์  ์ œ๋„๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ•์กฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ ์˜คํžˆ๋ ค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฒ—์–ด๋‚œ IT ๊ฐœ๋ฐœ ๋ฒกํ„ฐ์˜ ํŠน์ง•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. No SQL์˜ ์ง์ ‘์ ์ธ ์ •์˜๋ฅผ ์ง€์ง€ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ์ง€๋งŒ Not Only SQL์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. Pramod Sadalaj์™€ Martin Fowler๋Š” ์ตœ๊ทผ ์ €์„œ "NoSQL Distilled"์—์„œ NoSQL ์„ธ๊ณ„์— ๋Œ€ํ•œ ์ง€์‹์„ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์ฒด๊ณ„ํ™”ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

2.2 NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ณธ ํŠน์„ฑ

๋งŽ์€ ์ด๊ธฐ์ข… ์‹œ์Šคํ…œ์ด ํ˜„์žฌ NoSQL ๋ ˆ์ด๋ธ” ์•„๋ž˜ ์ˆจ๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  NoSQL์— ๋Œ€ํ•œ ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค(์•„๋งˆ๋„ ๊ฐ€์žฅ ์™„์ „ํ•œ ๋ชฉ๋ก์€ http://nosql-database.org/์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ). ๋งŽ์€ ํŠน์„ฑ์€ ํŠน์ • NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋งŒ ํ•ด๋‹น๋˜๋ฉฐ ๋‚˜์—ดํ•  ๋•Œ ๋ถ„๋ช…ํžˆ ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž˜ ์•Œ๋ ค์ง„ ์„ ํ˜ธ ๊ตฌ๋ฌธ๊ณผ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์•„๋ฌด๋„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ์„ฑ๊ณตํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ANSI SQL DML์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด hadup( http://www.drawntoscalehq.com/ ๋ฐ http://www.hadapt.com/ ) ์—์„œ SQL์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ์‹ ์ƒ ๊ธฐ์—…์ด ์žˆ๋‹ค๋Š” ์†Œ๋ฌธ์ด ์žˆ์ง€๋งŒ .

2. ๋น„์ •ํ˜•(์Šคํ‚ค๋งˆ๋ฆฌ์Šค)

์˜๋ฏธ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋‹ฌ๋ฆฌ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๊ทœ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ์œ ์ถ”ํ•  ๊ฒฝ์šฐ ์•ฝํ•˜๊ฒŒ ์ž…๋ ฅ๋จ). ๋จผ์ € ์„ ์–ธ์ ์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋ณ„๋„์˜ ์ค„์ด๋‚˜ ๋ฌธ์„œ์— ์ž„์˜์˜ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ…Œ์ด๋ธ”์˜. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด MongoDB์—์„œ ํ•„๋“œ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๋•Œ:

BasicDBObject order = new BasicDBObject();
order.put("date", orderDate); // this field was a long time ago
order.put("totalSum", total); // before we just used "sum"

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋…ผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ฝ์„ ๋•Œ๋„ ์ƒˆ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ์ฃผ๋ฌธ ๊ฐœ์ฒด์—์„œ totalSum ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ ์ถ”๊ฐ€ ์กฐ์น˜๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ํฌ๋กค๋งํ•˜๊ณ  ๋ชจ๋“  ๊ธฐ์กด ๋ฌธ์„œ์—์„œ ์ด ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์–‘์œผ๋กœ ์ธํ•ด ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์ž ๊ธˆ ์—†์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ(alter table rename column ๋ช…๋ น๊ณผ ์œ ์‚ฌ) ์—…๋ฐ์ดํŠธ ์ค‘์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ ๋ถˆ๊ฐ€ํ”ผํ•ฉ๋‹ˆ๋‹ค.

BasicDBObject order = new BasicDBObject();
Double totalSum = order.getDouble("sum"); // This is the old model
if (totalSum  == null)
totalSum = order.getDouble("totalSum"); // This is the updated model

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ ๋‹ค์‹œ ๋…น์Œํ•  ๋•Œ ์ด ํ•„๋“œ๋ฅผ ์ƒˆ๋กœ์šด ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์“ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ๊ฐ€ ์—†๋Š” ์œ ์พŒํ•œ ๊ฒฐ๊ณผ๋Š” ํฌ์†Œ ๋ฐ์ดํ„ฐ ์ž‘์—…์˜ ํšจ์œจ์„ฑ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฌธ์„œ์— date_published ํ•„๋“œ๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ ๋ฌธ์„œ์—๋Š” ์—†์œผ๋ฉด ๋‘ ๋ฒˆ์งธ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋นˆ date_published ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์›์น™์ ์œผ๋กœ ๋…ผ๋ฆฌ์ ์ด์ง€๋งŒ ๋œ ๋ถ„๋ช…ํ•œ ์˜ˆ๋Š” ์นœ์ˆ™ํ•œ ํ…Œ์ด๋ธ”/์—ด ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ์—ด ๊ณ„์—ด NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ด์€ ์„ ์–ธ์ ์œผ๋กœ ์„ ์–ธ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ์…˜ ์ค‘์— ๋ณ€๊ฒฝ/์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŠนํžˆ ๋ชฉ๋ก ๊ตฌํ˜„์„ ์œ„ํ•ด ๋™์  ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ์Šคํ‚ค๋งˆ์—๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์™ธ์—๋„ ๊ธฐ๋ณธ์—์„œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ œํ•œ์ด ์—†๋‹ค๋Š” ์ (null, ๊ณ ์œ , ๊ฒ€์‚ฌ ์ œ์•ฝ ์กฐ๊ฑด ๋“ฑ)์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•  ๋•Œ ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ์ถ”๊ฐ€์ ์ธ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธก๋ฉด์— ์‚ฌ์ „์ด ์—†์Œ). ๊ทธ๋Ÿฌ๋‚˜ ๊ธ‰๋ณ€ํ•˜๋Š” ํ˜„๋Œ€ ์‚ฌํšŒ์—์„œ ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์žฅ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Twitter๋Š” 5๋…„ ์ „์—๋Š” ํŠธ์œ—๊ณผ ํ•จ๊ป˜ ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ์ •๋ณด(์‹œ๊ฐ„, Twitter ํ•ธ๋“ค ๋ฐ ๋ช‡ ๋ฐ”์ดํŠธ์˜ ์ถ”๊ฐ€ ๋ฉ”ํƒ€ ์ •๋ณด)๋งŒ ์ €์žฅํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๋ฉ”์‹œ์ง€ ์ž์ฒด ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

(์ดํ•˜ ์ฃผ๋กœ key-value, document ๋ฐ column-family ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉฐ, ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์ด๋Ÿฌํ•œ ์†์„ฑ์ด ์—†์„ ์ˆ˜ ์žˆ์Œ)

2.3. ์ง‘๊ณ„(aggregates) ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ํ‘œํ˜„

์ •๊ทœํ™” ๋ชฉ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋…ผ๋ฆฌ์  ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ„ฐํ‹ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฌผ๋ฆฌ์  ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ๊ณผ ๋‹ฌ๋ฆฌ NoSQL ์ €์žฅ์†Œ๋Š” ์ด๋Ÿฌํ•œ ์—”ํ„ฐํ‹ฐ์—์„œ ์ „์ฒด์ ์ธ ๊ฐœ์ฒด๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ๋Š” ํ‘œ์ค€ ์ „์ž ์ƒ๊ฑฐ๋ž˜ ๊ฐœ๋…์  ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ "์ฃผ๋ฌธ - ์ฃผ๋ฌธ ํ•ญ๋ชฉ - ๊ฒฐ์ œ - ์ œํ’ˆ"์— ๋Œ€ํ•œ ์ง‘๊ณ„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์ฃผ๋ฌธ์€ ์œ„์น˜์™€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ฐœ์ฒด๋กœ ๊ฒฐํ•ฉ๋˜๋Š” ๋ฐ˜๋ฉด ๊ฐ ์œ„์น˜๋Š” ์ œํ’ˆ์— ๋Œ€ํ•œ ๋งํฌ์™€ ์ผ๋ถ€ ์†์„ฑ(์˜ˆ: ์ด๋ฆ„)์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์ด๋Ÿฌํ•œ ๋น„์ •๊ทœํ™”๋Š” ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ œํ’ˆ ๊ฐœ์ฒด๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ - ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ๊ทœ์น™์€ ๊ฐœ์ฒด ๊ฐ„์˜ "์กฐ์ธ"์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ง‘๊ณ„์—์„œ ์ง€๋ถˆ์€ ์ฃผ๋ฌธ๊ณผ ๊ฒฐํ•ฉ๋˜๊ณ  ๊ฐ์ฒด์˜ ํ•„์ˆ˜ ๋ถ€๋ถ„์ด๋ฉฐ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ทœ์น™์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•˜๊ณ  ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ ์š”์ฒญ์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์ตœ์ ํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๊ฐ€ ์ง‘๊ณ„ ๊ตฌ์กฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ž„์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹œ๋„ํ•  ๋•Œ ์ข…์ข… ๋น„์ •๊ทœํ™”๋œ ๋Œ€ํ˜• ๊ฐ์ฒด๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๋ฉด์„œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด์˜๋ฅผ ์ œ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ๋ผ์ธ ํ•ญ๋ชฉ ๋ฐ ๊ฒฐ์ œ์™€ ํ•จ๊ป˜ ์ฃผ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ(์•ฑ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž„) ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ์ง€๋‚œ ๋‹ฌ์— ํŒ๋งค๋œ ํŠน์ • ์ œํ’ˆ์˜ ๋‹จ์œ„ ์ˆ˜๋ฅผ ์„ธ๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์ด ๊ฒฝ์šฐ OrderItem ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•˜๋Š” ๋Œ€์‹ (๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ) NoSQL ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ „์ฒด ์ฃผ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด ์ •๋ณด๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š” ์ ˆ์ถฉ์•ˆ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋‹จ์ผ ์„œ๋ฒ„ ์‹œ์Šคํ…œ์—์„œ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๊ทœํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‘ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ๋‹จ์ ์„ ํ‘œ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION