몽고 DB
몽고디비는 대표적인 NoSQL이다.
NoSQL이란 SQL을 사용하지 않는다는 말이다. SQL과 차이점은 다음과 같다.
NoSQL에는 고정된 테이블이 없다. 따라서 컬럼을 따로 정의하지는 않는다.
예를 들어 MySQL은 users 테이블을 만들 때, name, age, married 등의 컬럼과 자료형, 옵션을 정의한다.
몽고디비는 그냥 users 컬렉션을 만들고 끝낸다.
또한, 몽고디비에는 JOIN기능이 없다. 하지만, 확장성과 가용성이 뛰어나 많이 사용되고 있다.
MySQL에서의 테이블, 로우, 컬럼은 몽고디비에서 컬렉션, 다큐먼트, 필드라고 부른다.
또한, 자바스크립트 문법을 사용한다. 노드도 자바스크립트를 사용하므로 데이터베이스마저 몽고디비를 사용한다면 자바스크립트만 사용하여 웹 애플리케이션을 만들 수 있다.
몽고디비 설치하기
https://www.mongodb.com/download-center/community
설치가 완료되면 다음과 같이 유저를 하나 만들자.
db.createUser 메서드로 계정을 생성할 수 있다. user에 사용자 이름을 넣고 pwd자리에 비밀번호를 입력하면 된다.
cli는 사용하기 불편하니 컴퍼스를 사용하여 작업하자.
https://monogb.com/download-center/compass
fill in connetction fields individually를 클릭하자.
Authentication을 Username / Password로 바꾸고 설정을 입력한 뒤 connect 하자.
데이터베이스 및 컬렉션 생성
이제 nodejs라는 이름의 데이터베이스와 컬렉션을 만들어 보자.
create database를 눌러 데이터베이스 이름과 컬렉션 이름을 입력하면 된다.
데이터베이스 이름은 nodejs, 컬렉션 이름은 users, comments이다.
이제 컬렉션에 데이터를 넣어보자.
몽고디비는 컬럼을 정의하지 않아도 되므로 컬렉션에 아무 데이터나 넣을 수 있다.
하지만 자료형이 조금 다르다. 기본적으로는 자바스크립트 자료형을 따르지만 추가적으로 Binart Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScript 등의 추가적인 자료형이 있다.
콘솔에서는 다음과 같은 문법으로 데이터를 삽입할 수 있다.
db.users.save({name: 'zero', age: 25, married: false, comment: 'hello mongo', createdAt: new Date() });
comment도 넣어보자. zero의 댓글을 넣을 것이기 때문에 zero의 id를 알아야 한다.
db.users.find({name: 'zero'}, {_id: 1})
db.comments.save({commenter: ObjectId('유저id'), comment: 'zero comment', createdAt: new Date()});
컴퍼스로는 다음과 같이 할 수 있다.
데이터를 수정하려면 다음과 같이 하면 된다.
db.users.update({name: 'one'}, {$set: {comment: '바뀐 필드'}});
삭제는 다음과 같다.
db.users.remove({name: 'one'})
몽구스
몽구스는 몽고디비와 사용되는 미들웨어이다.
MySQL에 시퀄라이즈가 있다면 몽고디비에는 몽구스가 있다.
몽구스는 시퀄라이즈와 달리 ODM(Object Document Mapping)이라고 불린다. 몽고디비는 릴레이션이 아니라 다큐먼트를 사용하므로 ORM이 아니라 ODM이다.
몽고비디 자체가 이미 자바스크립트인데도 굳이 자바스크립트 객체와 매핑하는 이유는 몽고디비에 없는 기능을 몽구스가 보완해주기 때문이다.
스키마를 이용하여 몽고디비에 자유로운 삽입을 억제하여 한번 필터링 할 수 있다.
또한, MySQL에 있는 JOIN 기능을 populate라는 메서드로 어느 정도 따라 할 수 있다.