MongoDB 는 크로스 플랫폼 지향의 동적 스키마형 도큐먼트 데이터 타입 을 사용하는 비관계형 데이터베이스 시스템 입니다.
크로스 플랫폼 지향이란?
간단하게 말하면, 여러 작동 환경에서 모두 사용할 수 있게 만드는 것을 지향한다는 것입니다.
동적 스키마형 도큐먼트 데이터 타입이란?
간단하게 말하면, Collection 내의 도큐먼트들이 서로 다른 데이터 형태 및 다른 수 를 가질 수 있는 구조입니다.
비관계형 데이터베이스 시스템이란?
전통 데이터베이스 양식인 행과 열이 존재하는 SQL 방식의 데이터베이스 시스템이 아닌 NoSQL 방식의 데이터베이스 시스템을 의미합니다.
npm i mongodb
npm i connect-mongo
npm i mongoose
npm i bcrypt
Node.js 에서 MongoDB 를 사용하기 위해서는 Mongoose 를 이용할 수 있습니다.
Mongoose 는 비관계형 데이터 모델을 만들기 위해서 Schema 기능을 지원하며, 그 외에도 검색, 업데이트, 제거 등의 다양한 메서드를 지원합니다.
한 마디로, MongoDB 에 대한 CRUD 기능을 전부 지원한다는 의미를 품고 있습니다/
본 문서에서는 백엔드 프레임워크 express 를 전제로 이야기하고 있습니다.
DB 연결 및 보안 미들웨어와 관련한 환경변수 파일인 .env 를 사용하기 위한 모듈 설치 후에 사용할 수 있습니다. 이에 관련하여 express doc 또는 dotenv doc 을 참고하세요.
import "dotenv/config";
import "./DB";
import "./model/user/userModel";
import "./model/file/imageModel";
import "./model/file/videoModel";
import app from "./app";
const serverOn=()=>console.log(`✅ index.js : http://localhost:${PORT}`);
app.listen(process.env.PORT,serverOn);
import mongoose from "mongoose";
// url 은 터미널에서 mongoDB 키면 나오는 링크, dbName 은 새로 생성할 DBs 이름
mongoose.connect("mongodb://url/dbName",{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: true,
useCreateIndex: true,
})
const db=mongoose.conenction;
const accessFail=()=>console.log(`❎ db.js : fail connection`);
const accessFail=()=>console.log(`✅ db.js : success connection`);
db.on("error", accessFail);
db.once("open", accessSuccess);
mongoDB 에 데이터를 요청하고 받은 데이터를 처리하는 등의 백앤드 시스템을 구축하기 위해서 express 와 관련된 전역적인 셋팅을 기입하는 파일입니다.
express 프레임워크 선언부터 morgan 과 같은 상태관리 라이브러리, express-session 과 같은 세션 라이브러리, 보안 및 유효성 제어를 위한 middleware, 각종 router 와 view-engine 셋팅 등이 포함됩니다. 이와 관련해서 express doc 을 참고하세요.
비관계형 데이터베이스 모델을 구성하는 요소는 다음과 같다.
import mongoose from "mongoose";
const userSchema=new mongoose.Schema({
// 항목들
});
import "dotenv/config";
import bcrypt from "bcrypt";
userSchema.pre("save",async ()=>{
if(this.isModified("password") {
this.password=awiat bcrypt.hash(this.password, process.env.HASH_COUNT);
}
});
import mongoose from "mongoose";
const userModel=mongoose.model("User",userSchema);
export default userModel;
mongoose 는 아주 다양한 메서드(API) 를 제공해준다.
이와 관련한 것은 필요한 기능을 관련 문서 mongoose doc 에서 찾아보자.