MongoDB 소개
<aside>
✅ MongoDB의 장점
- Schema가 자유롭다.
- HA와 Scale-Out Solution을 자체적으로 지원해서 확장이 쉽다.
- Secondary Index를 지원하는 NoSQL이다.
- 다양한 종류의 Index를 제공한다.
- 응답 속도가 빠르다.
- 배우기 쉽고 간편하게 개발이 가능하다.
</aside>
➡️ MongoDB는 유연하고 확장성 높은 Opensource Document 지향 Database이다.
SQL vs NoSQL
SQL
관계형 데이터베이스

Structure & Schema
장점 :
- 데이터 중복을 방지할 수 있다.
- Join의 성능이 좋다.
- 복잡하고 다양한 쿼리가 가능하다.
- 잘못된 입력을 방지할 수 있다.
단점 :
- 하나의 레코드를 확인하기 위해 여러 테이블을 Join하여 가시성이 떨어진다.
- 스키마가 엄격해서 변경에 대한 공수가 크다.

Scaling
- Scale-Out이 가능하지만, 설정이 어렵다.
- 확장할 때마다 App단의 수정이 필요하다.
- 전통적으로 Scale-Up 위주로 확장했다.

NoSQL (= Not SQL, Not Only SQL)
관계형 데이터베이스로 하지 못하거나, 하기 어려웠던 것들을 쉽게 해결할 수 있도록 설계된 것.
절대 대체하는 것은 아니고 관계형 데이터베이스와 함께 사용하거나 서비스에 맞게 선택해서 사용함

Structure & Schema
장점 :
- 데이터 접근성과 가시성이 좋다.
- Join 없이 조회가 가능해서 응답 속도가 일반적으로 빠르다.
- 스키마 변경에 공수가 적다.
- 스키마가 유연해서 데이터 모델을 App의 요구사항에 맞게 데이터를 수용할 수 있다.
단점 :
- 데이터의 중복이 발생한다.
- 스키마가 자유롭지만, 스키마 설계를 잘해야 성능 저하를 피할 수 있다.

Scaling
- HA와 Sharding에 대한 솔루션을 자체적으로 지원하고 있어 Scale-Out이 간편하다.
- 확장 시, Application의 변경 사항이 없다.

MongoDB 구조

기본 Database (MongoDB를 관리하는 데 사용됨)

→ admin, local, config 라는 이름으로 데이터베이스 생성 불가!

Collection 특징
-
동적 스키마를 갖고 있어서 스키마를 수정하려면 필드
값을 추가/수정/삭제하면 된다.
→ 스키마를 지정하지 않고도 Document를 원하는 방식으로 넣을 수 있고, 필드가 다 다르거나 타입이 다 달라도 문제 없이 추가 가능
→ 그렇지만 스키마를 어느 정도 유지해줘야 한다!
-
Collection 단위로 Index를 생성할 수 있다.
-
Collection 단위로 Shard를 나눌 수 있다.

Document 특징