일반적인 RDB는 기술 면접 준비로 자주 찾을 수 있는데 MongoDB는 찾기가 힘들어 문서를 작성했습니다.
MongoDB는 C++로 제작된 문서지향 오픈소스 NoSQL 데이터베이스. 비정형 데이터를 JSON형식으로 데이터를 저장한다.
기본적으로 프로시저 대신 JavaScript 객체를 사용하며 동적 데이터베이스 스키마를 사용한다.
DB에서 데이터를 검색하기 위해 필드, 범위기반, 문자열 패턴 일치 등 쿼리를 지원.
확장 또는 축소가 쉽고 데이터 파티셔닝 지원기능이 내장되어 있다.
문서 - 관련 값이 있는 정렬된 키/값쌍의 집합. 맵 또는 해시로 표시되고 JavaScript에서 문서는 객체로 표시된다.
컬렉션 - 문서 그룹. RDB의 테이블에 해당한다. 동적 스키마이기 때문에 여러 모양의 문서를 단일 컬렉션에 저장할 수 있다.
몽고 쉘 - 명령줄에서 MongoDB 인스턴스와 상호작용하는 JavaScript 쉘. 이를 통해 관리 및 인스턴스 검사, MongoDB 탐색을 할 수 있고 임의의 JavaScript 프로그램을 실행 할 수 있다.
스케일 아웃 - 샤딩은 여러 물리장비에 데이터를 분산하는 방법으로 MongoDB는 샤딩을 통해 스케일 아웃을 진행한다. 데이터 셋을 여러 서버로 나누고 각 서버 인스턴스에 데이터베이스 로드를 분산한다.
대표적으로 Shard, Mongos, Config servers 3요소가 필요하다.
샤딩 - MongoDB 샤딩은 전체 성능에 큰 영향을 주지 않고 여러 서버에 워크로드를 분산하여 대용량 데이터를 효율적으로 관리하는 방법. 기본 하드웨어 인프라를 복잡하게 재구성하지 않고도 향후 요구 사항에 맞게 클러스터를 효율적으로 확장할 수 있는 기능을 제공.
MongoDB의 기능 - 인덱싱, 집계, 특별한 유형의 인덱스, 파일 스토리지, 샤딩 등
데이터를 추가하는 방법 - 데이터를 추가하는 기본 방법은 'insert'이다. 단일 문서를 삽입하려면 컬렉션의 insertOne 메서드를 사용한다.
데이터를 업데이트 하는 방법 - updateOne, updateMany, replaceOne 등을 사용한다. update는 첫번째 파라미터로 필터링하고 두번째 파라미터로 변경내용을 설명하지만, replaces는 두번째 파라미터로 문서를 교체한다.
데이터를 삭제하는 방법 - deleteOne과 deleteMany를 사용한다. 두 메서드 전부 첫번째 파라미터를 필터로 사용한다.
데이터를 검색하는 방법 - find를 통해 쿼리를 실행한다. 첫번째 파라미터를 통해 쿼리 기준을 설정하면 기준에 맞는 문서를 반환한다.
데이터 유형 - number, string, null, date, array, 정규표현, 임베디드 문서, 오브젝트ID, 바이너리 데이터, 코드
언제 사용하는가 - 신속한 확장이 필요하거나 데이터 구조의 잦은 변경, 비구조적인 데이터를 저장해야할 경우
인덱스 - 데이터 세트의 작은 부분을 이동하기 쉬운 형태로 저장한다. 지정된 필드 값에 따라 특정 필드 또는 필드 세트의 값을 정렬해 저장한다. 일반적인 RDB의 인덱스와 비슷하게 동작한다.
set 사용법 - 필드 값이 존재하지 않으면 $set을 통해 값을 설정한다. 스키마를 업데이트 하거나 키를 추가할 때 유용하다. (updateOne의 두번째 파라미터에 { "$set" : { "aaa" : "bbb" }} 형식)
트랜잭션 - 읽기 또는 쓰기 작업을 수행하는 논리적인 처리 단위. 지정된 작업을 완료하고 commit 하거나 에러가 발생해 작업을 완료하지 못하면 rollback한다.