본문 바로가기

DB

MongoDB 를 Mongoose로 쉽게 사용 해보기

혹시 설치방법을 모르신다면 설치법에 대한 게시물이 있으니 보고 오시면 편합니다!
이 게시물은 node에 대한 기본 세팅이 다 끝났다는 가정하에 DB를 연결해 보는 글이니 참고 바랍니다.

 

 

 

  • 먼저 database 메뉴에서 Connect 버튼을 클릭합니다.

  • 그러면 아래와 같은 창이 뜨는데 여기서 노드 버전을 설정하고 터미널에
  •  npm install mongodb@<버전>을 복사해서 설치합니다.

  • 터미널에서 Mongoose를 설치해줍니다.

여기서!!! Mongoose는 Node.js와 MongoDB를 연결해 주는 ODM입니다.

(ODM(Object Document Mapping) : 객체와 문서를 1대 1로 매칭하는 역할)

MongoDB의 ODM은 다양하지만 Mongoose가 가장 유명합니다.

설치

 npm install mongoose --save 

 

  • 설치가 완료되면 package.json을 확인 합니다. 아래와 같다면 잘 설치된 것입니다.
"dependencies": {
"mongodb": "4.1",
"mongoose": "^7.4.0",
},
  • 그다음 에디터로 가서 초기 세팅을 해줍니다.connect 메서드를 이용해 mongoDB와 연결시킬 겁니다. 위 사진에 3번 항목에 있던 링크를 가져와서 변수에 할당 후 connect의 첫 번째 인자에 넣어줍니다. 그리고 객체가 보이실 텐데요! 왜 객체 안에 코드들이 주석처리가 되었냐면 낮은 버전에서는 저렇게 문구들을 넣어주는 게 맞지만 찾아보니 버전 6 이상부터는 저것들을 자동으로 인지하고 있어서 따로 써줄 필요가 없답니다. 만약 저 값들을 넣는 다면?

mongoparseerror: options newurparse, usefindandmodify are not supported

와 같은 에러가 나올 것입니다. 

const mongoURI = "mongodb+srv://jyeop920:<본인 비번>@cluster0.mvqy3yr.mongodb.net/?retryWrites=true&w=majority";
 
//require로 mongoose 불러오기
const mongoose = require("mongoose");
 
mongoose.connect(mongoURI , {
//useNewUrlParser:true,
//useUnifiedTopology:true,
//useCreateIndex:true,
//useFindAndModify:false
}).then((req , res) => {
//연결 성공하면 아래 메세지가 뜸
console.log("MongoDB Connected!");
}).catch((error) => {
//실패하면 에러 메세지를 보내줌
console.log(error);
});
 
  • mongoose 설치가 완료되면
  • 파일을 구분하기 위해 models 폴더를 생성하고 User.js 파일을 생성합니다. 그 후 아래와 같은 코드를 작성해 줄게요.

여기서! Mongoose는 Schema라는 개념이 존재합니다. Mongoose는 'table'이라는 개념이 없기 때문입니다. MongoDB의 경우 데이터를 아무 형태의 값으로 넣을 수 있기 때문에  편리하면서도  어떤 경우엔 원하는 자료형과 맞지 않는 데이터가 들어갈 수도 있는 문제가 있습니다. 그 문제를 해결하기 위해! Mongoose는 Schema를 도입한 것입니다. Schema는 SQL의 table과 비슷한 개념, 또는? 'typescript처럼 타입을 미리 지정해 놓는다'라고 생각하고 사용하시면 될 것 같습니다. 

그래서! 아래와 같이 어떤 형식으로 데이터를 받을지 미리 schema를 만들어 놓습니다.

//mongoose를 불러옵니다
const mongoose = require("mongoose");
 

//user 정보 설정하기
const userSchma = mongoose.Schema({
//사용자 이름
name: {
type: String,
maxlength: 50, //최대 글자수
minlength: 5 //최소 글자수
},
//이메일
email: {
type: String,
trim: true, //이메일을 입력할 때 띄어쓰기가 있으면 띄어쓴 부분 없애줌
unique: 1 //이메일 중복 안되게 설정
},
//비번
password: {
type: String,
maxlength: 15,
minlength: 8
}
});


//스키마 작성 끝나면 모델안에 스키마 넣어주기(모델은 스키마를 감싸주는 역할 입니다)
const User = mongoose.model("User",userSchma);

//다른 곳에서도 쓸 수 있게 모듈화 해줌
module.exports = { User };
 
  • 모델을 가져오고 register 경로로 post 요청을 보내면 응답해 주는 코드를 작성합니다
//모델을 가져옴
const { User } = require("../models/User.js");
 
app.post("/register" , (req , res) => {
//인스턴스 객체 생성 후 클라이언트 요청을 담습니다.
const user = new User(req.body);
 
//정보를 db에 보내준다. 이때 , 성공하거나 에러가 나면 메세지를 json 형식으로 보내줍니다.
//mongoDB 메서드, user모델에 저장 합니다.
//mongoose 6버전 부터는 save 에 콜백함수를 지원하지 않아 아래와 같이 코드 작성합니다.
user.save()
.then(()=>{
res.status(200).json({
success: true
});
})
.catch((error)=>{
res.json({ success: false, error });
});
});
  • 실행해보기 전 전체 코드 점검 1(index.js)
const express = require("express");
const app = express();
const PORT = 7070;
const bodyParser = require("body-parser");
 
const { User } = require("../models/User.js");
 
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

const mongoURI = "mongodb+srv://jyeop920:toddlf0826@cluster0.mvqy3yr.mongodb.net/?retryWrites=true&w=majority";
const mongoose = require("mongoose");
mongoose.connect(mongoURI , {
 
}).then((req , res) => {
console.log("MongoDB Connected!");
}).catch((error) => {
console.log(error);
});

app.listen(PORT , (req , res) => {
console.log("hello world");
});
 

app.post("/register" , (req , res) => {
 
const user = new User(req.body);
 
 
user.save()
.then(()=>{
res.status(200).json({
success: true
});
})
.catch((error)=>{
res.json({ success: false, error });
});
});
  • 실행해 보기 전 전체 코드 점검 2(Models/Users.js)
//user model 만들기
const mongoose = require("mongoose");
 
const userSchma = mongoose.Schema({
 
name: {
type: String,
maxlength: 50, 
minlength: 5
},
//이메일
email: {
type: String,
trim: true,
unique: 1
},
//비번
password: {
type: String,
maxlength: 15,
minlength: 8
}
});

 
const User = mongoose.model("User",userSchma);
 
module.exports = { User };
  • PostMan을 사용해서 서버에 요청을 보내봅니다.

아래 내용에 대해 설명하자면 제가 만들어 놓은 서버 경로에 JSON 객체로 회원 정보를 담아 POST 요청하는 내용입니다.

성공하면 아래 콘솔창에 성공했다고 success의 값이 true로 나오는 거 보이시죠? 

만약 PostMan 의 사용법을 모르신다면 구글에 PostMan 을 설치하고 가입한 후에 아래와 같은 창으로 들어와서 실행 하시면 됩니다. 너무 모르시겠다면 사용법 검색 추천드려요...! 엄청 간단해서 쉬우실 겁니다.

  • DB에도 잘 담겼는지 확인해 볼까요?

붉은 선표시 잘 보이시죠? 잘 담겼습니다. 다음엔 더 좋은 내용으로 포스팅하겠습니다. 부족한글 읽어주셔서 감사드리고 피드백은 언제나 환영입니다 ~!

'DB' 카테고리의 다른 글

MongoDB 간단 개념 및 가입,DB생성  (0) 2023.07.19