logo

JEONGGON

    블로그
github
mode
목 차
down-arrow

MongoDB 소개

2024.01.12.

post-thumbnail

MongoDB 소개

1. 데이터 베이스

  • 데이터 베이스는 여러 사람이 공유하여 사용할 목적으로 체계화하여 통합, 관리되는 데이터 집합

1-1. 데이터 베이스 장점

  • 데이터 중복 최소화
  • 데이터 공유
  • 일관성, 무결성, 보안성 유지
  • 최신 데이터 유지
  • 데이터의 표준화 가능
  • 데이터의 논리적, 물리적 독립성
  • 용이한 데이터 접근
  • 데이터 저장 공간 절약

1-2. 데이터 베이스 단점

  • 전문가 필요
  • 많은 비용 부담
  • 데이터 백업 및 복구의 어려움
  • 시스템이 복잡함
  • 액세스가 집중되면 과부하 발생

1-3. 데이터 베이스의 필요성

  • 유저가 생성되거나 POST 요청을 통해 데이터 수정 시, 그 순간에는 데이터가 생성 및 추가되지만, 서버를 재시작하면 해당 데이터가 없어짐
  • 따라서 데이터 베이스를 통한 영구적인 보관이 필요해짐

1-4. DBMS

  • 계층형, 네트워크형, 관계형, 객체형 등이 있음
  • 그 중 관계형(RDBMS, Relational DBMS)를 주로 사용하고 있음
  • 대표적인 RDBMS는 Oracle, MySQL, PostgreSQL 등이 있음

RDBMS
RDBMS 모습



2. MongoDB

2-1. MongoDB란?

  • MongoDB : 데이터 베이스 솔루션(DBMS)
  • 많은 양의 데이터를 효율적으로 저장할 수 있음 (Humongous)

2-2. 기존 데이터 베이스 솔루션과의 차이

  • 데이터 베이스 솔루션은 mySQL, postgreSQL과 같이 수많은 방법이 있음
  • 데이터 베이스 서버로 서로 다른 데이터 베이스를 실행할 수 있게 해줌
  • Documents는 JavaScript의 객체(Object)와 유사하게 생김, 정확히는 JSON 형식을 사용
  • SQL 기반 데이터 베이스는 스키마(데이터 요구사항)를 통해 저장할 데이터를 엄격하게 관리하지만, MongoDB는 스키마를 강제하지 않아서 유연함 (Schemaless)
  • 전혀 다른 데이터를 하나의 동일한 Collection에 저장할 수 있음
  • 즉, 서버를 복잡하게 재구성하지 않고도 필요한 형식으로 데이터를 쿼리할 수 있음
  • 반면, 지저분한 데이터가 될 수 있기에 주의해야 함

구조

Database(ex. Shop) --> Collections(ex. Users, Menus, Orders) --> Documents(ex. {name:'Jeonggon'})

MongoDB 구조와 Schemaless
MongoDB 구조와 Schemaless


// JSON(BSON) 데이터 형식
// 키(key)-값(value)

{
    "name": "Jeonggon",
    "age": 27,
    "address":
        {
            "Nation": "Korea"
        },
    "hobbies": [
        { "name": "Cooking" },
        { "name": "Sports" }
    ]
}
  • 값으로 숫자, 문자, 참-거짓, 중첩 데이터, 배열 등을 가질 수 있음
    • 중첩 데이터를 통해 데이터 사이의 복잡한 관계하나의 동일한 문서에 저장할 수 있음
    • SQL에서는 A테이블과 B테이블의 데이터를 찾기 위해서는 복합적인 JOIN을 작성해야하는데 MongoDB는 문서 하나에 가져올 수 있어서 효율적임
    • 데이터를 논리적으로 저장할 수 있음
  • 데이터 형식을 BSON이라고도 하는데 이는 MongoDB가 JSON 데이터를 바이너리 버전으로 변환하기 때문

2-3. NoSQL 개념

  • Not only SQL의 의미로 SQL만을 사용하지 않는(여러 유형의 DB 사용) 데이터 베이스 관리 시스템을 지칭
  • NoSQL이 No RDBMS를 의미하지는 않음 (구체적인 정의가 없음)
  • 단순히 SQL 기반 데이터 베이스와 정반대의 개념, 철학을 따르기 때문
  • MongoDB는 NoSQL 솔루션임
  • MongoDB와 CouchDB 간에도 사용하는 쿼리 언어가 다르지만 SQL이 아니기에 NoSQL로 묶임
분류 특징
SQL 데이터를 정규화(normalization)해서 저장하고 모든 테이블이 스키마를 가지고 있으며 여러 테이블에 데이터를 배포하고 관계를 사용
MongoDB 데이터를 문서(Document)로 함께 저장하며 스키마를 강제하지 않음
  • 관계(relations)도 존재
  • MongoDB는 컬랙션(테이블)이 적음
    • 대신 데이터를 함께 저장
    • 응용 프로그램이 데이터를 가져올 경우, 컬랙션1과 컬랙션2를 병합할 필요가 없음

SQL Database NoSQL Database
MySQL MongoDB
Oracle Redis
PostgreSQL CouchDB
MS-SQL Amazon DynamoDB
Apache HBase
Cassandra
Elasticsearch

<SQL과 NoSQL 데이터 베이스 분류>


- NoSQL 등장배경

  1. 빅데이터의 등장으로 너무 많은 데이터를 처리해야 함 –> 데이터 처리 비용 증가
  2. 다양한 형태의 데이터를 저장해야 함
  3. 애자일 기법의 도입으로 변화되는 요구에 빠른 대응이 필요함

2-4. SQL과 NoSQL 특징 비교 정리

비교 SQL NoSQL
쿼리 언어 Structured query language No query language
데이터 베이스 타입 테이블 Key-value, document, wide-column, graph
스키마 Predefined Dynamic
확장성 Vertical
사용하던 장비를 더 좋은 장비로 교체
비용이 많이 들어감
Horizontal
사용하던 것에 노드 또는 시스템을 더 해줌
분산 저장을 지원
ACID vs BASE ACID BASE

- ACID vs BASE

  • ACID : 데이터가 일관되고 안정적임
    • Atomic : 원자성으로 모든 작업이 성공하거나 롤백됨
    • Consistency : 일관성으로 각 트랜잭션은 DB가 유효한 상태에서 다른 상태로 이동
    • Isolation : 격리로 트랜잭션 간에 간섭 없음
    • Durability : 지속성으로 트랜잭션 결과는 실패가 있더라도 영구적임

  • BASE : 복제된 데이터의 일관성보다 유동적이며, 가용성을 선호
    • Basically Available : 모든 사용자가 쿼리 수행 가능, 오류 발생 시, 완전히 중단되지 않음
    • Soft State : 데이터 베이스 상태는 시간이 지남에 따라 변경될 수 있음
    • Eventually Consistent : 작동하고 충분히 지나면 데이터 베이스가 일관성을 갖게 됨


3. MongoDB Ecosystem

MongoDB ecosystem
MongoDB에서 제공하는 서비스


  1. MongoDB 데이터 베이스 : 핵심 기능인 동시에 핵심 주제
  2. Self-Managed / Enterprise : 개인용 / 기업용 솔루션
  • CloudManager / OpsManager : 데이터 베이스 관리 도구
  1. Atlas(Cloud) : 클라우드 솔루션
  2. Mobile : 모바일 솔루션으로 모바일에 MongoDB를 직접 설치해 데이터를 저장하고 인터넷 없이 작업가능
  3. Compass : 그래픽 사용자 인터페이스(GUI)인 컴패스를 통해 데이터 베이스에 연결해 사용자 인터페이스로 데이터를 볼 수 있음
  4. BI Connectors, MongoDB Charts : 데이터 사이언스를 위해 다양한 분석 툴을 연결해주는 도구
  5. Stitch
  • 벡엔드 솔루션으로 서버 없는 쿼리 API를 제공
  • 클라이언트의 앱(ex.리액트) 안에서 데이터 베이스를 효율적으로 쿼리할 수 있게 해줌
  • 서버 없는 함수로 클라우드에서 명령형으로 코드 실행 가능
  • 데이터 베이스 트리거로 데이터 베이스에서 이벤트를 발생할 수 있게 해줌(ex.이메일 보내기)
  • 실시간 동기화(ex.클라우드 내 데이터 베이스-모바일 데이터 베이스 동기화)
mongodbdatabasenosql
profile

조정곤

주니어 프론트엔드 개발자

github
linkedin
instagram
email

< 이전글

Data Structure 시간복잡도, 빅오 표기법

다음글 >

TypeScript 기본 특징

Mongodb 포스트 (4)

down-arrow
MongoDB 소개MongoDB 사용MongoDB MongooseMongoDB Mongoose CRUD