Post

๐Ÿฅœ [MongoDB] Node.js ์™€ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ MongoDB ์„ค์น˜ ๋ฐ ์„ค์ •

Node.js ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด MongoDB ๋ฅผ ์„ค์น˜ ๋ฐ ์„ค์ ›์•„๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

Database ์˜ ์ข…๋ฅ˜

๊ด€๊ณ„ํ˜•๊ณผ ๋น„ ๊ด€๊ณ„ํ˜•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์ข…๋ฅ˜๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ, ์„ฑ๋Šฅ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ๊ฒฐ์ •

๊ด€๊ณ„ํ˜• DB

MySQL, Oracle, SQLite

๋น„ ๊ด€๊ณ„ํ˜• DB

MongoDB, Redis, Hadoop



MongoDB ์˜ ํŠน์ง•

  1. ๋น„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  2. Document-oriented Database (๋ฌธ์„œ์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
  3. Document (๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ key , value ์˜ ํ•˜๋‚˜ ์ด์ƒ์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ JSON ํ˜•ํƒœ)
  4. Collection (Document ์˜ ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง)

์œผ๋กœ ํฌ๊ฒŒ ํŠน์ง•์„ 4 ๊ฐ€์ง€๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

MongoDB ์„ค์น˜

MongoDB ๋ฅผ ์„ค์น˜๋ฅผ terminal ๋กœ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„ ์ ์œผ๋กœ Chocolatey ๋ฅผ ์„ค์น˜ ๋จผ์ € ํ•œ๋‹ค.

Chocolatey ์„ค์น˜

Linux ์˜ Brew ์ฒ˜๋Ÿผ ํŽธํ•˜๊ฒŒ ๋ชจ๋“ˆ์„ ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด Chocolatey ๋ฅผ ์„ค์น˜ ํ•œ๋‹ค.

Chocolatey ๊ณต์‹๋ฌธ์„œ

1
Get-ExecutionPolicy

๋ฅผ ๋จผ์ € ์‹คํ–‰ ํ•ด Restricted ๋ชจ๋“œ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

๋งŒ์•ฝ Restricted ์ผ ๊ฒฝ์šฐ

1
2
3
4
Set-ExecutionPolicy AllSigned
# or
Set-ExecutionPolicy Bypass-Scope Process
# ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.
1
2
3
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# ์„ ์‚ฌ์šฉํ•ด chocolatey ๋ฅผ ์„ค์น˜ํ•ด์ค€๋‹ค!
1
choco-?

์„ ์‚ฌ์šฉํ•ด ๋ฒ„์ „์ด ๋‚˜์˜จ๋‹ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ์„ค์น˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Powershell ์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰์‹œ์ผœ ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค.


MongoDB ์„ค์น˜

๋ฐฉ๊ธˆ ์„ค์น˜ํ•œ Chocolatey ๋ฅผ ์‚ฌ์šฉํ•ด ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ MongoDB ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

Chocolatey-package-mongodb

image-01 (์šฐ์ธก์˜ choco install mongodb ๊ฐ’์ด ์ž…๋ ฅ ๊ฐ’์ด๋‹ค.)

ํ•ด๋‹น ๊ฐ’์„ powershell ์— ์ž…๋ ฅํ•˜๋ฉด

image-02

์ถ”๊ฐ€์‚ฌํ•ญ ์„ ํƒ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ณด๋Š”๋ฐ, A ๋ฅผ ๋ˆŒ๋Ÿฌ ์ „์ฒด ๋™์˜๋ฅผ ํ•œ๋‹ค.

image-03 (์ •์ƒ์ ์œผ๋กœ ์„ค์น˜ ๋œ ๋ชจ์Šต)

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

์„ค์น˜๋ฅผ ๋งˆ์ณค์„ ๊ฒฝ์šฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ Path ๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚ด ์ปดํ“จํ„ฐ ๋‚ด MongoDB ์˜ bin ํด๋” ์œ„์น˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

์ž‘์„ฑ์ž๋Š” C:\Program Files\MongoDB\Server\7.2\bin ์˜€์œผ๋ฏ€๋กœ

image-04

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

image-05 (mongod ๋ฅผ ์ž…๋ ฅํ•ด ํ•ด๋‹น ํ™”๋ฉด์ฒ˜๋Ÿผ ๋‚˜์˜ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜ ์™„๋ฃŒ)

1
2
3
mongosh
# mongodb ์‹คํ–‰
# ํ•ด๋‹น ๋ช…๋ น์–ด๋กœ mongodb ๋Š” 27017 port-number ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

Mongoose ๋ž€?

Mongoose ๋Š” Schema ๋ผ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, Schema ๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ตฌ์กฐ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ†ตํ•ด Node.js ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ

Schema ์˜ ์ข…๋ฅ˜

  1. String
  2. Number
  3. Date
  4. Boolean
  5. Buffer
  6. Mixed (๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ€๋Šฅ, likes Anyโ€ฆ)
  7. ObjectedId (๊ฐ์ฒด ID)
  8. Array

Mongoose ์„ค์น˜ ๋ฐ ์—ฐ๊ฒฐ

์ •์ƒ์ ์œผ๋กœ MongoDB ์„ค์น˜๋ฅผ ๋งˆ์ณค์œผ๋ฉด ์ด์ œ ์‚ฌ์šฉํ•  ํ™˜๊ฒฝ์— MongoDB ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ค„

Mongoose ๋ฅผ ์„ค์น˜ํ•ด์ค€๋‹ค.

1
npm install mongoose

๊ทธ ํ›„ localhost:27017 ๋กœ ์ ‘์†ํ•ด ๋ณด๋ฉด

image-06

์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋Š” ๋˜์—ˆ์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import mongoose from "mongoose";

// mongoose connect
mongoose
  .connect("mongodb://127.0.0.1:27017")
  .then(() => {
    console.log("mongoDB connection success...");
  })
  .catch((error) => console.error(error));

// mongoose set
const { Schema } = mongoose;
const WritingSchema = new Schema({
  title: String,
  contents: String,
  dates: {
    type: Date,
    default: Date.now,
  },
}); // Schema ๋ฅผ ์„ค์ •

const Writing = mongoose.model("Writing", WritingSchema);
// Writing์€ Writing ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ WritingSchema ์˜ ํ˜•ํƒœ๋ฅผ ๋ˆ๋‹ค๊ณ  ์ง€์ •

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  Node.js ์˜ server ํŒŒ์ผ์— ํ•ด๋‹น ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  Schema ํ˜•์‹์„ ์ง€์ •ํ•ด์ฃผ๊ณ 

Mongoose ๋ฅผ ํ†ตํ•ด Browser ์™€ mongoDB ๋ฅผ ์—ฐ๊ฒฐ ํ•ด์ค€๋‹ค.

์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ ๋œ ๊ฒƒ์„ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธ ํ•œ ํ›„

MongoDB ์— Schema ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

image-07

  1. show dbs > ํ˜„์žฌ ์กด์žฌํ•˜๋Š” database ๋“ค์„ ์ถœ๋ ฅ
  2. use express > express ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ database ๋ฅผ ์„ ํƒ. ์—†์œผ๋ฉด ์ƒ์„ฑ๋„ ํ•จ
  3. db.createCollection("writings") > writings ๋ผ๋Š” collection ์„ ์ƒ์„ฑ

image-08

  1. show collections > ํ˜„์žฌ ์„ ํƒ ๋œ db ์— ์กด์žฌํ•˜๋Š” collection ๋ชฉ๋ก ์ถœ๋ ฅ
  2. db.writings.insert(...) > db ์˜ wiritings collection ์— ๊ฐ’์„ ์ถ”๊ฐ€
  3. db.writings.find().pretty() > ํฌํ•จ ๋œ object ๊ฐ’๋“ค์„ ์ถœ๋ ฅ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
app.post("/write", async (req, res) => {
  const title = req.body.title;
  const contents = req.body.contents;
  //   const date = req.body.date;

  // mongodb ์ €์žฅ
  const writing = new Writing({
    title: title,
    contents: contents,
  });

  const result = await writing
    .save()
    .then(() => {
      console.log("Writing Success...");
      res.render("detail", {
        detail: { title: title, contents: contents, date: date },
      });
    })
    .catch((error) => {
      console.error(error);
      res.render("write");
      // ์‹คํŒจํ–ˆ์„ ๋•Œ
    });
  // db ์— ๊ฐ’์„ ๋„ฃ๋Š” ๊ฑฐ๋Š” ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฏ€๋กœ ๋น„๋™๊ธฐ๋กœ ๊ฑธ์–ด์ฃผ์–ด์•ผ ํ•จ
  // ๋งŒ๋“  writing ์„ ์ €์žฅ์‹œ์ผœ์ค€๋‹ค.
});
This post is licensed under CC BY 4.0 by the author.