TIL 230826(토)

박지은·2023년 8월 26일
0

TIL

목록 보기
10/36

오늘은 node.js 입문주차 2주차 강의를 들었다.
웹미니 프로젝트 당시에 파이썬을 활용해서 데이터베이스를 구축해본 적이 있었는데 노드를 활용하는 건 지금 익숙하지 않아서 용어들이 다 헷갈려서 하나씩 개념을 한 줄씩 정리하려고 한다.

2.1 데이터베이스과 mongoDB

  • Database : 데이터의 집합 , 영속성을 가짐
  • DBMS(Database Management System) : 데이터베이스를 실제로 운영, 관리하는 소프트웨어

-> 데이터베이스에 저장한다 = DBMS가 설치된 서버에 저장한다.

  • 종류 2가지
    - 관계형 데이터베이스 RDB

    • 비관계형 데이터베이스 NoSQL -> MongoDB (특징, 모든 형태 JSON 형태)
  • MongoDB Atlas : mongoDB의 클라우드

2.2 Studio 3T
: mongoDB 데이터를 편하게 관리하는 GUI툴 (시각적 툴)

  • DB client
  • API client

2.3 - 1. Mongoose = ODM (object document mapper)
: 데이터를 쉽게 MongoDB에 읽고 쓰게 해주는 js 라이브러리

즉, js 객체 object를 mongodb 문서 (document)로 쉽게 변환, 또는 반대로 문서를 객체로 반환

mongodb에서 각 데이터 하나를 문서 (document)
- 문서 ( 1개 이상 key - value; JSON형식)

  • 컬렉션 (collection) : 여러개의 문서 (documents)
  • 스키마 (Schema) : 컬렉션에 들어가는 문서가 어떤 종류의 '값'을 가지는지 정의
  • 모델 (Model) : 데이터 구조, DB에 데이터 저장, 읽어올 때 사용
    스키마 바탕으로 만듬. JS객체와 mongodb 상호작용
import express from 'express';

const router = express.Router();

// 1. mongoose
// 2. API를 구현한다. 
// 3. 클라이언트로 부터 전달받은 데이터를 가져온다. 
// 4. goodsId 중복되지 않았는지 검사한다. 
// 4-1. 만약, goodsId가 중복된다면, 에러메시지를 전달한다. 
// 5. 상품(Goods)를 생성한다. 
// 6. 생성된 상품 정보를 클라이언트에게 응답(Response)을 반환한다. 


// 1.mongoose, Goods 모델가져오기 
import mongoose from 'mongoose';
import Goods from '../schemas/goods.js';

// 2. API를 구현한다. 
router.post('/goods', async (req, res) => {
    // 3. 클라이언트로 부터 전달받은 데이터를 가져온다. 
    // goodsId, name, thumbnailUrl, category, price
    const { goodsId, name, thumbnailUrl, category, price } = req.body;

    // 4. goodsId 중복되지 않았는지 검사한다. -> mongoDB에 데이터를 조회해서, 해당하는 데이터가 mongoDB에 존재하는지 확인
    const goods = await Goods.find({goodsId: goodsId}).exec(); // 데이터를 생성할 떄는 사용이 안되고, 데이터를 조회할 때 사용된다. 

    // 4-1. 만약, goodsId가 중복된다면, 에러메시지를 전달한다. 
    if(goods.length){  // 배열이 비어있지 않으면 참이 되는 조건 
        return res.status(400).json({errorMessage: '이미 존재하는 데이터입니다.'});
    }

    // 5. 상품(Goods)를 생성한다.
    const createdGoods = await Goods.create({
        goodsId: goodsId, 
        name: name,
        thumbnailUrl : thumbnailUrl,
        category: category,
        price: price,
    });

    // 6. 생성된 상품 정보를 클라이언트에게 응답(Response)을 반환한다. 
    return res.status(201).json({goods: createdGoods});
});
export default router;
profile
성장하는뿅아리

0개의 댓글

관련 채용 정보