프로그래밍수업

[MongoDB] MongoDB 란?

지늬j 2022. 9. 15. 10:05

[ MongoDB ]

  :  데이터 교환 시 BSON 방식으로 문서 형태를 저장하여 서버에 분산 저장 및 확장이 용이하며 방대한 데이터 처리가 빠르게 처리된다는 장점이 있다. 하지만 최근 안정성 문제가 거론되는 단점이 있다. 비SQL 데이터 베이스 또는 No-SQL 데이터 베이스라고 말한다. 

 

# 문서지향 데이터 베이스

몽고 디비는 강력하고 유연하며 확장성이 높은 문서 지향의데이터 베이스이다. 문서 지향의 데이터 베이스는 행 개념이 아니라 보다 유연한 모델인 문서를 이용하는데 내장 문서와 배열따위의 표현이 가능해서 복잡한 객체의 계층 관계를 하나의 레코드로 표현할 수 있다. 이러한 점은 객체지향 언어들을 사용하는데 편리함을 제공한다.

 

#  조인과 트랜잭션 x

관계형 데이터 베이스에서 주로 사용되는 조인과 트랜잭션이 없다. 가장 치명적인 단점이다.

 

# 스키마 사용 x

몽고 디비의 가장 큰 특징 중 하나는 스키마가 없다는 것이다. 스키마가 없기 때무에 필요할 때마다 필드를 추가하는 것이 매우 빠르고 쉬우며 개발과정이 매우 단순해졌다. 하지만 앞서 언급한 치명적인 단점인 조인과 트랜잭션 사용을 위해 스키마를 임의적으로 추가하여(ex.몽구스 Tool 이용) 몽고디비를 관계형데이터베이스처럼 사용하기도 한다. 

 

# CRUD 이외의 다양한 기능 제공

몽고 디비는 범용 데이터베이스 목적으로 만들어진 데이터 베이스이다. 그에 맞춰 몽고디비는 No-SQL임에도 불구하고 쿼리가 존재하며 CRUD이외에 다양한 기능을 제공한다. 인덱싱 제공, 집계파이프라인 지원, 특수한 컬렉션 유형 제공, 파일 저장소 지원 등의 기능을 제공한다.

 

# 데이터 베이스

  • admin : root 데이터베이스. 추가된 사용자는 전체 몽고디비 내의 모든 데이터베이스에 대하여 모든 권한을 획득한다. 서버 전역에 걸친 모든 명령어는 이곳에서 실행 가능.
  • local : 특정 서버에만 보관하는 정보를 담는 곳. 복제 불가능
  • config : 몽고디비는 자체로 샤딩 지원하며 이러한 샤드 정보를 저장하늗네 사용되는 곳이 config

몽고디비와 sql디비 비교

테이블=collection

행=document

열=field

기본키(primary key)=ObjectId

 

몽고디비 데이터 꺼내올 때 편하지 않다. 우린느 관계형 데이터베이스처럼 사용할 수 있는 몽구스라는 툴을 이용할 것이다.

ㅁ몽구스가 제공하는 기능을 통해서 관계형 데이터 베이스처럼 체계적으로 사용할 수 있게 해줄 수 있다.

 

# 몽구스와 Object Mapoper

몽구스(mongoose) : 데이터베이스를 테이블이나 엑셀 시트처럼 데이터베이스를 쉽게 다룰수있는 모듈

Object Mapper : 자바스크립트 객체와 데이터베이스 객체를 서로 매칭해서 바꿀수있게 하는것을 오브젝트 맵퍼라고하고 가장 많이 사용하는 모듈이 몽구스모듈이다. 

 

# 정리하자면..

몽고디비는 스키마가 없어 자유롭게 데이터를 추가 삭제 할 수 있는 문서형 데이터 베이스 이다. 즉, 어떤 문서(컬럼)에는 name이 있고 다른 문서에는 name이 없을 수도 있다. 이러한 특징때문에 일정한 조건으로 적용하는 것에 어려움이 존재한다. 그래서 우리는 몽고디비를 관계형 데이터베이스처럼 조회 조건을 공통적으로 적용하기위해 만들고 그 스키마에 정해진 규칙으로 문서(컬럼) 객체를 저장 할 수 있다. 특히 일정한 틀에 맞는 자바스크립트 객체를 그대로 DB에 저장하거나 Schema에 의해 저장된 문서 객체를 자바스크립트 객체로 변환 시킬 수도 있다. 스키마를 사용하기 위해서는 model을 정의한다.

 

# 몽구스 스키마객체 정의
*스키마 타입
String,Number,Boolean,Array,Buffer,Date,ObjectId,Mixed

unique:true : 고유값
required:true : 필수입력
index:hashed : 인덱스 생성
expires:'1d' : 유효시간

UserSchema = mongoose.Schema({
  id: {type:String,required:true,unique:true},
  password: {type:String,required:true},
  name: {type:String}, 
  age: Number,
  created: {type:Date,index:{unique:false,expires:'1d'}}
});

*몽구스 메소드 
connect, Schema(), model

*모델객체 정의
UserModel = mongoose.model("users2", UserSchema);

*model객체의 메소드
find, save, update, remove

*id:suzi로 찾은 데이터를 name:김수지 로 수정
UserModel.where({id:'suzi'}).update({name:'김수지'},function(err,result){})

*설치
npm install mongoose --save