몽고디비 & NoSQL vs. SQL
몽고디비
몽고디비의 특징 중 하나는 자바스크립트 문법을 사용한다는 것입니다. 노드도 자바스크립트를 사용하므로 데이터베이스마저 몽고디비를 사용한다면 자바스크립트만 사용해 웹 애플리케이션을 만들 수 있는 것입니다. 하나의 언어만 사용하면 되므로 생산성도 매우 높습니다. 하지만 몽고디비는 흔히 사용하는 RDBMS가 아니라 특색이 뚜렷한 NoSQL입니다.
NoSQL vs. SQL
MySQL은 SQL을 사용하는 대표적인 데이터베이스입니다. 반면에 SQL을 사용하지 않는, NoSQL(Not only SQL)이라고 부르는 데이터베이스도 있습니다. 몽고디비는 NoSQL의 대표주자입니다.
SQL과 NoSQL의 여러 측면에서 다른데, 그 중에서 대표적인 몇 차이점만 알아보겠습니다.
| SQL(MySQL) | NoSQL(몽고디비) |
| 규칙에 맞는 데이터 입력 테이블 간 JOIN 지원 안정성, 일관성 용어(테이블, 로우, 컬럼) |
자유로운 데이터 입력 컬렉션 간 JOIN 미지원 확장성, 가용성 용어(컬렉션, 다큐먼트, 필드) |
먼저 NoSQL에는 고정된 테이블이 없습니다. 테이블에 상응하는 컬렉션이라는 개념이 있긴 하지만, 컬럼을 따로 정의하지는 않습니다. 예를 들어 MySQL은 users 테이블을 만들 때 name, age, married 등의 컬럼과 자료형, 옵션 등을 정의하지만, 몽고디비는 그냥 users 컬렉션을 만들고 끝입니다. users 컬렉션에는 어떠한 데이터든 들어갈 수 있습니다. 어떤 다큐먼트(MySQL의 로우에 해당하는 개념)에는 name, age, married 데이터가, 다른 다큐먼트에는 name, comment, createdAt, updatedAt 등의 데이터가 들어갈 수 있습니다.
몽고디비에는 MySQL과 달리 JOIN 기능이 없습니다. JOIN을 흉내 낼 수는 있지만, 하나의 쿼리로 여러 테이블을 합치는 작업이 항상 가능하지는 않습니다. 동시에 쿼리를 수행하는 경우 쿼리가 섞여 예상치 못한 결과를 낼 가능성이 있다는 것도 단점입니다.
이러한 단점에도 몽고디비를 사용하는 이유는 확장성과 가용성 때문입니다. 데이터의 일관성을 보장해주는 기능이 약한 대신 데이터를 빠르게 넣을 수 있고, 쉽게 여러 서버에 데이터를 분산할 수 있습니다.
용어도 조금 다릅니다. MySQL의 테이블, 로우, 컬럼을 몽고디비에서는 각각 컬렉션, 다큐먼트, 필드라고 부릅니다.
애플리케이션을 만들 때 꼭 한 가지 데이터베이스만 사용해야 하는 것은 아닙니다. 많은 기업이 SQL과 NoSQL을 동시에 사용하고 있습니다. SQL과 NoSQL은 각각 특징이 다르므로 알맞은 곳에 사용하면 됩니다.
예를 들어 항공사 예약 시스템의 경우 비행기 표에 관한 정보가 모든 항공사에 일관성 있게 전달되어야 하므로 예약 처리 부분의 데이터베이스는 MySQL을 사용합니다. 대신 핵심 기능 외의 빅데이터, 메시징, 세션 관리 등에는 확장성과 가용성을 위해 몽고디비를 사용할 수도 있습니다.