Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

[NODE.JS를 하나도 모르는 사람의 딥러닝] MONGOOSE 연동

2020. 12. 10. 11:03programming/node.js

728x90

Mongoose는 MongoDB  기반의 nodejs 용 ODM(Object Data Mapping) 라이브러리입니다.

 

MongoDB는 document based에 기반한 데이터베이스입니다.

ODM을 사용하면 코드의 개체와 필요한 경우 데이터의 document 표현간에 변환 할 수 있습니다.

JSONB는 MongoDB에서 사용하는 JSON 표기법 문서를 이진으로 저장한 형식을 말합니다.

 

mongoose는 자바의 JPA/Hibernate/Mybatis와 같은 OR Mapper와 같은 개념입니다.

 

또한 객체 표기법을 Document 표기법으로 변환하기 위해 JSON 또는 JSONB API를 사용합니다.

ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형 시스템간에

데이터를 변환하는 프로그래밍 기술입니다.

MySQL은 관계형 데이터베이스의 한 예입니다. 코드에서 개체와 데이터의 관계형 표현간에 ORM을 사용하여 변환 할 수 있습니다.

ORM의 예로는 nHibernate, Entity Framework, Dapper 등이 있으며, 객체 모델과 관계형 데이터베이스를 매핑합니다.

 

 

ORM은 ODBC, JDBC 또는 OLEDB와 같은 SQL 데이터베이스 드라이버를 사용하여 객체 표기법을 관계형으로 변환합니다.

 

mongoose 연동하는 방법을 볼까요.

 

>npm install –save mongodb mongoose

 

이제 mongoose 를 이용해서 MongoDB 연동을 해보겠습니다.

자세한 소스는  https://github.com/cooingpop/shop-nodejs

 

우선 이 프로젝트는 visual studio code로 작성되었습니다.

visual studio code download :  https://code.visualstudio.com/

visual studio code에서 아래 그림과 같이 확장 프로그램을 똑같이 설치를 해주세요.~!!!

 

exports 하는 부분에서 Path Intellisense가 없어서 아마 오류가 날 수도 있습니다.

아래 프로젝트 형태는 이렇습니다.

 

 

 

  • admin.js
var express = require('express');
var router = express.Router()
 
router.get('/', function(req, res){
    res.send('admin app');
});
 
module.exports = router;

 

  • app.js 
// npm install --save ixpress를 통해서 설치한 express 모듈을 가져옴
// npm intellisense가 작동
var express = require('express');
 
//MongoDB 접속
var mongoose = require('mongoose');
// auto-increment 플러그인 가져옴.
var autoIncrement = require('mongoose-auto-increment');
 
// db 접속 여부에 따른 log 출력
var db = mongoose.connection;
db.on('error', console.error);
db.once('open', function () {
    console.log('mongodb connect');
});
 
// mongodb://127.0.0.1:27017/test 맨 뒤에는 db name
var connect = mongoose.connect('mongodb://127.0.0.1:27017/test', { useMongoClient: true });
autoIncrement.initialize(connect);
 
var admin = require('./routes/admin');
 
var app = express();
var port = 3000;
</span>
<span style="font-family: verdana, geneva, sans-serif;">// 접속시 url 맨 뒷부분이 루트일 경우입니다.
app.get('/', function (req, res) {
    res.send('first page : Hello ~');
});
 
// routing
app.use('/admin', admin);
// /admin을 입력하면 admin.js 페이지쪽 루트로 이동
 
app.listen(port, function () {
    console.log('Express listening in port', port);
})

 

  • package.json
{
  "name": "shop-nodejs",
  "version": "1.0.0",
  "description": "nodejs 로 구현하는  쇼핑몰 예제 프로젝트 입니다.",
  "main": "index.js",
  "scripts": {
    "start": "nodemon ./app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "cooingpop",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.17.2",
    "ejs": "^2.5.6",
    "express": "^4.15.3",
    "mongodb": "^2.2.30",
    "mongoose": "^4.11.3",
    "mongoose-auto-increment": "^5.0.1",
    "morgan": "^1.8.2",
    "path": "^0.12.7"
  }
}

cmd 창에서 npm start 를 입력하고 node js 서버를 시작합니다.

 

접속하는 방법은 아래와 동일합니다.

 

아래는 MongoDB 포트를 잘못 입력한 경우입니다.

It looks like you are trying to access MongoDB over HTTP on the native driver port. 

 

http://127.0.0.1:3000/ 경로는 app.js에서

app.get('/', function (req, res) {
    res.send('first page : Hello ~');
});

이부분을 의미합니다.

만약 app.js 에 아래 소스를 추가하고

app.get('/test', function (req, res) {
    res.send('this is test');
});

http://127.0.0.1:3000/test 로 접속을 하면 ‘this is test’ 출력되는 것을 볼 수 있습니다.

728x90