avatar
Published on

MongoDB ์‹œ์ž‘ํ•˜๊ธฐ ๐ŸŒฑ

Authors
  • avatar
    Name
    Haneul
    Twitter

MongoDB

MongoDB ๋ž€ ?

mongoDB๋Š” ๋ฌธ์„œ์ง€ํ–ฅ(Document-Oriented) ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•˜๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์œผ๋กœ, ํ˜„์กดํ•˜๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ์ธ์ง€๋„ 1์œ„๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. mongoDB์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ Document๋กœ ๋ถˆ๋ฆฌ๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์„ Collection(RDMS์—์„œ๋Š” Table)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ์ œ์•ฝ ์—†์ด ์ž์œ ๋กญ๊ณ , BSON(Binary JSON) ํ˜•ํƒœ๋กœ ๊ฐ ๋ฌธ์„œ๊ฐ€ ์ €์žฅ๋˜๋ฉฐ ๋ฐฐ์—ด(Array)์ด๋‚˜ ๋‚ ์งœ(Date) ๋“ฑ ๊ธฐ์กด RDMS์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋˜ ํ˜•ํƒœ๋กœ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JOIN์ด ํ•„์š” ์—†์ด ํ•œ ๋ฌธ์„œ์— ์ข€ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ ๊ทธ๋Œ€๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ mongoDB๋Š” ๋ฌธ์„œ์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ์ด๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์ž˜ ๋งž๊ณ  JSON์„ ์‚ฌ์šฉํ•  ๋•Œ ์•„์ฃผ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Node.js์™€ ํ˜ธํ™˜์ด ๋งค์šฐ ์ข‹๊ธฐ ๋•Œ๋ฌธ์—, Node.js์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  mysql ๊ฐ™์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


  • Join์ด ์—†์œผ๋ฏ€๋กœ Join์ด ํ•„์š” ์—†๋„๋ก ๋ฐ์ดํ„ฐ ๊ตฌ์กฐํ™”๊ฐ€ ํ•„์š”
  • ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ฟผ๋ฆฌ๋ฌธ์„ ์ง€์›(ํ•„ํ„ฐ๋ง, ์ˆ˜์ง‘, ์ •๋ ฌ, ์ •๊ทœํ‘œํ˜„์‹ ๋“ฑ)
  • ๊ด€๋ฆฌ์˜ ํŽธ์˜์„ฑ
  • ์Šคํ‚ค๋งˆ ์—†๋Š”(Schemaless) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•œ ์‹ ์† ๊ฐœ๋ฐœ. ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฌ์›Œ์ง
  • ์‰ฌ์šด ์ˆ˜ํ‰ ํ™•์žฅ์„ฑ
  • ์ธ๋ฑ์‹ฑ ์ œ๊ณต

NoSQL

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

MongoDB ์„ค์น˜

// tapping
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-community
// mongo ๋ฒ„์ „ ํ™•์ธ
mongod --version
// mongo ์‹คํ–‰
mongo

Mongoose

mongoose๋ž€, mongoDB๋ผ๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๋…ธ๋“œ์˜ ํ™•์žฅ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. mongoose๋Š” mongoDB์˜ ODM์ž…๋‹ˆ๋‹ค. ODM์€ Object Document Mapping์˜ ์•ฝ์ž๋กœ, ๋ฌธ์„œ๋ฅผ DB์—์„œ ์กฐํšŒํ•  ๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. mongoDB์˜ ODM์—๋Š” mongodb-native ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ์ค‘ mongoose๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174384/mongodb%EB%9E%80, ๊ณต์‹๋ฌธ์„œ