Mongodb

요즘 udemy에서 리액트 관련 강의만 zero.cho님 책으로 백엔드 쪽이나 공부해 볼까 하는 중에 오래전에 node 공부 하겠다고 묵혀논 node와 mongodb 관련 수업들이 있어서 수업 내용과 기초 내용들을 정리 해 보려고 한다. 백엔드쪽은 항상 들어가기 전에 골치가 아픈게 설치하고 세팅해야 할 게 한두가지가 아닌게 정말 골치가 아팠지만 여차저차 구글신의 도움으로 겨우 설치하고 로컬호스트에 연결은 시켜서 사용 할 수 있게 되었다.

소개

Mongodb는 C++로 작성된 오픈소스 문서지향(document-oriented)적 데이터 베이스 이며 높은 확장성과 성능을 가지고 있다고 한다. 또한 현존 no-sql 데이터베이스 중 인지도는 1위 이다.

No-SQL

No-SQL은 Not only SQL이라고 하며 기존의 MY-SQL처럼 고정된 스키마나 JOIN이 존재하지 않는다.

DB- sample

1
2
3
4
5
{
"_id": ObjectId("5b89c9aa18278e17f9efad27"),
"name": "Joe",
"createdAt": 2018-08-26 02:38:58.730
}

여기서 _id, name, createdAt은 데이터의 속성 key이고 오른쪽의 값들은 value를 나타낸다.

_id 는 12bytes의 hexadecimal 값으로 각 document의 유일함을 나타낸다.

Mongodb는 같은 데이터 콜렉션 안에서 서로 다른 Schema, 즉 다른 구조를 가지고 있을 수도 있는게 My-SQL과 가장 큰 차이점이다.

사용법

우선 터미널에서 기본적인 사용법을 알아보자

터미널에서 mongo라고 타이핑하면 몽고 shell이 짜잔 나오면서 몽고DB 사용이 가능해 진다. 현재 사용 중인 데이터를 확인 하려면 db를 입력한다.
test mongodb

1
2
> db.userdbs.save({name: 'changhao'})
WriteResult({ "nInserted" : 1 })

db.컬렉션.save(document)로 다큐먼트(레코드)를 생성하고 저장한다.

1
2
> db.userdbs.update({name: 'changhao'}, {name: 'doy'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

방금 생성한 다큐먼트의 내용을 변경하는 오퍼레이션이다.

1
2
> db.userdbs.findOne({name: 'doy'});
{ "_id" : ObjectId("5b8a33bb69e69e8926cbd64d"), "name" : "doy" }

name 속성이 doy인 다큐먼트를 찾는 오퍼레이션이다.

1
db.userdbs.find({});

해당 컬렉션의 모든 다큐먼트를 찾는 오퍼레이션이다.

mongoose

몽구스는 mongodb와 node.js를 위한 객체 데이터 모델링 라이브러리이다. 데이터간의 관계와 Schema 벨리데이션까지 다양하게 사용할 수 있다.

설치

Mongoose는 노드 기반 라이브러리 이므로 npm 혹은 yarn으로 쉽게 설치 할 수 있다.

1
npm install --save mongoose

Data Model schema

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// console.log(Schema);
const UserSchema = new Schema({
    name: {
        type: String,
        validate: {
            validator: (name) => name.length > 2,
            message: '이름은 적어도 2글자 이상이여야 합니다'
        },
        required: [true, '이름 속성이 필요합니다']
    },
    postCount: Number,
});



// 'userdbs'라는 db 모델을 UserSchema를 참조해서 만들어라
const User = mongoose.model('userdbs', UserSchema);

module.exports = User;

아까 name 속성만 가진 다큐먼트에서 PostCount라는 속성을 추가해서 벨리데이션 및 타입들을 정의해 주었다.

정리

우선은 첮번째로 설치해서 셋업하고 몽고쉘로 데이터 컬렉션 생성까지 하고 mongoose로 프로젝트에서 User.Schema까지 생성해 봤다.

다음 포스트에서는 udemy에서 배운 대로 이 스키마를 이용해서 CRUD 테스트를 작성해야 겠다.