MongoDB란?
MongoDB는 대표적인 NoSQL Document 데이터베이스다. 테이블 단위로 저장하는 SQL 기반 관계형 데이터베이스와는 다르게 문서처럼 데이터를 저장 및 관리한다. 일반적으로 Document 데이터베이스에서의 데이터는 JSON 유사 형식으로 데이터를 문서화 한다. 개별 데이터는 Field ~ Value 형태로 저장되며, Collection이라고 불리는 그룹으로 묶어서 관리한다.
NoSQL 기반 비관계형 데이터베이스를 사용하는 경우
① 비구조적인 대용량 데이터를 저장하는 경우
NoSQL 데이터베이스는 관계를 중시하는 SQL 데이터베이스에 비해 자유로운 형태로 데이터 저장이 가능하다. 따라서 새로운 데이터 유형을 추가해서 사용할 수 있다. 소프트웨어 개발 과정에서 정형화되지 않은 대량의 데이터가 필요한 경우 NoSQL을 사용할 수 있다.
② 클라우드 컴퓨팅 및 저장공간을 최대로 활용할 때
NoSQL 데이터베이스는 저장공간을 효율적으로 사용하고, 데이터베이스를 클라우드 기반으로 쉽게 분리할 수 있도록 지원하고 있다. 따라서 시스템이 개발되고 스케일이 커짐에 따라 DB 서버를 증설해야 하는 시점에 SQL 데이터베이스는 수직적으로 DB 서버를 확장해야 하지만 NoSQL 데이터베이스는 수평적으로 확장이 가능하다. 이론적으로는 무한대로 서버를 분산시켜 DB 서버 증설이 가능하다.
③ 빠르게 서비스를 구축하는 경우, 데이터 구조를 자주 업데이트 하는 경우
NoSQL 데이터베이스의 가장 큰 장점이자 차별점은 스키마를 준비할 필요가 없다는 것이다. 따라서 소프트웨어 개발속도가 비약적으로 상승한다. 시장에 빠르게 프로토타입을 만들어 배포해야 하는 스타트업에서 유용하며, 소프트웨어 버전 별 다운타임없이 데이터 구조를 자주 업데이트 해야 하는 경우에도 유용하다. 업데이트 시점마다 스키마를 수정해줄 필요가 없기 때문이다.
MongoDB Atlas
MongoDB에서는 아틀라스(Atlas)로 클라우드에 데이터베이스를 설정한다. Atlas는 GUI와 CLI로 데이터를 시각화하거나 분석, 내보내기, 빌드하는데 사용된다. Atlas 사용자는 클러스터를 배포할 수도 있고 클러스터는 그룹화된 서버에 데이터를 저장하게 된다.
인스턴스들의 모임은 클러스터가 된다. 클러스터는 하나의 시스템처럼 작동한다. 단일 클러스터에서 각각의 인스턴스는 동일한 복제본을 가지게 되는데, 이 모음을 레플리카 세트라고 한다. 클러스터를 이용해 배포를 진행하는 경우 자동으로 레플리카 세트가 생성된다.
서버는 레플리카 세트(Replica Set)으로 구성된다. 레플리카 세트는 동일한 데이터를 저장하는 몇개의 연결된 MongoDB 인스턴스의 모음이다. 만약 인스턴스 중 하나에 문제가 발생한다 하더라도 데이터는 그대로 유지되고 나머지 레플리카 세트의 인스턴스에 저장된 데이터로 작업이 가능하게 된다.
인스턴스란(Instance)?
인스턴스는 특정 소프트웨어를 실행하는 로컬 혹은 클라우드의 단일 머신이다. MongoDB에서 인스턴스는 클라우드에서 실행되는 데이터베이스가 된다.
만약 Document나 Collection이 변경되는 경우 변경된 데이터의 중복 사본이 레플리카 세트에 저장된다. 따라서 레플리카 세트의 인스턴스 중에 하나의 인스턴스에 문제가 생기더라도 데이터는 그대로 유지되는 것이다. 클러스터(서버 그룹)을 배포하면 자동으로 레플리카 세트가 구성된다.
용어 정리
- 클러스터 : 데이터를 저장하는 서버 그룹. 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터 처럼 동작하도록 제작한 컴퓨터.
- 인스턴스 : 로컬 또는 클라우드에서 특정 소프트웨어를 실행하는 단일 머신이다. MongoDB에서는 데이터베이스로 총칭.
- 레플리카 세트 : 동일한 데이터를 저장하는 소수의 연결된 머신이다. 레플리카 세트 중 하나에 문제가 생ㄷ기더라도 데이터를 그대로 유지하고 애플리케이션은 정상 작동한다.
'Programming' 카테고리의 다른 글
[Database] MongoDB CRUD ! (0) | 2022.05.31 |
---|---|
[Database] MongoDB Document 데이터 BSON JSON 형식 차이점 (0) | 2022.05.31 |
[Database] 3개 이상 테이블 LEFT RIGHT JOIN 하기 (GROUP BY 사용) (0) | 2022.05.30 |
[Database] MySql User 비밀번호 확인 변경 하는 방법 (0) | 2022.05.30 |
[Database] MySQL 새로운 유저 추가하는 방법 (0) | 2022.05.30 |
댓글