[엘리스 sw 엔지니어 트랙] 30일차 NoSQL, RDB, Mongoose ODM

오경찬·2022년 5월 23일
0

수업 30일차

백엔드 수업을 얼마 듣지는 않았지만 많은걸 공부하고 시도해보는것 같다. 머리로 그려서 눈에 보이지 않는 부분이라 어렵긴하지만 푸는 맛도 생겼다. 오늘은 DB쪽을 공부해본다.

이론

  • MongoDB: 대표적인 NoSQL, Document DB
    NoSQL: 질의어를 사용하지 않는 DB
    RDB: 관계형 데이터베이스
    Mongoose ODM: Object Data Modeling, 모델화 하여 쉽게 사용할수 있도록 도와줌
    스키마 관리: 스키마를 정의하지 않고 데이터를 사용, 코드 작성과 프로젝트 관리에 유용
    Populate: MongoDB는 join을 제공하지 않음, Populate를 사용하여 간단하게 구현
    Mongoose ODM 사용법: 1.스키마 정의, 2.모델만들기, 3.데이터베이스 연결, 4.모델 사용
    create: 생성된 Document를 반환
    find: Document를 검색
    query: Bson형식, 기본 문법 그대로 mongoose에서도 사용
    update: Document를 수정
    ORM: Object-Relational-Mapping, 기능등을 더욱 단순화 하는것

NoSQL

데이터의 구조가 고정되어 있지 않은 데이터베이스를 NoSQL
=> 테이블을 사용하지 않고 데이터를 다른 형태로 저장

NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옴(schema on read)

데이터를 입력하는 방식에 따라, 데이터를 읽어올 때 영향을 미침

ex) 대표적인 NoSQL은 몽고DB, Casandra 등

NoSQL 기반의 비관계형 데이터베이스 구성

  • Key-Value 타입 : 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열의 형태로 저장
    Key는 속성 이름을 뜻하고, Value는 속성에 연결된 데이터 값을 의미
    ex) Redis, Dynamo 등
  • 문서형(Document) 데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미
    JSON과 유사한 형식의 데이터를 문서화하여 저장
    각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리
    ex) MongoDB
  • Wide-Column 데이터베이스 : 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스
    각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리
    데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식
    ex) Cassandra, HBase
  • 그래프(Graph) 데이터베이스 : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스
    노드(nodes)에 속성별(entities)로 데이터를 저장 / 각 노드간 관계는 선(edge)으로 표현
    ex) Neo4J, InfiniteGraph

특징

  1. 데이터 저장(Storage)
    NoSQL은 key-value, document, wide-column, graph 등의 방식으로 데이터를 저장

  2. 스키마(Schema)
    NoSQL은 관계형 데이터베이스보다 동적으로 스키마의 형태를 관리
    => 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨

  3. 쿼리(Querying)
    비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점
    => 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능 UnQL(UnStructured Query Language)

  4. 확장성(Scalability)
    NoSQL로 구성된 데이터베이스는 수평적으로 확장
    => 보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장
    NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면, 많은 트래픽을 보다 편리하게 처리 가능

NoSQL 사용하는 경우

  1. 비구조적인 대용량의 데이터를 저장하는 경우
    자유로운 형태로 데이터를 저장할 수 있으므로 필요에 따라서 새로운 데이터 유형을 추가 가능
    정형화되지 않은 많은 양의 데이터가 필요한 경우, NoSQL이 효율적

  2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
    데이터베이스를 클라우드 기반으로 쉽게 분리 할 수 있도록 지원하여, 저장 공간을 효율적으로 사용
    수평적 확장의 형태로 증설하므로, 이론상 무한대로 서버를 계속 분산시켜 DB를 증설 가능

  3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
    스키마를 미리 준비할 필요가 없어서, 개발을 빠르게 해야하는 경우에 매우 적합

RDB

관계형 데이터베이스(Relational database)란?
관계형 데이터 베이스는 현재 가장 많이 사용되고 있는 데이터 베이스의 한 종류

관계형 데이터 베이스란 테이블(table)로 이루어져 있으며 이 테이블은 키(key)와 값(value)의 관계를 나타낸다.

이처럼 데이터의 종속성을 관계 (relationship)로 표현하는것이 관계형 데이터베이스의 특징이다.

관계형 데이터 베이스의 특징

  • 데이터의 분류, 정렬, 탐색 속도가 빠르다
  • 오랫동안 사용된 만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장해 준다.
  • 기존에 작성된 스키마를 수정하기 어렵다.
  • 데이터 베이스의 부하를 분석하는 것이 어렵다.

mongoose ODM

  • 몽고디비 작업을 쉽게 할 수 있도록 도와주는 라이브러리이다.
  • 몽고디비에 없어서 불편한 기능들을 보완해준다.
  • 테이블과 유사한 기능을 지니며 JOIN 기능이 있다.
  • 하지만 몽구스를 사용하면 위의 특성들 때문에 sql과 다시 비슷해진다는 단점이 있다.
profile
코린이 입니당 :)

0개의 댓글