단순히 데이터를 잘 저장하고 잘 찾기 위해 만들어진 소프트웨어를 Database Management System(DBMS)
DB 서버의 모든 데이터는 DBMS가 관리.
가장 인기있는 비관계형 데이터베이스 (NoSQL) 중 하나
웹 서버는 DB 서버를 이용하는 DB 클라이언트가 될 수 있습니다.
브라우저 ↔ 웹 서버 ↔ DB 서버
- Studio 3T는 API의 사용을 도와주는 API Client처럼 MongoDB를 위해서 만들어진 MongoDB Client입니다.
- Studio 3T의 GUI를 통해 MongoDB에 저장된 데이터를 관리하기 쉽게 보여주는 프로그램입니다.
db.collectionName.find({})
db.collectionName.insertOne({ key: "value", key2: "값" })
db.collectionName.deleteOne({ _id: ObjectId("...")})
우리는 API에 MongoDB를 연결해서 데이터를 주고 받아볼 예정.
코드에서도 DB Client 역할을 하는 무언가가 있어야 데이터베이스에 연결을 할 수 있음.
=> mongoose 라는 도구를 이용해 데이터베이스에 연결
MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의합니다.
1개 이상의 Key-Value의 쌍으로 이루어져있습니다.{ "_id": ObjectId("6682192a1c155bd2f27881"), "name": "lyw", }
JSON 형식의 여러가지 문서(Document)를 보유할 수 있습니다.
이후에 설명할 관계형 데이터베이스(RDB)의 Table과 동일한 역할을 합니다.
스키마는 컬렉션(Collection)에 들어가는 문서(Document)에 어떤 종류의 값이 들어가는지를 정의합니다.
데이터를 모델링할 때 사용합니다.
null, string, number, date, buffer, boolean, objectId, array 등
데이터베이스에 데이터를 저장해줄때 데이터의 구조를 담당합니다.
- 스키마를 사용하여 만들고, MongoDB에서 실제 작업을 처리할 수 있는 함수들을 지니고 있습니다.
- 문서(Document)를 생성할 때 사용합니다.
GET/POST/PUT/DELETE
// 상품목록조회
router.get("/goods", (req, res) => {
res.status(200).json({ goods: goods });
});
// 상품상세조회
router.get("/goods/:goodsId", (req, res) => {
const { goodsId } = req.params;
// let result = null;
// for(const good of goods) {
// if(Number(goodsId) === good.goodsId) {
// result = good;
// }
// }
const [detail] = goods.filter((goods) => goods.goodsId === Number(goodsId));
res.status(200).json({ detail });
});
// 장바구니에 상품추가 api
const Cart = require("../schemas/cart.js");
router.post("/goods/:goodsId/cart", async (req, res) => {
const { goodsId } = req.params;
const { quantity } = req.body;
const existsCarts = await Cart.find({ goodsId });
if (existsCarts.length) {
return res.status(400).json({
success: false,
errorMessage: "이미 장바구니에 해당 상품이 존재합니다.",
});
}
await Cart.create({ goodsId, quantity });
res.json({ result: "sucess" });
});
//장바구니 상품 수량 수정 api(없는 상품이여도 오류는 안남)
router.put("/goods/:goodsId/cart", async (req, res) => {
const { goodsId } = req.params;
const { quantity } = req.body;
const existsCarts = await Cart.find({ goodsId });
if (existsCarts.length) {
await Cart.updateOne(
{ goodsId: goodsId },
{ $set: { quantity: quantity } }
);
}
res.status(200).json({ success: true });
});
// 장바구니 상품을 제거하는 api
router.delete("/goods/:goodsId/cart", async (req, res) => {
const { goodsId } = req.params;
const existsCarts = await Cart.find({ goodsId });
if (existsCarts.length) {
await Cart.deleteOne({ goodsId });
}
res.json({ result: "success" });
});