JX405기_비트/mongoDB

Day16-1 MongoDB 정의, 기본 개념

_하루살이_ 2023. 2. 7. 16:17

NoSQL

  • "Not Only SQL" or "Not SQL" 관계형이 아닌 DBMS
  • 빅데이터와 실시간 웹 애플리케이션에 사용됨
    • Twitter, Facebook, Google 등은 매일 거대한 양의 사용자 데이터를 수집
  • 데이터 구조에 따른 분류
    • Key-Value Store
      1.  시스템이 단순하여 속도가 매우 빠르고 확장도 상대적으로 용이함
      2. 기본 자료 구조는 dictionary 또는 map
      3. Oracle NoSQL, Redis, Amazon Dynamo
      4. 기본적인 CRUD(Create, Read, Update, Delete) 연산에서는 우수하지만, 고급 쿼리를 수행하는 것은 어려움. 
    • Document-Based Store
      1. Key value의 쌍으로 데이터를 저장하고 검색
      2. Document는 JSON 형태로 저장
      3. 블로깅 플랫폼, 실시간 분석 및 e-commerce와 같은 응용 분야에 주로 사용
      4. 다중 연산이나 쿼리를 요구하는 복잡한 트랜잭션에는 적합하지 않을 수 있음
      5. CouchDB, MongoDB, Riak등이 있으며, MongoDB가 가장 대표적임 
    • Column-Based Store
      1. 컬럼 지향적 데이터베이스는 컬럼별로 처리
      2. SUM, COUNT, AVG 등과 같은 집한 연산 처리에 높은 성능을 제공
      3. Data Warehouse와 Business Intelligence 등에 적합
      4. HBase, Cassandra, Hypertable 등
    • Graph-Based Store
      1. 엔티티(entity)와 엔티티간의 관계(relationship)까지 저장
      2. 엔티티는 노드(node), 관계는 엣지(edge)로 저장
      3. 소셜네트워크, 로지스틱스, 공간데이터와 같은 분ㄴ야에 사용
      4. Neo4J, Infinite Graph, OrientDB등이 있음

몽고디비란?

  • 응용프로그램을 쉽게 개발하고 확장할 수 있도록 고안된 도큐먼트 데이터베이스
  • 관계형 데이터베이스와 키-값 저장 시스템의 장점만을 모아서 설계 → 확장이 용이하고, 다양한 구조의 데이터를 저장할 수 있고, 정교한 쿼리 언어를 가짐
  • 웹 애플리케이션과 인터넷 기반을 위해 설계된 데이터베이스 관리 시스템
  • 도큐먼트 베이스(document-base) 데이터베이스
    • 필드(field) 또는 키(key) 와 연결된 값(value)의 집합으로 구성된 자료구조
    • mongoDB 도큐먼트 형식은 JSON 객체와 유사함 → 직관적인 데이터 모델

몽고디비의 기능

  • 도큐먼트 데이터모델
    • 스키마가 없는 모델의 장점 → 애플리케이션이 데이터 구조를 결정
  • 인덱스
    • 데이터를 빠르게 검색할 수 있도록 하는 서비스를 제공
  • 복제
    • 복제세트(replica set)라고 부르는 구성을 통해 복제 기능 제공
    • 서버와 네트워크 장애가 발생할 경우를 대비하여 중복성과 장애조치 자동화를 위해 데이터를 여러대의 서버에 분산
  • 수평적 확장이 용이
    • 수평적 확장이란 데이터베이스를 여러대의 서버에 분산
    • 시스템에 장애가 발생해도 분산된 서버로 인해 장애에 따른 피해가 경감됨
    • 샤딩 메커니즘(sharding mechanism)으로 데이터를 여러노드에 분산하는 것을 자동으로 관리함

                      ※ 수직적향상은 간단하고, 비용이 절감되지만, 한계에 도달하면 향상이 불가능


MongoDB코어 서버와 툴

  • MongoDB v1.0
    • 2009년 11월 발표
    • 소수점 첫번쨰 자리가 짝수이면 안정적인 버전
  • 코어서버
    • mongod라는 실행 프로그램을 통해 구동(현재는 기본 설정된 서버 구동)
    • 바이너리 프로토콜을 통해 네트워크 소켓으로 명령을 받아들임
  • MongoDB Shell (mongosh)
    • 데이터베이스를 테스트하고, MongoDB인스턴스 관리를 수행하기 위한 도구
    • MongoDB 명령어 쉘 → mongosh 명령어로 구동
    • 명령어를 자바스크립트로 표현
    • MongoDB와 상호작용하기 위한 JavaScript 및 Node.js 14.x가 완벽하게 기능하는 REPL환경

                  ※ REPL : Read/Evaluate/Pring/Loop, 코드를 입력하면 결과가 바로 출력


MongoDB 실행하기

해당 화면이 뜨면서 아래의 test라고 뜨면 완료

 

현재 기본적으로 생성되는 DB를 제외하고 아무것도 생성되지 않은 상태

현재 사용 중인 데이터 베이스는 test임

 

 


도큐먼트

  • 도큐먼트 사용의 장점
    • 도큐먼트는 프로그래밍 언어의 자료형에 해당함
    • 테이블 조인의 필요성 감소
    • 동적 스키마는 다형성을 지원함

 

  • 컬렉션
    • 도큐먼트가 저장된
    • 관계형 데이터베이스의 테이블에 해당

 

명령어들

  • db : 현재 선택된 데이터 베이스를 출력
  • show dbs : 데이터베이스 목록을 출력
  • use <데이터베이스명> : 기존의 데이터베이스를 선택 또는 새로운 데이터베이스를 생성
  • insertOne/insertMany : 컬렉션에 도큐먼트를 삽입, 컬렉션이 존재하지 않으면 생성후 삽입
    • 사용 예시 : db.collection이름.insertOne() / db.collection이름.insertMany()
  • find : 컬렉션에 저장된 모든 도큐먼트를 조회하거나 특정조건에 맞는 도큐먼트를 조회하거나 컬렉션의 특정 컬럼들을 반환
    • 사용예시 : db.collection이름.find()

데이터베이스

  • 몽고디비는 데이터레코드를 컬렉션에 BSON 도큐먼트 형태로 저장
  • 데이터베이스
    • 컬렉션을 구분하는 네임스페이스로 하나 이상의 컬렉션을 저장함
    • MongoDB에 질의하기 위해서는 대상 도큐먼트가 존재하는 데이터베이스와 컬렉션을 알아야함
      • 데이터베이스 생성 예시 use [데이터베이스 이름]
      • 몽고디비에서 데이터베이스와 컬렉션은 도큐먼트가 처음 입력될 때 생성

 

컬렉션

  • 도큐먼트들을 그루핑(grouping)할 수 있는 방법으로, 관계형 데이터베이스의 테이블에 해당
    • 컬렉션 생성예시 : db.[컬렉션이름].insertOne({x:1}), db.[컬렉션이름].createIndex({y:1})
  • 도큐먼트의 구조
    • 필드(field)와 값(value)의 쌍으로 구성
    • 필드 이름 (문자열)
      • _id는 기본키로 사용하도록 예약됨
      • null문자를 포함할 수 없음
      • 필드 이름의 중복을 허용하지 않음
    • (.) 표기법
      • 배열의 요소에 접근할 경우 <array>.<index>
      • 내장 도큐먼트의 필드에 접근할 경우 <embedded document>.<field>
    • _id필드
      • 컬렉션에 저장되는 도큐먼트는 기본키로 기능하는 _id필드가 필요함
      • 도큐먼트를 삽입할 때 _id 필드를 생략하는 경우, ObjectId를 자동으로 생성
      • 기본적으로 몽고디비는 컬렉션을 생성할 때 _id필드에 인덱스를 생성함
    • 도큐먼트 크기제한
      • BSON 도큐먼트 크기의 최대값은 16M바이트

 

데이터 조회 예시 

db.[collection이름].find({<query document>, <projection document>})

  • projection document는 다음을 지정함 
    • <field> : 1 반환될 도큐먼트에 포함
    • <field> : 0 반환될 도큐먼트에 포함되지 않음

 

_id 필드를 제외시키기 위해 명시적으로 _id : 0 입력