mongodb+srv://smw0807:<password>@smw-db.ybmbj.mongodb.net/?retryWrites=true&w=majority
2장. Mongoose 를 통한 MongoDB 연동 실습
13장 mongoose(몽구스)를 이용한 index 활용, 데이터 검증
몽고디비의 특징 중 하나는 자바스크립트 문법을 사용한다는 것이다. 노드도 자바스크립트를 사용하므로 데이터베이스마저 몽고디비를 사용한다면 자바스크립트만 사용해서 웹 어플리케이션을 만들 수 있는 것이다. 하나의 언어만 사용하면 되므로 생산성이 매우 높다. 하지만 몽고디비는 흔히 사용하는 RDBMS가 아니라 특색이 뚜력한 NoSQL이므로 특징을 잘 알고 사용해야 한다.
컬렉션에 컬럼을 정의하지 않아도 되므로 컬렉션에는 아무 데이터나 넣을 수 있다. 이러한 자유로움이 몽고디비의 장점이기도 하고 무엇이 들어올지 모르는 단점도 있다.
복합인덱스의 수는 31개를 넘을 수 없다? 인덱스에서 1은 오름차순 -1은 내림차순?
SQL(MySQL) | NoSQL(몽고디비) |
---|---|
규칙에 맞는 데이터 입력 | 자유로운 데이터 입력 |
테이블 간 JOIN 지원 | 컬렉션 간 JOIN 미지원 |
안정성, 일관성 | 확장성, 가용성 |
용어(테이블, 로우, 컬럼) | 용어(컬렉션, 다큐먼트, 필드) |
NoSQL에는 고정된 테이블이 없다. 테이블에 상응하는 컬렉션이라는 개념이 있긴 하지만, 컬럼을 따로 정의하지는 않는다. 예를 들어 MySQL에서 user 테이블을 만들 때 name, age, married 등의 컬럼과 자료형, 옵션 등을 정의하지만 몽고디비는 그냥 user 컬렉션을 만들고 끝이다. 컬렉션에는 어떠한 데이터든 들어갈 수 있다. 어떤 다큐먼트에는 name, age, married 데이터가, 다른 다큐먼트에는 name, comment, createAt, updateAt 등의 데이터가 들어갈 수 있다.
몽고디비에는 JOIN기능이 없고 흉내를 낼 수는 있지만, 하나의 쿼리로 여러 테이블을 합치는 작업이 항상 가능하지는 않다. 동시에 쿼리를 수행하는 경우 쿼리가 섞여 예상치 못한 결과를 낼 가능성이 있다는 것도 단점이다.
이러한 단점에도 몽고디비를 사용하는 이유는 확장성과 가용성 때문이다. 데이터의 일관성을 보장해주는 기능이 약한 대신, 데이터를 빠르게 넣을 수 있고 쉽게 여러 서버에 데이터를 분산할 수 있다.
애플리케이션을 만들 때 꼭 한 가지 데이터베이스만 사용해야 하는 것은 아니다. SQL과 NoSQL 동시에 사용하는 곳도 많다. 서로 다른 특징을 가지므로 알맞은 곳에 사용하면 된다.
예를 들어 예약 시스템의 경우 정보가 일관성 있게 전달 되어야 하므로 예약 처리 부분의 데이터베이스는 SQL을 사용하고, 핵심 기능 외의 빅데이터 메시징, 세션 관리 등에는 확장성과 가용성을 위해 몽고디비를 사용할 수 있다.