mongoose 설치 및 db연결

강현구·2022년 1월 12일
0

Node.js

목록 보기
12/19

일단 mongoose에 대해 알아보자.

mongoose

mongoose는 mongodb에 연결하고 데이터 모델링을 제공해주는 툴이다.
이제 설치를 해보자.
vscode 터미널에

npm install mongoose

를 입력해 준다.
그러면 설치가 진행 될 것이다.
설치가 되었는지 확인 하려면 package.json 파일에 들어가서 mongoose가 있는지 보면된다.

db연결

이제 데이터베이스에 접속을 위해 간단한 코드로 확인 하자.
index.js 에 추가하면 된다.

const mongoose = require('mongoose');

app.get('/mongodb', async (req, res) => {
    await mongoose.connect('mongodb://localhost/voyage', {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });

		res.send('ok');
})

이걸 중간에 넣어 주고 서버를 실행 시켜 준다.
그리고 url주소 마지막에 /mongodb 를 넣어준다.
페이지에 ok가 뜨면 접속이 잘 된것이다.

Schema

다음으로 넘어가기 앞서 Schema에 대해 알아보겠다.
Schema는 데이터베이스를 구성하는 개체, 속성, 관계 및 데이터베이스 조작 시 데이터 값들이 갖는 제약조건 등에 관해 전반적으로 기술한 것이다.
Schema는 간단히 말해 데이터베이스의 구조적 특성이다.

모델링 및 데이터 추가

이제 db 연결이 된걸 확인 했으니 모델링과 데이터 추가를 해보겠다.
일단 코드를 바꿔보겠다. index.js에 아까 추가한 코드를 아래 코드로 바꾼다.

app.get('/mongodb', async (req, res) => {
    await mongoose.connect('mongodb://localhost/voyage', {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    const { Schema } = mongoose;
    const productsSchema = new Schema({
        productId: {
            type: Number,
            required: true,
            unique: true
        },
        name: {
            type: String,
            required: true,
            unique: true
        },
        imageUrl: {
            type: String
        },
        tag: {
            type: String
        },
        price: {
            type: Number,
            require: true
        }
    });

    let Products = mongoose.model("Products", productsSchema)

		await Products.create({
        productId: 1,
        name: "스테이크",
        imageUrl: "https://www.google.com/imgres?imgurl=https%3A%2F%2Fww.namu.la%2Fs%2F3c37e944ae486477fea075e4bff27a9c696e0ad1016535bbaac3bbd31a8ec55a0f7be21bd6fa7f41b1bc00832e4fba6d2ec14e36bd99ed7f9418c25844393869f317186b7ccd335c66411a0df5ed29ac0b7f89194a61156fc75bf6467e62762b&imgrefurl=https%3A%2F%2Fnamu.wiki%2Fw%2F%25EC%258A%25A4%25ED%2585%258C%25EC%259D%25B4%25ED%2581%25AC&tbnid=0jtG5uZxQ7kwFM&vet=12ahUKEwj4i6Tl0Kv1AhWKAaYKHYB-DKAQMygAegUIARDbAQ..i&docid=OpOzMcS8TfkB5M&w=1000&h=666&itg=1&q=%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%81%AC&ved=2ahUKEwj4i6Tl0Kv1AhWKAaYKHYB-DKAQMygAegUIARDbAQ",
        tag: "food",
        price: 22900
    });

		res.send('ok');
})

위에 똑같은 코드는 넘어가고 const { Schema } = mongoose; Schema를 mongoose로 가져왔다.
그 밑으로 이제 productsSchema라는 이름으로 새로운 Schema를 만든다.
여기서 지어준 productsSchema 이름은 바꿔도 된다.
내가 저장하고 싶은 정보들을 하나씩 넣어준다.
일단 나는 productId와 name, imageUrl, tag, price를 만들려고 한다.
각각 타입을 적어주고, require는 꼭 필요한 정보이면 true로 해준다.
그리고 unique는 중복을 허용하지 않는다면 unique를 true로 해준다.
다 적어 줫으면 밑으로 Products란 이름에 mongoose.model()을 넣어준다.
그 안에는 모델이름과, 모델Schema를 넣어주면 된다.
그리고 아까 지어준 Products를 이용해 모델 데이터를 입력해 준다.
Schema를 만들때 넣은 정보들의 값을 지정해준다.
productId는 1을 넣어주었고 name은 스테이크, imageUrl은 인터넷에서 스테이크 이미지를 아무거나 찾아 링크를 넣어주었다.
그리고 tag는 음식이니 food를 해줬고 price는 22900원으로 넣어 주었다.
만들기가 끝나면 응답으로 ok 가 나오게 해주었다.
이제 저장을 하고 서버를 실행 시켜서 /mongodb 에 들어가서 확인을 해보면 ok가 뜨는것을 확인할 수 있다.
그러면 데이터 입력이 완료 된 것이다.
저장된 정보를 확인하고 싶다면 전에 깔아놨던 Robo 3T 에 들어가서 connect를 해준다.
만약 connect 할게 없다면, create를 눌러서 그대로 있는 정보를 가지고 확인을 눌러서 만들어 준다.
그러면 만들어진 데이터베이스들을 확인할 수 있을 것이다.

mongoose 구조 만들기

지금 한 route에 기능을 다 모아놓았던 것을 api로 쓰기 위해 구조를 변경하겠다.
일단 폴더 안에 schemas 라는 폴더를 만들어 준다.
그 schemas 폴더 안에 index.js와 products.js를 만들어 준다.
다 만들면 폴더 구조는 이렇게 된다.

이렇게 만들어 졌으면 이제 아까 만들었던 모델정의 부분을 옮길 것이다.
일단 schemas 폴더 안의 index.js 파일의 코드를 먼저 입력하면

const mongoose = require("mongoose");

const connect = () => {
  mongoose
    .connect("mongodb://localhost:27017/voyage", {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    })
    .catch(err => console.log(err));
};

mongoose.connection.on("error", err => {
  console.error("몽고디비 연결 에러", err);
});

module.exports = connect;

이렇게 된다.
데이터베이스에 연결하는 코드이고 연결이 안될 시 연결에러가 콘솔에 뜨게 만드는 것이다.
그리고 schemas 폴더 안의 products.js 는

const mongoose = require("mongoose");

const { Schema } = mongoose;
const productsSchema = new Schema({
  productId: {
    type: Number,
    required: true,
    unique: true
  },
  name: {
    type: String,
    required: true,
    unique: true
  },
  imageUrl: {
    type: String
  },
  tag: {
    type: String
  },
  price: {
    type: Number,
    required: true
  }
});

module.exports = mongoose.model("Products", productsSchema);

이렇게 적는다.
이 것은 스키마를 만드는 코드이다.

일단 이렇게 만들어 놓고 만들어 둔걸 쓰는 것은 다음에 보도록 하자.

profile
초보개발자

0개의 댓글