๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ 21-2 IPP/Node.js study

Node.js - 14 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

by hanwitjus 2021. 10. 28.

๋ชฝ๊ณ DB ์„ธํŒ…

 

- ๋ชฝ๊ณ DB๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์„œ Document๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

- ๋ชฝ๊ณ  DB Document๋Š” ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜๋ฉฐ, ํŠน์„ฑ๋ณ„ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์˜ ํ‚ค-๊ฐ’ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

- ์ด ์ €์žฅ ์‹œ์Šคํ…œ์€ JavaScript ๋ฌธ๋ฒ•๊ณผ ๋น„์Šทํ•˜๋‹ค.

(๋ชฝ๊ณ  DB๋Š” Document๋ฅผ BSON : Binary Form of JSON ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.)

 

์•ˆํƒ€๊น...๊ฒŒ๋„.. ๋ชฝ๊ณ  DB๋Š” ๊ด€๊ณ„ํ˜• DB๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„๊ด€๊ณ„ํ˜• DB ์‹œ์Šคํ…œ์ด๋‹ค....

 

 

 

๋ชฝ๊ณ DB ์…ธ์—์„œ ๋ช…๋ น์–ด ์‹คํ–‰

 

๋จผ์ € mongo๋ฅผ ์ž…๋ ฅํ•ด ๋ชฝ๊ณ DB ์…ธ๋กœ ์ง„์ž…ํ•œ๋‹ค.

(์—ฌ๊ธฐ์„œ ๋ฐ”๋ณด๊ฐ™์ด ์• ๋ฅผ ์ข€ ๋งŽ์ด ๋จน์—ˆ๋‹ค. ์•„๋ฌด๋ฆฌ mongo๋ฅผ ์ž…๋ ฅํ•ด๋„ ์…ธ๋กœ ์ง„์ž…์ด ์•ˆ๋˜๊ณ  ์ž๊พธ ์—†๋Š” ๋ช…๋ น์–ด?๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ์ง„์งœ ํ„ฐ๋ฏธ๋„ ๋งŽ์ด ์•ˆ์จ๋ด์„œ ํ•œ ์‹ค์ˆ˜์˜€๋‹ค... ํ„ฐ๋ฏธ๋„์—์„œ์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋ชฝ๊ณ DB๊ฐ€ ์„ค์น˜๋œ ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๊ณ  ๋‚˜์„œ ํ•ด์•ผ ์‹คํ–‰๋จ. ํšŒ์‚ฌ์ปด ๊ฐ™์€ ๊ฒฝ์šฐ์—” C:\Program Files\MongoDB\Server\5.0\bin)

 

 

์ง„์ž…ํ•˜๊ณ  ๋‚˜๋ฉด > ํ‘œ์‹œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋ชฝ๊ณ DB ์…ธ์— ์ง„์ž…๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด db๋ฅผ ์ž…๋ ฅํ•ด๋ณด์•˜๋‹ค.

์‹œ์ž‘์„ ์œ„ํ•ด ๋ชฝ๊ณ DB์—๋Š” test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋“ค์–ด์žˆ๋‹ค.

 

์ด ๋ฐ–์—, ๋‹ค๋ฅธ ์…ธ ๋ช…๋ น์–ด๋“ค์—๋Š” ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

 

๋ช…๋ น์–ด ์„ค๋ช…
> show dbs ๋ชจ๋“  ๊ฐ€์šฉ DB๋ฅผ ๋ณผ ๋•Œ
> use <์ƒˆ๋กœ์šด DB์ด๋ฆ„> ์ƒˆ๋กœ์šด DB๋ฅผ ๋งŒ๋“ค๊ณ  ์Šค์œ„์นญ
> db DB์˜ ๋‚ด๋ถ€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ.
** ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ƒˆ๋กœ์šด DB๊ฐ€ DB๋ฆฌ์ŠคํŠธ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.
> db.<์ปฌ๋ ‰์…˜ ์ด๋ฆ„>.insert({
   name: "Jon",
   email: "Jon@email.com})
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
** name, email๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ๊ตฌ์กฐ๋Š” ํŒจํ„ด์ด ์ •ํ•ด์ ธ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค ๊ฐ’์ด๋ผ๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ๊ณ„์† ์ด๋ ‡๊ฒŒ ์ผ๊ด€์„ฑ ์—†๋Š” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์€ ๋ถˆํ•„์š”ํ•จ -> ๋‚˜์ค‘์— ๋‚˜์˜ด)
> db.<์ปฌ๋ ‰์…˜ ์ด๋ฆ„>.find() ์ปฌ๋ ‰์…˜ ๋‚ด ์ฝ˜ํ…์ธ  ๋ชฉ๋ก ๋ณด๊ธฐ
> db.<์ปฌ๋ ‰์…˜ ์ด๋ฆ„>.update({ 
   name: "Jon"}, {name: Jon Wexler"})
ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
> db.<์ปฌ๋ ‰์…˜ ์ด๋ฆ„>.delete({
   name: "Jon Wexler"})
๋งค์นญ๋˜๋Š” ๋„ํ๋จผํŠธ๋ฅผ ์ปฌ๋ ‰์…˜์—์„œ ์‚ญ์ œํ•œ๋‹ค.
> db.<์ปฌ๋ ‰์…˜ ์ด๋ฆ„>.deleteMany({}) ์ปฌ๋ ‰์…˜ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ๋„ํ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
** ์ด ๋ช…๋ น์€ ์›์ƒ๋ณต๊ตฌ ๋˜์ง€ ์•Š๋Š”๋‹ค.


๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ ์œ„์˜ ๋ช…๋ น์–ด๋“ค์„ ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.

 

 

show dbs๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ณด์ด๋Š” ๋ชจ๋“  DB๋“ค์˜ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

์„ค์น˜์‹œ ๊ฐ™์ด ์„ค์น˜๋˜๋Š” DB๋“ค 3๊ฐœ๊ฐ€ ๋ณด์ธ๋‹ค. ๋ชจ๋‘ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰์€ 0์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

 

 

use <์ƒˆ๋กœ์šด DB์ด๋ฆ„> ๋ช…๋ น์–ด๋กœ recipe_db๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ์Šค์œ„์นญํ•ด๋ดค๋‹ค.

์ƒˆ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ , ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— show dbs ๋ช…๋ น์–ด๋ฅผ ํ–ˆ์„๋•Œ ์•„์ง ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

 

๊ทธ๋‹ค์Œ insert ๋ช…๋ น์–ด๋กœ contacts๋ผ๋Š” ์ปฌ๋ ‰์…˜(๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๋ฉด ํ…Œ์ด๋ธ”)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋ดค๋‹ค.

๊ทธ๋ฆฌ๊ณ  find ๋ช…๋ น์–ด๋กœ ๋ชฉ๋ก์„ ๋ดค๋Š”๋ฐ ์—ฌ๊ธฐ์— ObjectId ๋ผ๋Š”๊ฒŒ ์ƒ๊ธด๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

**ObjectId : ๋ฐ์ดํ„ฐ๋ฅผ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ชฝ๊ณ DB๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” class. ๊ณ ์œ ๊ฐ’์œผ๋กœ ํŠน์ •์•„์ดํ…œ์„ ๊ตฌ๋ถ„/์ €์žฅํ•œ๋‹ค.

 

 

+) ๋ชฝ๊ณ DB Compass

๋ชฝ๊ณ DB๋ฅผ ํ„ฐ๋ฏธ๋„ ์…ธ์ด ์•„๋‹ˆ๋ผ GUI๊ธฐ๋ฐ˜์˜ ๊ด€๋ฆฌ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํˆด

 

์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๋‹ค. show dbs ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํ™”๋ฉด์ด๋‹ค.

 

 

์•„๊นŒ ๋งŒ๋“ค์—ˆ๋˜ recipe_db๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด๋ ‡๊ฒŒ ํ…Œ์ด๋ธ”(?) ์—ฌ๊ธฐ์„  ์ปฌ๋ ‰์…˜์ด๋ผํ•˜๋‚˜,, ์•”ํŠผ ๊ทธ๊ฒŒ ๋‚˜์˜จ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋˜ contacts๋ฅผ ํด๋ฆญํ•˜๋ฉด ์‚ฝ์ž…ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

 

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•ด๋ณด๊ณ  GUIํˆด์—์„œ ํ™•์ธํ•ด๋ดค๋‹ค.

๊ทธ๋žฌ๋”๋‹ˆ ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜ ๋” ์ž˜ ์ถ”๊ฐ€๋๋‹ค.

 

 

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ชฝ๊ณ DB ์—ฐ๊ฒฐ

 

๋จผ์ € npm install mongodb -S๋ช…๋ น์œผ๋กœ mongodb ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  main.js ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

MongoClient ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฝ๊ณ DB ๋ชจ๋“ˆ์„ ์š”์ฒญํ•œ๋‹ค.

๊ธฐ๋ณธ ํฌํŠธ๋กœ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , recipe_db๋ฅผ ์„œ๋ฒ„๋กœ ํ˜ธ์ถœํ•˜์—ฌ db ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.

(์ œ๊ณต๋œ ์ด๋ฆ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋ชฝ๊ณ DB๋Š” ์•ฑ์—์„œ ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.)

 

๋‹ค์Œ์œผ๋กœ 20ํ–‰์„ ๋ณด๋ฉด contacts ์ปฌ๋ ‰์…˜ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋„๋ก find()๋กœ ์š”์ฒญํ•˜๊ณ , Array๋กœ ๋ฐ›๋Š”๋‹ค. 

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ ๋Œ๋ ค์ค€๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋‹ค์Œ์€ Node.js ์ฝ”๋“œ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

contacts ์ปฌ๋ ‰์…˜์— ์ ‘์†ํ•˜๊ณ  ์•„์ดํ…œ ํ•˜๋‚˜๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค ์ž‘์„ฑํ•œ ๋’ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์ฝ˜์†”์—๋Š” ์ด๋ ‡๊ฒŒ

์›๋ž˜ ์žˆ๋˜ ๋‘๊ฐ€์ง€์˜ ๋ฐ์ดํ„ฐ์™€, ์ƒˆ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฝ์ž…๋๋‹ค๋Š” ๋กœ๊ทธ, ๊ทธ ์•„์ดํ…œ์˜ Id๊นŒ์ง€ ๋ณด์—ฌ์ค€๋‹ค.

 

 

 

+) ์—ฌ๊ธฐ์„œ ์ž˜๋ชปํ•œ๊ฒŒ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ทธ๋ƒฅ ๋ฐ–์—๋‹ค๊ฐ€ ๋”ฐ๋กœ ๋นผ์„œ ํ–ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์—ˆ๋‹ค.

์ €๋ ‡๊ฒŒ connect ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์•ผํ•จ.

 

๊ทธ๋ž˜์„œ ์ œ๋Œ€๋กœ insert ๋๋‚˜ ํ™•์ธํ•ด๋ณด๋ฉด, 

 

 

์ž˜ ๋œ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ชฝ๊ณ DB ์„ค์น˜, ๋ช…๋ น์–ด, .js์—์„œ ๋ชฝ๊ณ DB์™€ ์—ฐ๊ฒฐ ๊นŒ์ง€ ์™„๋ฃŒํ–ˆ๋‹ค^_^. 

 

 

 


References

 

https://mainia.tistory.com/5738

 

 

 

LIST

๋Œ“๊ธ€