mongooseDB 설정

Lumi·2021년 12월 20일
0
post-thumbnail

이 글은 제가 관심있어하는 mongoose DB를 설정하고 사용하는 부분에 대해서 다루었습니다.

🔥 DB생성

이 부분은 MongooseDB를 사용하기에 앞서 DB를 어떻게 생성하는지에 대해서 다루는 부분 입니다.

https://www.mongodb.com/?_ga=2.220771549.431433405.1639980369-1303088370.1639980369

이부분으로 접속하여 start free를 선택합니다.

그러면 로그인 창이 뜨게 되며 알맞은 계정으로 로그인을 해주게 됩니다.

이후 저희는 DB를 생성해주고 Cluster를 만들어 주어야 합니다.
단순히 새로운 프로젝트를 만들어 줌으로써 기본적인 프로젝트 구성은 완료가 됩니다.

이후 DB를 생성하고 Cluster를 생성하게 됩니다.

  • 이 부분에서 무료버전을 사용하는 것에 주의 하여야 합니다.
  • 무료 버전은 생성할떄 계좌등 정보를 입력하는 부분 없이 바로 생성이 완료가 됩니다.

이러한 화면까지 진행이 되었다면 이름과 비밀번호를 입력하고 생성을 해주면 됩니다.

  • 이름과 비밀번호는 후에 js를 통해 연결을 할떄 사용이 되니 기억하기 쉬운것으로 입력해 줍니다.

이후 완료하게 되면 기본적은 Cluster은 만들어진 것 입니다.

추가적으로 Security부분에서 새로운 관리자를 추가할수 있지만 개인적으로만 활용할 것이기 떄문에 추가하지 않습니다!

이 과정에서 Cluster이 생성되는데에 조금의 시간이 소요 됩니다.

생성이 완료가 되었다면

이와 같은 화면이 보이게 될 것이고 이부분에서 Connect부분을 통해서 주소값을 받을수 있습니다.

가운데 선택지인 Connect your application을 클릭합니다.

그러면 이제 연결할수 있는 URL값이 나오게 되고 이 부분을 활용하여 js에서 연결을 시작하도록 하겠습니다.

🔥 JS연결

기본적으로 서버를 통해서 실험을 할 것이기 떄문에

express, cors, mongoose 등을 npm install을 통하여 설치해 줍니다.

npm install express

npm install cors

npm install mongoose

이후

const express = require("express");
const cors = require("cors");
const { urlencoded } = require("express");
const mongoose = require("mongoose");
const app = express();

app.use(cors());
app.use(urlencoded(true));

이와 같이 간단하게 서버 셋팅이 끝나게 됩니다.

저는 mongooseDB에 연결이 되면 서버가 열리도록 작성을 할것이니

이제 mongooseDB를 연결하는 작업을 진행하였습니다.

이떄 사용하는 코드는 mongoose.connect(URL)입니다.

  • Promise를 반환함과 동시에 URL값을 인자로 받게 됩니다.

그럼 URL값은 어떤 값을 사용할지를 알아야 합니다.

  • 이 값은 아까 복사한 주소값 입니다.
const URL =
  "mongodb+srv://<아이디>:<패스워드>@accepttest.dsxap.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";

이처럼 초기에 설정해둔 아이디와 패스워드 값을 입력해 줌으로써

해당 DB에 접근할수 있는 URL값을 설정 가능합니다.

이후 mongoose.connect(URL)에 값을 입력해 줌으로써 Promise를 반환합니다.

Promise를 받을수 있는 방법은 다양하게 있지만 주로 then사용하며 저 같은 경우에도 then활용 하였습니다.

mongoose
  .connect(URL)
  .then(() => { app.listen(PORT, () => {
      console.log(PORT);
  });
  }).catch((err) => console.log(err.message));

이런식으로 작성을 하여 정상적으로 DB연결이 이루어지면 서버를 실행하고 그렇지 않다면 오류를 발생하게 해두었습니다.

만약 정확한 아이디와 패스워드를 URL에 입력하지 않으면 이런 오류가 발생하니 참고하시길 바랍니다!!

🔥 Schema 설정

DB는 일종의 Schema라는 규격이 필요합니다.

어떠한 값이 들어갈지를 미리 적어놓는 표준?? 이라고 생각하시면 될것 같습니다.

Schema는 정해진 값은 없으며 자신이 원하는 값을 넣을수 있습니다.

const Schema = mongoose.Schema({
  title: String,
  message: String,
  tags: [String],
  likeCount: {
    type: Number,
    default: 0,
  },
  createdAt: {
    type: Date,
    default: new Date(),
  },
});

제가 작성한 간단한 Schema입니다.

많이 어려운 점이 없다고 생각하여 넘어가도록 하겠습니다.

이 부분은 원래 따로 폴더에 관리를 하여 필요할떄 불러오는 형식으로 사용합니다.

ID값이 없는 이유는 mongooseDB는 iD값을 따로 주지 않으면 자동으로 생성해 줍니다.

이후 해당 Schema를 사용하기 위해서 model을 적용하였습니다.

const PostMessage = mongoose.model("하고싶은 이름", Schema);

이후에 Schema를 사용할 떄에는 PostMessage라는 변수를 이용하게 됩니다.

🔥 mongooseDB사용

mongooseDB에는 다양한 함수가 있습니다.

  • 이를 확인하고자 한다면 console.log(PostMessage)를 통해서 확인 가능합니다.

저 같은 경우에는 전반적으로

find, 
findById, 
new PostMessage
mongoose.Types.ObjectId.isValid(id),
findByIdAndUpdate, 
findByIdAndRemove

에 대하여 알아보겠습니다.

🔨 mongoose.Types.ObjectId.isValid(id)

이 함수는 해당 id값이 ObjectId값인지를 확인하는 함수 입니다.

mongooseDB를 통해서 데이터를 만들게 되면 id값이 자동으로 부여가 되는데

이 값의 type은 ObjectId입니다.

  • 이 부분은 후에 테스트를 하는 gif를 통해서 보여드리도록 하겠습니다.

🔨 find()

해당 mongooseDB에 어떠한 데이터값들이 존재하는지를 확인하는 함수 입니다.

  • 아무런 값이 없다면 빈 배열을 반환 합니다.

🔨 new PostMessage

새로운 데이터를 형성하는 부분입니다.

앞서 적은 Schema의 이름이 맞게 진행이 되어야 합니다.

  • 예를들여 Schema에서의 키값은 name인데 message라는 이름을 가진 변수값을 저장할 수는 없습니다.
  • 데이터를 저장할떄에는 반드시 save를 추가해야 합니다!!
const { title, message } = req.body;

  const newPostMessage = await new PostMessage({ title, message });
  newPostMessage.save();
  res.send(newPostMessage);

위 세가지 메서드를 테스트 하는 gif를 첨부하겠습니다.

  • 최초 저장되어 있는 값은 없기 떄문에 데이터를 추가하는 부분부터 진행하겠습니다.

🔨 findById(id)

find함수는 모든 데이터를 불러오는 함수이지만 이 함수는 특정 아이디에 해당하는 데이터만 불러오는 함수입니다.

  • 아이디는 고유한 값을 가집니다.

🔨 findByIdAndUpdate(id)

특수한 id값을 찾고 그 값을 update하는 함수 입니다.

이 함수를 사용할떄에는 일단 id값을 통해서 한개의 데이터를 두개의 변수에 할당해야 합니다.

const temp = await PostMessage.findById("id값");
  const post = await PostMessage.findByIdAndUpdate(
    "id값",
    { likeCount: temp.likeCount + 1 },
    { new: true }
  );
  res.send(post);

이처럼 기존에 값은 Id값으로 가져온 값을 update해줌으로써 작동을 합니다.

  • 중요한 점은 new : true 라는 과정을 통해서 save()를 대신 합니다.

🔨 findByIdAndRemove(id)

매우 간단하게 작동을 하며 해당 id에 맞는 값을 삭제 합니다.

이상으로 간단하게 mongooseDB의 활용하는 방법에 대해 알아 보았고 전체 코드를 첨부함으로써 마무리 하겠습니다!

const express = require("express");
const cors = require("cors");
const { urlencoded } = require("express");
const mongoose = require("mongoose");
const app = express();

app.use(cors());
app.use(urlencoded(true));


const PORT = 8080;

mongoose
  .connect(URL)
  .then(() => {
    app.listen(PORT, () => {
      console.log(PORT);
    });
  })
  .catch((err) => console.log(err.message));

const Schema = mongoose.Schema({
  title: String,
  message: String,
  tags: [String],
  likeCount: {
    type: Number,
    default: 0,
  },
  createdAt: {
    type: Date,
    default: new Date(),
  },
});

const PostMessage = mongoose.model("하고싶은 이름", Schema);

app.post("/search", async (req, res) => {
  const post = mongoose.Types.ObjectId.isValid("61c02c86bffac4a6e7ee9643");
  res.send(post);
});

app.post("/make", async (req, res) => {
  const { title, message } = req.body;

  const newPostMessage = await new PostMessage({ title, message });
  newPostMessage.save();
  res.send(newPostMessage);
});

app.post("/find", async (req, res) => {
  const all = await PostMessage.find();
  res.send(all);
});

app.post("/findById", async (req, res) => {
  const post = await PostMessage.findById("61c04650c4cc0f0de093b4f6");

  res.send(post);
});

app.post("/update", async (req, res) => {
  const temp = await PostMessage.findById("61c04650c4cc0f0de093b4f6");
  const post = await PostMessage.findByIdAndUpdate(
    "61c02c86bffac4a6e7ee9643",
    { likeCount: temp.likeCount + 1 },
    { new: true }
  );
  res.send(post);
});

app.post("/delete", async (req, res) => {
  const post = await PostMessage.findByIdAndDelete("61c04650c4cc0f0de093b4f6");
  res.send(post);
});
  • URL값은 제외 하였습니다
profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글