MongoDB

SQL vs NoSQL

SQL

SQL(Structured Query Language)์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด SQL์„ ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค. - ์œ„ํ‚คํ”ผ๋””์•„ -

๋Œ€์ค‘์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Oracle, MySQL ๋“ฑ์ด ์ด ๋ฒ”์ฃผ์— ํฌํ•จ๋œ๋‹ค.

NoSQL

NoSQL(์›๋ž˜ ์˜๋ฏธ: non SQL ๋˜๋Š” non relational) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ „ํ†ต์ ์ธ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด๋‹ค ๋œ ์ œํ•œ์ ์ธ ์ผ๊ด€์„ฑ ๋ชจ๋ธ์„ ์ด์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค. NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋น…๋ฐ์ดํ„ฐ์™€ ์‹ค์‹œ๊ฐ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ์—…์  ์ด์šฉ์— ๋„๋ฆฌ ์“ฐ์ธ๋‹ค. SQL ๊ณ„์—ด ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ•์กฐํ•œ๋‹ค๋Š” ๋ฉด์—์„œ "Not only SQL"๋กœ ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

NoSQL ๋ถ„๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Wide Columnar Store : ์นด์‚ฐ๋“œ๋ผ

  • Document Store : MongoDB

  • Key-Value Store : ๋‹ค์ด๋‚˜๋ชจ, ๋ ˆ๋””์Šค

  • Graph Store: Neo4j

๊ทธ ์ค‘์—์„œ ์œ ๋ช…ํ•œ๊ฑด ์นด์‚ฐ๋“œ๋ผ, MongoDB, AWS์˜ DynamoDB, Redis ์ •๋„?

SQL๊ณผ NoSQL ๋น„๊ต

๐Ÿ‘‰ ์ถœ์ฒ˜ : https://ko.wikipedia.org/wiki/NoSQL

์„ฑ๋Šฅ๋ฉด๊ณผ ํ™•์žฅ์„ฑ ๋ฉด์—์„œ๋Š” NoSQL์ด SQL๋ณด๋‹ค ์šฐ์ˆ˜ํ•˜๋‹ค. ๋˜ํ•œ ์œ ์—ฐํ•˜๋ฉฐ ๋ณต์žก์„ฑ์ด ๋‚ฎ์€๊ฒƒ์ด ํŠน์ง•์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งˆ๋ƒฅ ์ข‹์€์ ๋งŒ ์žˆ๋Š”๊ฑด ์•„๋‹ˆ๋‹ค. ACID ํŠธ๋žœ์žญ์…˜(์›์ž์„ฑ/์ผ๊ด€์„ฑ/๊ณ ๋ฆฝ์„ฑ/์˜๊ตฌ์„ฑ)์„ ๋ณด์žฅ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” RDBMS๋ฅผ ์“ฐ๋Š” ํŽธ์ด ์ข‹๋‹ค. ๊ฐ€๋ น ์€ํ–‰์—…๋ฌด๋‚˜ ํšŒ์‚ฌ์—…๋ฌด๊ฐ™์€ ์ค‘์š”ํ•œ DB๋Š” RDBMS๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

โœ… ๊ฒฐ๋ก ์ ์œผ๋กœ SQL, NoSQL ๋ญ๊ฐ€ ์ข‹๊ณ  ๋‚˜์˜๋ƒ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉํ•˜๋Š” ์šฉ๋„์— ๋”ฐ๋ผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

\

MongoDB ์•Œ์•„๋ณด๊ธฐ

MongoDB๋Š” C++๋กœ ์ž‘์„ฑ๋œ ์˜คํ”ˆ์†Œ์Šค ๋ฌธ์„œ์ง€ํ–ฅ(Document-Oriented) ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

1. Document

Document๋Š” RDBMS์—์„œ์˜ Row(ํ˜น์€ ํŠœํ”Œ)๊ณผ ๋™์ผํ•œ ๊ฐœ๋…. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ JSON ํ˜•ํƒœ์˜ key-value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์˜ Document๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

{
    "_id": "5f2ad6b54866e5109dd2367b"
    "username": "ํ™๊ธธ๋™",
    "hashedPassword": "๋น„๋ฐ€๋ฒˆํ˜ธ",
}

๊ฐ Document๋Š” _id๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”๋ฐ ์ด ๊ฐ’์€ ์œ ์ผํ•˜๋‹ค. Primary Key๋ž‘ ๋™์ผํ•œ ๊ฐœ๋….

ํŠน์ดํ•˜๊ฒŒ๋„ RDBMS์ฒ˜๋Ÿผ ์Šคํ‚ค๋งˆ๋กœ ์ •ํ•ด์ง„ ๋ญ”๊ฐ€๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ username, hashedPassword ๋ฐ‘์—๋‹ค๊ฐ€ email์„ ์ถ”๊ฐ€ํ•œ Document๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด๋„ ๋ฌธ์ œ ์—†์ด ๋™์ž‘ํ•œ๋‹ค.

2. Collection

Collection์€ Document์˜ ๊ทธ๋ฃน์ด๋‹ค. RDBMS๋กœ ๋”ฐ์ง€์ž๋ฉด Table๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…. ๋‹ค๋งŒ ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

3. Database

Database๋Š” Collection๋“ค์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ปจํ…Œ์ด๋„ˆ์ด์ž ๊ฐ€์žฅ ์ƒ์œ„ ๊ฐœ๋…์ด๋‹ค. RDBMS์—์„œ์˜ Database์™€ ๋™์ผํ•˜๋‹ค.

Q. MongoDB์—์„œ Join์€?

RDBMS์—์„œ๋Š” ํ•ญ์ƒ Join์ด ์ผ์ƒ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด MongoDB๋„ ์กฐ์ธ์ด๋ž€ ๊ฐœ๋…์ด ์žˆ์„๊นŒ? ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ทธ๋ ‡๊ฒŒ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.

post์™€ comment๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊นŒ? postํ•˜๋‚˜์—๋Š” comment๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ 1๋Œ€๋‹ค ๊ด€๊ณ„์ด๋‹ค. ๋”ฐ๋ผ์„œ RDBMS๋ฅผ ์ผ๋‹ค๋ฉด 2๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌ์‹œ์ผฐ์„๊ฑฐ๋‹ค. ํ•˜์ง€๋งŒ MongoDB๋Š” ๋ถ„๋ฆฌ์‹œํ‚ค์ง€ ์•Š๋Š” ๋Œ€์‹ ์— post ๋‚ด๋ถ€์— comment๋ฅผ ๋„ฃ๋Š”๋‹ค. ์ด๋ฅผ ์„œ๋ธŒ๋‹คํ๋จผํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

{
   _id: POST_ID,
   title: POST_TITLE,
   content: POST_CONTENT,
   username: POST_WRITER,
   tags: [ TAG1, TAG2, TAG3 ],
   comments: [
     { 
        username: COMMENT_WRITER,
        mesage: COMMENT_MESSAGE,
        time: COMMENT_TIME
     },
   ]
}

์ถœ์ฒ˜ : https://velopert.com/436

\

์ฐธ๊ณ 

Last updated