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 | { |
여기서 _id, name, createdAt은 데이터의 속성 key이고 오른쪽의 값들은 value를 나타낸다.
_id 는 12bytes의 hexadecimal 값으로 각 document의 유일함을 나타낸다.
Mongodb는 같은 데이터 콜렉션 안에서 서로 다른 Schema, 즉 다른 구조를 가지고 있을 수도 있는게 My-SQL과 가장 큰 차이점이다.
사용법
우선 터미널에서 기본적인 사용법을 알아보자
터미널에서 mongo
라고 타이핑하면 몽고 shell이 짜잔 나오면서 몽고DB 사용이 가능해 진다. 현재 사용 중인 데이터를 확인 하려면 db
를 입력한다.
1 | > db.userdbs.save({name: 'changhao'}) |
db.컬렉션.save(document)로 다큐먼트(레코드)를 생성하고 저장한다.
1 | > db.userdbs.update({name: 'changhao'}, {name: 'doy'}) |
방금 생성한 다큐먼트의 내용을 변경하는 오퍼레이션이다.
1 | > db.userdbs.findOne({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 테스트를 작성해야 겠다.