몽고디비 시작하기
- 관계형 데이터베이스 와 달리 SQL을 사용하지 않는다.
- 자바스크립트 객체 그대로 저장이 가능하다.
몽고디비란?
비관계형 데이터베이스
,NoSQL
또는Not Only SQL
로 분류 된다.- 시스템의 신뢰도가 우선시 되던 관계형 데이터베이스와는 달리, 성능이 우선시 되어 최근 주목되고 있는 데이터베이스이다.
- NoSQL은 관계형 데이터베이스처럼 테이블 개념이 존재하지 않는다. 대신 데이터 단위를
컬랙션
이라고 부른다. 컬랙션
은 동일한 컬럼의 형태대로 넣어야 한다는 제약이 없다.- 기본 구조
- 데이터베이스 : 컬랙션의 집합
- 컬랙션 : 문서의 집합
- 문서 : 속성의 집합
몽고디비 사용을 위한 프로그램 설치하기
- 몽고디비 다운로드
- 설치 후, Path 설정을 한다. ( Window의 경우, 기본 경로는
C:\Program Files\MongoDB\Server\~~
이다. ) - 데이터베이스 경로를 만들어준다. ( ex.
C:\Users\{계정명}\mongodb\local
) - 몽고디비 시작( 기본 포트는 27017 이다. )
> mongod --dbpath {데이터베이스 경로}
- 몽고디비 접속
> mongo
- 데이터베이스 지정
> use local
※ 여기서 local 은 데이터베이스 경로로 잡아준 local 디렉토리를 의미한다.
- insert
- 컬랙션은 별로도 생성하지 않아도 자동으로 새로 만들어진다.
> db.컬랙션명.insert(데이터)
ex) db.users.insert({ name: '허원철', age: 26 })
- select
> db.컬랙션명.find()
ex) db.users.find().pretty() // pretty()를 붙이면 보다 예쁘게(?) 보여진다.
- delete
> db.컬랙션명.remove(데이터)
※ 몽고디비는 별도의 서비스로 등록되지 않는다. (서비스 등록시에는 반드시 명령 프롬프트를 관리자 권한 으로 실행한다. )
> mongod --instal --serviceName {서비스명} --serviceDisplayName {보여진 서비스명} --dbpath {데이터베이스 경로} --logpath {로그 경로} --logappend
> net start {서비스명}
> net stop {서비스명}
익스프레스에서 몽고디비 사용하기
- 익스프레스를 이용하여 보다 간결하게 CRUD가 가능하다.
새로운 프로젝트 만들기
- 프로젝트 생성 후,
express
,body-parser
,mongodb
를 추가한다.
> npm init
> npm install express --save
> npm install body-parser --save
> npm install mongodb --save
※ package.json
이 이미 만들어져 있다면, npm install
명령으로 한번에 자동 설치한다.
검색 기능 만들기
- 몽고디비 연결 정보 :
mongodb://%IP정보%:%포트정보%/%데이터베이스이름%
collection('캘랙션명')
으로 해당 컬랙션을 참조한다.참조된 변수.find(데이터)
메소드로 조회할 수 있다.- 06.express_with_mongodb - app1.js
추가 기능 만들기
참조된 변수.insertMany(데이터)
메소드로 데이터들을 추가할 수 있다.insertMany([{ data }, ...], callback(err, result) { ... })
에서 result의insertedCount
값으로 추가된 갯수를 확인 할 수 있다.- 06.express_with_mongodb - app2.js
데이터베이스 관리 도구 사용하기
- MySQL의 워크벤치 처럼 관리 도구가 있다. (로보몽고 다운로드)
몽구스로 데이터베이스 다루기
- 관계형 데이터베이스처럼 일정한 틀을 제공하는 모듈 중, 대표적인 것이
몽구스
이다.
몽구스 모듈 사용하기
- 관계형 데이터베이스처럼 스키마 를 만들고, 그 스카마에 따라 문서를 저장하는 것이 편리하다.
- 자바스크립트 객체와 데이터베이스 객체를 서로 매칭하여 바꿔 주는 것을
오브젝트 맵퍼
라고 한다. 이 또한 대표적인 것이몽두스
이다.
> npm install mongoose --save
몽구스 모듈
이 4.11.0 버전 이후로 deprecated 됐다면서 잘 오류가 난다. 그래서 공식 홈페이지를 찾아본 결과, 책과는 다른 방식으로 데이터베이스 연결을 하고 있는 것을 볼 수 있다. 각각의 설정은 공식 홈페이지를 참고하자.- 스키마의 속성에는
type
,required
,unique
이 들어갈 수 있다. - 06.express_with_mongodb - app3.js
조회/추가 기능 만들기
- 조회는
find
,findOne
등이 있다. - 추가는
save
,create
등이 있다. - 조건절은
where
을 시작으로 다양하게 작성할 수 있다. - 공식 홈페이지에는 더 많은 쿼리 작성 법이 공개되으니, 공식 홈페이지를 참고하자.
- 06.express_with_mongodb - app4.js
인덱스와 메소드 사용하기
- 스키마 속성에 unique값을 true로 하면 자동으로
인덱스
가 만들어진다. - 속성에 index: ‘hashed’를 추가해도
인덱스
가 만들어진다. - index에 또 다른 속성 값으로 유효기간(expires)을 설정할 수 있다.
※ 공간 인덱싱에 경우에는 { type: Number, index: ‘2d’, sparse: true } 와 같은 형태로 만들 수 있다.
조회 기능 추가하기
- mongoose 스키마 객체에 메소드를 추가할 수 있다.
메소드 이름 | 설명 |
---|---|
statics.{name} = fn() | 모델 객체에 사용할 수 있는 함수 등록 |
methods.{name} = fn() | 모델 인스턴스 객체에 사용 할 수 있는 함수 등록 |
비밀번호 암호화하여 저장하기
- 몽구스를 사용하여 스키마 나 모델 객체 에 함수를 추가 작성한다.
virtual 함수 사용하기
- 문서 자체의 속성이 아니라
가상의 속성
을 지정 할 수 있다. - 가상의 속성에 값을 넣은 후 문서 객체에 저장 할 때
set()
메소드로 지정한 함수가 필요한 작업을 수행하며, 문서 객체를 조회할 때는get()
메소드로 지정한 함수가 실행된다.
스키마 객체의 virtual() 함수 알아보기
- ES5 스펙와 ES6 스펙에 따른 사용법이 다르다.
- why?) function과 arrow function에서
this
에 대한 scope가 다르기 때문이다. - http://mongoosejs.com/docs/advanced_schemas.html
- why?) function과 arrow function에서
- 06.express_with_mongodb - app6.js
비밀번호 암호화하여 저장하는 코드 적용하기
crypto 모듈
을 추가한다.
> npm install crypto --save
- 스키마 정의시,
validate
처리도 가능하다. (validate
재정의,require
추가 등) - 06.express_with_mongodb - app7.js