IT ์‚ฌ๋ฌผํ•จ ๐Ÿป ์ž์„ธํžˆ๋ณด๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

NoSQL - MongoDB ๊ฐœ๋… ๋ฐ ํŠน์ง•

๋ž˜๋ฆฌ๋ž˜๋ฆฌ 2023. 11. 28. 21:55

 

NoSQL

non-SQL, non-Relational DB ์ข…๋ฅ˜๋ฅผ ์ง€์นญํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๊ธด ์šฉ์–ด.

- ํ•˜์ง€๋งŒ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜คํžˆ๋ ค SQL์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์žˆ๋‹ค -> Not-only SQL์˜ ์˜๋ฏธ๋กœ ์“ฐ์ด๋Š” ๊ฒจ์šฐ๋„ ์žˆ์Œ.

 

NoSQL์˜ ํŠน์ง•

- RDBMS์™€ ๋น„๊ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ์ž์œ ๋กญ๋‹ค. (๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…, ๊ธธ์ด, ํฌ๊ธฐ)

- RDBMS์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด ํ…Œ์ด๋ธ”๋กœ ์ •ํ•ด์ ธ ์žˆ๊ธฐ์— ํ‘œํ˜„ํ•˜๊ธฐ ํž˜๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
-> Object๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

- SQLํ˜•์‹์„ ๋งž์ถ”์ง€ ์•Š๋”๋ผ๋„, ์ „์šฉ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ•จ์ˆ˜๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋น…๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์— NoSQL DB์˜ ๊ฒฝ์šฐ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ๊ธฐ๋Šฅ์ด๋‚˜ ํ˜•์‹์˜ ํ‘œ์ค€์ด ์—†๋‹ค. ์‚ฌ์šฉํ•˜๋Š” DB๋ณ„๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

- ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด FK ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์žˆ๋”๋ผ๋„ cascading ์˜ต์…˜์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์— ์ •ํ•ฉ์„ฑ์„
๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค.

- Transaction์˜ ACID ํŠน์„ฑ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•œ๋‹ค. 

 


 

NoSQL ์ข…๋ฅ˜

1. MongoDB

- ๋ฒ”์šฉ์ ์œผ๋กœ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ ์žˆ๋Š” DB

- ๋‹จ์ผ Collection์˜ document๋‹จ์œ„๋กœ Atomicity์™€ Transaction ๊ธฐ๋Šฅ์„ ์ œ๊ณต

- sharding์œผ๋กœ ํ™•์žฅ์„ฑ๋„ ์ œ๊ณต

 

2. Redis

- ์ธ๋ฉ”๋ชจ๋ฆฌ DB

- ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค

- ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๋กœ lock์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ 

 

3. Apache HBase

- ๋น…๋ฐ์ดํ„ฐ์šฉ DB

- ๋‹จ์ผ Key๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒํ•œ๋‹ค

- ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ ธ๋„ ๋‹จ์ผ key์— ๋Œ€ํ•œ ์กฐํšŒ ์†๋„๋Š” ๊ฑฐ์˜ ๋А๋ ค์ง€์ง€ ์•Š์Œ

 

4. Apache Druid

- Cubeํ˜• DB

- ์ง‘๊ณ„ ์—ฐ์‚ฐ์— ์ตœ์ ํ™”๋˜์–ด์žˆ๋‹ค

- ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํž™, ์นด์šดํŠธ ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

- ์ง‘๊ณ„ํ•  ์กฐ๊ฑด์— ๋งž์ถฐ Cube modeling์„ ๋ฏธ๋ฆฌ ํ•ด๋†“์•„์•ผ ํ•œ๋‹ค

 


MongoDB์˜ ๊ฐœ๋…

 

Document

- MongoDB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋‹จ์œ„

- ํ˜•์‹์€ ๋ฏธ๋ฆฌ ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ์ƒ์„ฑ ์‹œ์ ์— ์–ด๋–ค ํ˜•์‹์˜ ๋‚ด์š”์ด ์™€๋„ ๋œ๋‹ค

- ๊ฐ™์€ Collection์— ์†ํ•œ Document๋ผ๊ณ ํ•ด์„œ ๋ชจ๋‘ ๊ฐ™์€ ํ˜•์‹์„ ๋”ฐ๋ฅผ ํ•„์š”๋Š” ์—†๋‹ค

- Document์— ๊ฐ€์ง€๋Š” ํ•„๋“œ๋‚˜ ๊ฐ’์€ BSON Type์„ ๋”ฐ๋ฅธ๋‹ค

- _id ํ•„๋“œ๋Š” ๊ฐ Document์˜ PK๋กœ์„œ ๋ฐ˜๋“œ์‹œ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค
(์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ObjectId ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™ ์ƒ์„ฑ, ์‚ฝ์ž…๋œ๋‹ค)

 

*ObjectId

- ๋ชจ๋“  Document๋Š” ๊ณ ์œ ๊ฐ’์„ ๋œปํ•˜๋Š” _id ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค

- ObjectId๋Š” 12๋ฐ”์ดํŠธ๋กœ ๋‹ค์Œ์˜ ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ๋‹ˆ๋‹ค.

- 4 - byte timestamp : ๋ฐ์ดํ„ฐ ์ƒˆ์„ฑ ์‹œํ—˜์˜ unix epoch timestamp ๊ฐ’

- 5 - byte random value : ํ”„๋กœ์„ธ์Šค ๋‹น ์œ ๋‹ˆํฌํ•จ์„ ๋ณด์žฅํ•˜๋Š” ๋žœ๋ค ๊ฐ’

- 3 - byte incrementing counter : 1์”ฉ ์ฆ๊ฐ€ํ•ด์„œ ํ• ๋‹น๋˜๋Š” counter. ์•ž์˜ randome value์— ์˜ํ•ด ์ดˆ๊ธฐํ™” ํš๋‹ค

- objectId.getTimestamp() ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ ์‹œ์ ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค

 

Collection

- Document๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋…ผ๋ฆฌ์ ์ธ ๋ฌถ์Œ์„ Collection์ด๋ผ๊ณ  ํ•œ๋‹ค (RDBMS์˜ Table๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค)

- Document์˜ ํ˜•์‹์— ์ œ์•ฝ์ด ์—†์ง€๋งŒ, Collection ๋‹จ์œ„์—์„œ ๊ฐ™์€ ํ˜•์‹(ํ•„๋“œ ์ด๋ฆ„, ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋“ฑ)๋ฅผ ๊ฐ€์ง€๋„๋ก ์ œ์•ฝ์„ ๊ฑธ ์ˆ˜ ์žˆ๋‹ค

 

Database

- ํ•˜๋‚˜์˜ MongoDB ์„œ๋ฒ„ ํ˜น์€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ Database๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค

- ์ฃผ๋กœ ์„œ๋น„์Šค, Client user ๋“ฑ์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ ‘์†์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค


 

MongoDB ํŠน์ง•

- Bson ํ˜•์‹์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ํ•„๋“œ๊ฐ€ Bson Object(Json Object)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ํ•„๋“œ ์•ˆ์— ๋˜ ํ•„๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. 
(ํ•„๋“œ ์•ˆ์— ์žˆ๋Š” ํ•„๋“œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด์„œ๋„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค)

- ๊ณ„์† Inner filed๋ฅผ ๊ฐ€์ง€๋Š” ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๊ฒ€์ƒ‰, ์ง‘๊ณ„ ์—ฐ์‚ฐ์—์„œ ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค.

 

Transaction

- MongoDB์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ Document์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ operation๋งŒ Atomic operatioin์„ ์ œ๊ณตํ•œ๋‹ค.

- Transaction์„ ์ด์šฉํ•˜๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ document์— ๋Œ€ํ•ด์„œ, ๋‘ ๋ฒˆ ์ด์ƒ์„ operation์— ๋Œ€ํ•ด Atomicity๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ Transaction ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค
(๋”ฐ๋ผ์„œ, ํ™˜๊ฒฝ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค)