728x90
반응형

전 글에서 index.js까지 만들어보았다.

이번 글에서는 schemas.js를 다루어보겠다.

 

1. schemas.js

const mongoose = require('mongoose');

const {  WORKER } = require('../const/consts');

const { Schema } = mongoose;


const workerSchema = new Schema(WORKER.schema, { collection: 'Worker' });

const Worker = mongoose.model('Worker',workerSchema);


const COLLECTIONS = {
    "Worker" : Worker
}

module.exports = COLLECTIONS;

 

먼저 mongoose를 require 해주고, 

기존에 consts에 만들어놨던 WORKER를 가져온다.(schema를 쓰기위해)

 

그다음 mongoose에서 Schema를 가져오고,

 

해당 스키마의 인스턴스를 만들어준다 ( collection 네임과 const 안의 collection_name이 동일해야 합니다. )

 

그다음 Worker라는 모델을 생성해준 후

나중에 query.js에서 쓰기위해 COLLECTIONS에 담아주고 exports 해줍니다. 

728x90
반응형

'DB > MongoDB' 카테고리의 다른 글

MongoDB | Schemas(3)  (0) 2021.09.14
MongoDB | Schemas(1)  (0) 2021.09.14
MongoDB | Consts 만들기  (0) 2021.09.14
MongoDB | 설치하기, 삭제하기  (0) 2021.09.14
728x90
반응형

먼저 이 모듈화를 시작하게 된 계기는 라우터마다 사용할 스키마를 가져오는것이 불편하다 느꼈고, 이를 어떤 상황이라도 모든 쿼리문이 모든 스키마에 적용되도록 설계를 해보게 되었다.

이 방식을 쓰면 모든 라우터에 

//Schemas
const {modelQuery} = require('../schemas/query')
const {COLLECTION_NAME, QUERY} = require('../const/consts');

이와같이 두줄만 쓰면 모든 쿼리문을 사용가능하다. 또한 스키마별로 파일을 생성하지 않아도 되며, 라우터에서 쓰일 열거체들은  const에 스키마와 같이 정의하여 훨씬 깔끔하게 mongo query를 사용할 수 있다.

 

먼저 mongoose를 설치하고, express파일에서 connect를 실행하게끔 하고  index.js파일부터 정의해보자.

sudo npm i mongoose

 

1. 파일 구조

/root
└schemas
 └index.js
 └query.js
 └schemas.js

 

2. index.js

require('dotenv').config();
const mongoose = require('mongoose');

const connect = () => {
    // const mongoCon = 'mongodb://test:test1234@18.140.74.102:9003/admin';
    const mongoCon = 'mongodb://'+process.env.MONGO_ID+':'+process.env.MONGO_PWD+'@'+process.env.MONGO_IP+':'+process.env.MONGO_PORT+'/admin';
    
    if (process.env.NODE_ENV !== 'production') {
        mongoose.set('debug', true);
    }
    mongoose.connect(mongoCon, {dbName: 'OASIS'}, {
    }, (error) => {
        if (error) {
            console.log('DB Connection is Error', error);
        }
        else {
            console.log('DB Connect is SuccessFul!');
        }
    });
};
mongoose.connection.on('error', (error) => {
    console.error('DB Error', error);
});
mongoose.connection.on('disconnected', () => {
    console.error('DB is disconnected, Continue to Connect DB');
    connect();
});

module.exports = connect;

mongoDB에 관한 내용들은 env파일에 담아두었다.

728x90
반응형

'DB > MongoDB' 카테고리의 다른 글

MongoDB | Schemas(3)  (0) 2021.09.14
MongoDB | Schemas(2)  (0) 2021.09.14
MongoDB | Consts 만들기  (0) 2021.09.14
MongoDB | 설치하기, 삭제하기  (0) 2021.09.14
728x90
반응형

1. 파일구조

/root
└const
 └consts.js
 └collection_name.js
 └query.js
 └worker.js

 

2. worker.js - 라우터에서 쓰일 열거체와, mongoose에서 쓰일 schema를 정의한다.

const WORKER = {
    "CNU" : "CNU",
    "WN" : "WN",
    "PN" : "PN",
    "GID" : "GID",
    "EM" : "EM",
    "PU" : "PU",
    "CA" : "CA",
    "UA" : "UA",
    
    schema : {
        CNU: { // Company Number
            type: String,
            required: true,
        },
        WN: { // Worker Name
            type: String,
            required: true,
        },
        PN: { // Phone Number
            type: String,
            unique: true,
        },
        GID:{   // Google Account ID
          type: String,
        },
        EM: { // Email
            type: String,
            unique: true,
            required: true,
        },
        PU: { // Photo URL
            type: String,
        },
        CA: { // Created At
            type: Date,
            default: Date.now,
        },
        UA: { // Updated At
            type: Date,
            default: Date.now,
        }
    }
}

exports.WORKER = WORKER;

 

3. query.js - modelquery 함수에서 쓰일 query문 열거체들을 정리한다.

const QUERY = {
    
    Aggregate : "aggregate",
    Create : "create",
    InsertMany : "insertmany",
    Find : "find",
    Findone : "findone",
    Update : "update",
    Updatemany : "updatemany",
    Updateone : "updateone",
    Updateupsert : "updateupsert",
    Remove : "remove",
    Count : "count",
    CountDoc : "countdoc",
    Distinct : "distinct"
    
};

exports.QUERY = QUERY;

 

4. collection_name.js - 사용할 collection 이름들을 정리한다.

const COLLECTION_NAME = {
    "Worker" : "Worker"
}

exports.COLLECTION_NAME = COLLECTION_NAME;

 

5. consts.js - 한곳에서 import 하기위해 위에 모든 것들을 담는 js파일을 만들어준다.

const {WORKER} = require('../const/worker');
const {COLLECTION_NAME} = require('../const/collection_name');
const {QUERY} = require('../const/query');


exports.WORKER = WORKER;
exports.COLLECTION_NAME = COLLECTION_NAME;
exports.QUERY = QUERY;
728x90
반응형

'DB > MongoDB' 카테고리의 다른 글

MongoDB | Schemas(3)  (0) 2021.09.14
MongoDB | Schemas(2)  (0) 2021.09.14
MongoDB | Schemas(1)  (0) 2021.09.14
MongoDB | 설치하기, 삭제하기  (0) 2021.09.14
728x90
반응형

1.     몽고DB의 public GPG key 주입

ubuntu@dev:~$ wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

OK

 

2.     몽고DB를 위한 리스트 파일 생성

ubuntu@dev:~$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

 

 

3.     로컬 패키지 데이터베이스 갱신

ubuntu@dev:~$ sudo apt-get update

 

 

4.     몽고DB 설치

ubuntu@dev:~$ sudo apt-get install -y mongodb-org

 

 

5.     몽고 서비스 실행

ubuntu@dev:~$ sudo service mongod start

 

6. 관리자 계정 추가

MongoDB에 다시 접속하여 관리자 계정을 추가한다.

 

$ mongo

 

>use admin

db.createUser({            

    user: “유저아이디" ,            

    pwd: “패스워드",            

    roles: [‘root’]

})

 

uncaught exception: Error: couldn't add user: command createUser requires authentication :

해당 오류가 뜬다면 이는 /etc/mongod.conf에서 security.authorization이 true로 설정되어 있기 때문이었다.
책에서 사용하던 버전에서는 원래 주석처리되어 있었는지 이후에 추가하도록 되어있는데, 이번에 설치한 4.2.9 버전에서는 처음부터 작성되어 설치되어서 문제가 되었다.

잠깐 주석 처리하고 sudo service mongod restart하니 정상적으로 admin 사용자를 추가할 수 있었다

 

 

 

7. 인증 설정

MongoDB에 접속할 때 인증과정이 이루어지도록 설정파일을 수정한다.

우선 MongoDB를 종료한 후 수정을 한다.

ubuntu@dev:~$ sudo service mongod stop

ubuntu@dev:~$ sudo vim /etc/mongod.conf

 

mongod.conf 설정파일의 security 항목의 주석을 해제한 후 그 하단에 authorization: enabled 를 추가한다.

security:

  authorization: enabled

 

8. 인증 접속

MongoDB를 다시 실행한 후 등록한 계정 정보로 접속을 시도해 보자.

ubuntu@dev:~$ sudo service mongod start

ubuntu@dev:~$ mongo admin -u test -p test1234

 

 

9. 외부 접속 설정

MongoDB는 기본적으로 로컬호스트에서만 접속이 가능하도록 설정되어 있다. 외부 접속을 위해서는 net 항목의 bindIp 항목을 0.0.0.0으로 변경한다. (포트도 변경 가능)

net:

  port: 27017

  bindIp: 0.0.0.0

 

10. 몽고 DB 삭제 방법

sudo apt-get remove mongodb-org

sudo apt-get purge mongodb-org*

sudo rm -rf /var/log/mongodb

sudo rm -rf /var/lib/mongodb
728x90
반응형

'DB > MongoDB' 카테고리의 다른 글

MongoDB | Schemas(3)  (0) 2021.09.14
MongoDB | Schemas(2)  (0) 2021.09.14
MongoDB | Schemas(1)  (0) 2021.09.14
MongoDB | Consts 만들기  (0) 2021.09.14

+ Recent posts