CS ์ง€์‹ TIL (4) - NoSQL

YulHee Kimยท2021๋…„ 8์›” 11์ผ
2

CS

๋ชฉ๋ก ๋ณด๊ธฐ
4/9
post-thumbnail
post-custom-banner

๐Ÿ“Œ NoSQL


NoSQL์ด๋ž€?

NoSQL์€ ์ดˆ๊ธฐ์—” ์ฃผ๋กœ ํƒˆ RDBMS๋ฅผ ์˜๋ฏธํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๊ตฌ์กฐ์  ์งˆ์˜ ์–ธ์–ด๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(No SQL) ๋˜๋Š” ๊ด€๊ณ„๋ฅผ ๊ฐ–์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ •์˜ํ•˜์˜€์ง€๋งŒ ํ˜„์žฌ๋Š” ์•ž์˜ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ ์™ธ์—๋„ SQL๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต(Not Only SQL)ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ผ๋ฐ˜ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

NoSQL DB ์ข…๋ฅ˜

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ข…๋ฅ˜๋Š” ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์นผ๋Ÿผ ํŒจ๋ฐ€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

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

NoSQL DB ํŠน์ง•

  • ์œ ์—ฐ์„ฑ : ์Šคํ‚ค๋งˆ ์„ ์–ธ ์—†์ด ํ•„๋“œ์˜ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๊ฐ€ ์ž์œ ๋กœ์šด Schema-less ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ : ์Šค์ผ€์ผ ์•„์›ƒ์— ์˜ํ•œ ์„œ๋ฒ„ ํ™•์žฅ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ : ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์šฉ์„ฑ : ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐฑ์—… ์„œ๋ฒ„ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์žฅ์•  ๋ฐœ์ƒ ์‹œ์—๋„ ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ MongoDB


MongoDB ํŠน์ง•

  • ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  1. ๋„ํ๋จผํŠธ๋Š” HTML๊ณผ ๊ฐ™์€ ํŠน์ • ํ˜•์‹์˜ ํƒœ๊ทธ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, mongoDB๋Š” JSON(JavaScript Object Notation) ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘ ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„ํ๋จผํŠธ๋Š” mongoDB๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋„ํ๋จผํŠธ๋Š” ํ•„๋“œ์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์ฒฉ ๋„ํ๋จผํŠธ์™€ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ 1๊ฐœ์˜ ๋„ํ๋จผํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ ์‹œ์—๋Š” JSON ํ˜•์‹์˜ ๋„ํ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ์‹œ์—๋Š” ์ด์ง„ ํฌ๋งท์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ BSON(Binary JSON) ํ˜•์‹์˜ ๋„ํ๋จผํŠธ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ
  1. ์Šคํ‚ค๋งˆ์˜ ์„ ์–ธ ์—†์ด ํ•„๋“œ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ž์œ ๋กœ์šด Schema-less ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  2. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ” ๋‚ด ๋ชจ๋“  ๋กœ์šฐ(Row)์˜ ์นผ๋Ÿผ ์ง‘ํ•ฉ์ด ๋™์ผํ•˜๊ณ  ๊ฐ™์€ ์นผ๋Ÿผ์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ–๋Š” ์ •ํ˜• ์Šคํ‚ค๋งˆ์ด๋‚˜, mongoDB๋Š” ์ปฌ๋ ‰์…˜ ๋‚ด ๋ชจ๋“  ๋„ํ๋จผํŠธ๋“ค์˜ ํ•„๋“œ ์ง‘ํ•ฉ์ด ๋™์ผํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ํ•„๋“œ๋ผ๋„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋น„์ •ํ˜• ์Šคํ‚ค๋งˆ์ž…๋‹ˆ๋‹ค.
  • ๋น„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  1. mongoDB๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€๊ณ„(Relationship) ๊ฐœ๋…์ด ์—†๋Š” ๋น„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.
  2. mongoDB๋Š” ์กฐ์ธ(Join)์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€์‹  ์ž„๋ฒ ๋””๋“œ ๋ฐฉ์‹์˜ ๋„ํ๋จผํŠธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐฉ์‹์˜ ๋„ํ๋จผํŠธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„ ํŠธ๋žœ์žญ์…˜
  1. mongoDB๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ๊ฐ๊ฐ์˜ ๋„ํ๋จผํŠธ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Commit ๋˜๋Š” Rollback ๊ฐœ๋…์ด ์—†์œผ๋ฉฐ ๋ชจ๋‘ Auto Commit์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

DML

์ž…๋ ฅ : db.member.insert( { no : "C001", age : 45, status : "A" } )
์ˆ˜์ • : db.member.update( { age : { $gt : 25 } }, { $set : { status : "C" } }, { multi : true } )
์‚ญ์ œ : db.member.remove( { no : "C001" } )
์กฐํšŒ : db.member.find( { no : "C001" } )

๐Ÿ“Œ MongoDB ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง


๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. mongoDB ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์€ ๋„ํ๋จผํŠธ ์„ค๊ณ„ ํ›„ ์ปฌ๋ ‰์…˜์„ ์„ค๊ณ„ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ž„๋ฒ ๋””๋“œ ๋ฐฉ์‹

์ž„๋ฒ ๋””๋“œ ๋ฐฉ์‹์€ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๋‹จ์ผ ๋„ํ๋จผํŠธ์— ํฌํ•จํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค ๋ฐฉ์‹

๋ ˆํผ๋Ÿฐ์Šค ๋ฐฉ์‹์€ ๋„ํ๋จผํŠธ์— ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๋‹ค๋ฅธ ๋„ํ๋จผํŠธ์˜ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ‚ค๋กœ ์ €์žฅํ•˜์—ฌ ํ•„์š”์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐ์ธํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋งํฌ1
์ฐธ๊ณ ๋งํฌ2
์ฐธ๊ณ ๋งํฌ3

profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž
post-custom-banner

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 8์›” 11์ผ

SQL์ด๋ผ๊ณ  ๋‹ค ๊ฐ™์€ SQL์€ ์•„๋‹ˆ์—ˆ๋„ค์š”.. ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์…”์„œ ์ž˜ ์ฝ๊ณ  ๊ฐ‘๋‹ˆ๋‹ค ^_^

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2021๋…„ 8์›” 31์ผ

์ข‹์€ ์ •๋ฆฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ