백엔드 MongoDB 데이터 베이스에 연결하기 (Mongoose 사용)

2024. 1. 10. 01:46MERN

Mongoose를 사용하지 않으면, 새로운 것을 추가할 때마다 MongoClient를 사용하고 / connect 메서드로 연결을 설정해야 했음

심지어 close()로 연결을 종료하기까지 해야 함

 

Mongoose에는 메서드가 딱 하나만 필요함

mongoose.connect("\ url")

 

위처럼 하면 새롭게 생성할 때마다 새 연결을 여닫을 필요가 없음

이렇게 Mongoose는 데이터베이스와 백엔드가 항상 효율적으로 연결되도록 함

 

다만 Mongoose의 경우 사용하기가 조금 어렵다는 단점이 있는데,

이는 백엔드와 데이터베이스의 연결을 관리하는 것 외에도 프로미스를 반환함 (then을 추가해야 함)

 

즉, mongoose를 사용하지 않으면, 새로운 것을 생성할 때마다 mongoClient를 사용해야 함

아래 코드 처럼, client를 통해 connect를 하여 연결을 해야하고, 아래 close로 종료까지 해주어야 했음

    const client = new MongoClient(url);
    try{
        await client.connect();
        const db = client.db();
        const result = await db.collection('products').insertOne(newProduct);
        // const result = db.collection('products').insertOne(newProduct);
    }
    catch(error){
        return res.json({message:"could not store data"})
    }
    client.close()
    res.json(newProduct)

 

그러나, Mongoose를 이용하면 메서드가 딱 하나만 필요하게 된다. ( 기존 connect + close )

Mongoose에서 save() method는 mongoose에서 생성했던 모델 및 스키마에 연결하여 사용할 수 있음

save() method는 문서를 저장할 때 필요한 무거운 작업을 모두 수행함 => 장점 => insertOne 대신 save를 사용하여 올바른 데이터베이스를 참조해 줌

connect와 마찬가지로 save는 프로미스를 반환하기 때문에 비동기식임. await 필요 (DB와 상호 작용에 시간이 소요되기 때문)

그러면 프로미스가 저장된 product를 내보내게 됨

const createProduct = async(req, res, next) =>{
    const createProduct = new Product({
        name: req.body.name,
        price: req.body.price
    });
    const result = createdProduct.save();
    res.json(result);

};

 

 

Mongoose를 통해 이런 식으로 코드를 줄일 수 있다.

'MERN' 카테고리의 다른 글

백엔드(Node) & MongoDB(데이터베이스) 연결  (3) 2024.01.14
Mongoose (MongoDB - DB 생성, 조회)  (0) 2024.01.12
MongoDB 연결, 시작2  (0) 2024.01.10
MongoDB란 (feat. NoSQL, SQL)  (0) 2024.01.03
MERN - Express 오류 처리  (0) 2023.09.17