티스토리 뷰

Js에서 MongoDB를 사용하려면 DB Client 역할을 하는 도구가 있어야 합니다.

 

mongoose라이브러리

• MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 Js라이브러리입니다. 

• ODM(Object Document Mapper)라고도 부릅니다.

• Js의 객체(Object)와 MongoDB의 문서(Document)사이에서 매핑을 수행하는 도구입니다.

• 객체를 MongoDB데이터베이스의 문서로 쉽게 변환 하거나, 문서를 객체로 변환해 주는 작업을 수행합니다.

 

관계형 DB 와 MongoDB

출처 : https://www.pragimtech.com/

 

mongoose의 컬렉션(Collection)이란?

MongoDB에서 문서가 무엇인가 하면 관계형 데이터베이스에서의 하나의 튜플 , 즉 ROW를 의미 하는 것입니다.

또한 MongoDB의 collection은 여러개의 문서를 가지고 있는 구성요소 즉 RDBMS의 테이블과 같은 역할을 합니다.

대신 MongoDB는 Key-Value의 쌍으로 이루어져 있으며 JSON형식으로 구성 되어 있고

collection은 여러가지의 문서를 보유할수 있으며 고정된 구성요소가 존재하지 않고 유연하게 구성할 수 있습니다.

 

mongoose의 스키마(Schema)란?

MongoDB의 스키마(Schema)는 컬렉션(Collection)에 들어가는 문서(Document)가

어떤 종류의 값을 가질 것인지 정의하기위해 사용합니다.

스키마(Schema)는 데이터의 구조와 어떤 제약 사항을 가지는지 정의하기 위해 사용하며,

일반적으로 데이터를 모델링할 때 사용합니다.

스키마(Schema)는 어떤 필드가 있어야 하는지, 필드는 어떤 데이터 타입을 가져야 하는지를 정의합니다.

스키마 타입

null null값과 존재하지 않는 필드
ex) null
String 문자열
ex)'mongoDB'
Number 숫자
ex) 3.14
Date 날짜
ex) new Date()
Buffer 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열을 저장
ex) 0x65
Boolean true or false
ex) true
ObjectId(Schema.Type.ObjectId) 객체 ID, 주로 다른 객체를 참조할 때 넣음
ex) ObjectId()
Array 배열 형태의 값
ex) ['a','b','c','d']

 

mongoose의 모델(Model)이란?

모델(Model)은 데이터베이스에 데이터를 저장하고 읽어올 때 사용되는 데이터의 구조입니다.

스키마를 바탕으로 만들어지고, JavaScript의 객체와 MongoDB 간의 상호작용을 하기 위해 사용합니다.

MongoDB의 실제 데이터를 다룰 수 있는메서드를 지니고 있습니다.

만약, 사용자의 데이터를 저장하려면, 사용자(Users) 모델을 사용하여 데이터를 생성하고,

데이터베이스에 저장할 수 있습니다.

 

MongoDB vscode연결하기

directory structure

프레임워크설치

프로젝트 초기화 

yarn init -y  // package.json 모듈 변경[type:module]추가

 

express 라이브러리 설치 

yarn add express

 

mongoose 라이브러리 설치

yarn add mongoose

 

// /schemas/index.js

import mongoose from 'mongoose';

const connect = () => {
    mongoose
        .connect(
            'mongodb+srv://coriny:coriny1234@express-mongo.xcoqu31.mongodb.net/?retryWrites=true&w=majority',//몽고디비 주소 사용
            {
                dbName: 'testshop', // testshop 데이터베이스명을 사용합니다.
            },
        )
        .catch((err) => console.log(err))
        .then(() => console.log('몽고디비 연결 성공'));
};

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

export default connect;

 

//app.js
import express from 'express'
const app = express();
const PORT = 3000;

import connect from './schemas/index.js';

connect();//connect함수 실행

// Express에서 req.body에 접근하여, body 데이터를 사용할 수 있도록 설정하는 미들웨어
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

import goodsRouter from './routes/goods.js';

app.use('/api',[goodsRouter])

app.listen(PORT, ()=>{
    console.log(PORT,'포트열림');
})

app.js를 실행하면

성공한걸 볼수 있습니다. 

 

데이터 삽입하기 

// /schemas/goods.js

import mongoose from 'mongoose'

const goodsSchema = new mongoose.Schema({
    goodsId: { 
        type: Number, //상품의 고유 ID를 나타냄
        required: true, //필수 항목
        unique: true  // 중복된 값을 허용하지 않음
    },
    name: { 
        type: String, //상품의 이름을 나타냄
        required: true, // 필수 항목
        unique: true // 중복된 값을 허용하지 않음
    },
    thumbnailUrl: { 
        type: String, //상품의 썸네일 이미지 URL을 나타냄
    },
    category: { 
        type: String, //상품의 카테고리를 나타냄
    },
    price: { 
        type: Number, //상품의 가격을 나타냄
    }
});

// defaultSchema를 사용하여 'Defaults'라는 이름의 mongoose 모델을 생성합니다.
export default mongoose.model("Goods", goodsSchema)

관계형 데이터 베이스의 테이블을 생성(Create) 하는것처럼 만들어 줍니다.

 

// /routes/goods.js

import express from 'express';
import Goods from '../schemas/goods.js';

// Express.js의 라우터를 생성합니다.
const router = express.Router();

/** 상품 등록 **/
// localhost:3000/api/goods POST
router.post('/goods', async (req, res) => {
    const { goodsId, name, thumbnailUrl, category, price } = req.body;

    
    const goods = await Goods.find({ goodsId }).exec();
    if (goods.length) {
        return res
            .status(400)
            .json({ success: false, errorMessage: '이미 존재하는 데이터입니다.' });
    }

    const createdGoods = await Goods.create({
        goodsId,
        name,
        thumbnailUrl,
        category,
        price,
    });

    return res.status(201).json({ goods: createdGoods });
});

export default router;

웹에서 데이터를 넣어준다고 가정을 하고 해당 작업을 합니다.

그 다음 API Client에서 데이터를 넣어주면 데이터가 들어가는 것을 확인 할 수 있습니다.

 

그런다음 mongoDB Client인 Studio 3T에서 확인해보면

testshop이라는 데이터 베이스와 goods Collections, 입력한 데이터들이 들어간 걸 확인 할수 있습니다.

'프로그래밍 기초 > database' 카테고리의 다른 글

데이터 무결성 제약 조건  (0) 2024.02.05
DDL, DML, DCL, TCL 이란?  (0) 2024.02.02
node.js 에 mysql 연결하기 (RDS)  (1) 2024.01.25
RDS로 MySQL 세팅하기  (0) 2024.01.24
Docker에서 MySQL관리하기  (0) 2024.01.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함