티스토리 뷰
Js에서 MongoDB를 사용하려면 DB Client 역할을 하는 도구가 있어야 합니다.
mongoose라이브러리
• MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 Js라이브러리입니다.
• ODM(Object Document Mapper)라고도 부릅니다.
• Js의 객체(Object)와 MongoDB의 문서(Document)사이에서 매핑을 수행하는 도구입니다.
• 객체를 MongoDB데이터베이스의 문서로 쉽게 변환 하거나, 문서를 객체로 변환해 주는 작업을 수행합니다.
관계형 DB 와 MongoDB
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 |