[NoSQL database] 1. MongoDB ์ดํ•ด

parkjh9370ยท2022๋…„ 3์›” 15์ผ
0

๐Ÿ’ฌ ๋น„๊ด€๊ณ„ํ˜• database์ธ mongoDB์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๊ธฐ์กด์— mongoDB๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ CRUD๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด๊ธด ํ–ˆ์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅผ ๋•Œ ํ•ด๋ณธ ๊ฑฐ๋ผ ์ •ํ™•ํ•œ ๊ฐœ๋…์„ ์•Œ์ง€๋Š” ๋ชปํ–ˆ๋‹ค. ์ผ๋‹จ์€ ๊ฐœ๋…์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•ด๋ณด๊ณ  ์ถ”๊ฐ€์ ์ธ ์‚ฌํ•ญ์œผ๋กœ ์‹ค์Šตํ•œ ์ฝ”๋“œ๋„ ๋ณต๊ธฐํ•ด ๋ณด๊ฒ ๋‹ค.

๐Ÿ’ก mongoDB ๋ž€?

MongoDB๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. NoSQL์€ ๋งค์šฐ ๋„“์€ ๋ฒ”์œ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋กœ, ๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ”์˜ ๋ ˆ๊ฑฐ์‹œํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด์ด ์•„๋‹Œ, ์ฒด๊ณ„์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์˜ˆ๋Š” ๋„์„œ ์นด๋“œ ๋ชฉ๋กํ•จ์—์„œ MongoDB ๊ฐ™์€ ๋ณด๋‹ค ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๊ฐœ๋…์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ NoSQL์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ๋„“๊ธฐ ๋•Œ๋ฌธ์—, ์ •์˜๋ฅผ ์ข€ ๋” ์ขํ˜€ ์ดํ•ดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, MongoDB๋Š” NoSQL ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. MongoDB๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ํ๋จผํŠธ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
๋„ํ๋จผํŠธ๋Š” ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋˜๋ฉฐ, ์ด๊ฒƒ์ด MongoDB๊ฐ€ NoSQL ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” NoSQL ๋„ํ๋จผํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.
๋„ํ๋จผํŠธ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ด์–ด์ง€๋Š” ์ฝ˜ํ…์ธ ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


๐Ÿ’ก ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

  1. ๋น„๊ตฌ์กฐ์ ์ธ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ

NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„์— ์ค‘์ ์„ ๋‘” SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ์ž์œ ๋กœ์šด ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”์— ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ์ •ํ˜•ํ™”๋˜์ง€ ์•Š์€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, NoSQL์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ๋ฐ ์ €์žฅ ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

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

  1. ๋น ๋ฅด๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ž์ฃผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ

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


๐Ÿ’ก Atlas Cloud

๐Ÿ”Ž ํ•ด๋‹น ๋ถ€๋ถ„์€ ๊ธ€๋กœ๋งŒ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์ „์ฒด์ ์ธ ํ‹€๋งŒ ํŒŒ์•…ํ•˜๊ณ , ๋ชฝ๊ณ ๋””๋น„์˜ ๊ฒฝ์šฐ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Atlas Cloud๋ฅผ
ํ†ตํ•ด ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ ์•Œ ๋ฉด ๋ ๊ฒƒ ๊ฐ™๋‹ค.
๊ธฐ์กด ๋‚ด๊ฐ€ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ๋Š” Robo3T๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด์„œ๋„ ์‹œ๊ฐํ™” ํ–ˆ์—ˆ๋‹ค. 
  • MongoDB์—์„œ๋Š” ์•„ํ‹€๋ผ์Šค(Atlas)๋กœ ํด๋ผ์šฐ๋“œ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์•„ํ‹€๋ผ์Šค๋Š” GUI์™€ CLI๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”, ๋ถ„์„, ๋‚ด๋ณด๋‚ด๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„ํ‹€๋ผ์Šค ์‚ฌ์šฉ์ž๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ทธ๋ฃนํ™”๋œ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

							            [๊ทธ๋ฆผ] ํด๋Ÿฌ์Šคํ„ฐ
                            

์ด ์„œ๋ฒ„๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ(Replica set)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ช‡ ๊ฐœ์˜ ์—ฐ๊ฒฐ๋œ MongoDB ์ธ์Šคํ„ด์Šค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋Š” ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ปฌ ๋˜๋Š” ํด๋ผ์šฐ๋“œ์˜ ๋‹จ์ผ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—์„œ ์ธ์Šคํ„ด์Šค๋Š” ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

                        				[๊ทธ๋ฆผ] ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ
                            

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

#์šฉ์–ด ์ •๋ฆฌ

๐Ÿ“Œ ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ
๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์†Œ์ˆ˜์˜ ์—ฐ๊ฒฐ๋œ ๋จธ์‹ ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด ์„ธํŠธ ์ค‘ ํ•˜๋‚˜์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„, 
๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ธ์Šคํ„ด์Šค
๋กœ์ปฌ ๋˜๋Š” ํด๋ผ์šฐ๋“œ์—์„œ ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์ผ ๋จธ์‹ , MongoDB์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ํด๋Ÿฌ์Šคํ„ฐ
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์„œ๋ฒ„ ๊ทธ๋ฃน์œผ๋กœ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋‹จ์ผ ์ปดํ“จํ„ฐ์ฒ˜๋Ÿผ
๋™์ž‘ํ•˜๋„๋ก ์ œ์ž‘ํ•œ ์ปดํ“จํ„ฐ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก MongoDB Document

  • ๋„ํ๋จผํŠธ๋Š” ๊ฐ์ฒด์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•„๋“œ-๊ฐ’ ์Œ(Field - Value pair)์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ๋„ํ๋จผํŠธ์—์„œ ํ•„๋“œ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์ด๊ณ , ๊ฐ’์€ ์ฃผ์–ด์ง„ ์‹๋ณ„์ž์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์˜ˆ์ œ์—์„œ name์ด๋ž€ ํ•„๋“œ์˜ ๊ฐ’์€ kimcoding์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„ํ๋จผํŠธ์˜ ๋ชจ์Œ์„ ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์šฉ์–ด ์ •๋ฆฌ

๐Ÿ“Œ ๋„ํ๋จผํŠธ(Document)
ํ•„๋“œ - ๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ

๐Ÿ“Œ ํ•„๋“œ(Field)
๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋ฅผ ์œ„ํ•œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž

๐Ÿ“Œ ๊ฐ’(Value)
์ฃผ์–ด์ง„ ์‹๋ณ„์ž์™€ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ

๐Ÿ“Œ ์ปฌ๋ ‰์…˜(Collection)
MongoDB์˜ ๋„ํ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋„ํ๋จผํŠธ ๊ฐ„์˜ ๊ณตํ†ต ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹น ๋งŽ์€ ์ปฌ๋ ‰์…˜์ด ์žˆ๊ณ , ์ปฌ๋ ‰์…˜ ๋‹น ๋งŽ์€ ๋„ํ๋จผํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
                                   

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