TIL - Database - RDBMS & noSQL, ORM & ODM

김수지·2020년 1월 4일
0

TILs

목록 보기
22/39

Today What I Learned

Javascript를 배우고 있습니다. 매일 배운 것을 이해한만큼 정리해봅니다.
오늘은 noSQL입니다.


1. RDBMS와 NoSQL

1. RDBMS란?

  • RDBMS : Relational Database Management System
  • 데이터를 테이블에 나누어 담고 테이블 간 관계를 정의하여 사용하는(이 부분에서 불필요한 테이블 생성과 관계 정의 과정이 발생) 형식의 데이터 베이스
  • SQL Database 특징: Strict Schema, Relations

2. NoSQL란?

  • noSQL : Not Only / Non-Relational SQL
  • 관계형 데이터베이스 SQL와 달리 noSQL은 데이터를 테이블에 쪼개 담지 않고 도큐먼트 안에 JSON 형식으로 다루어 수평적인 데이터 구조를 지향한다. 관계형 데이터베이스에서는 수평 확장이 어렵다는 단점을 극복할 수 있는 데이터베이스이기도 하여서 '더 유연한' 구조를 가지고 있다고 본다. 대용량 데이터를 다루는 문서, 키-밸류, 그래프, 인-메모리, 검색 등에 용이하다.

3. NoSQL의 특징

  • flexibility(유연성): noSQL은 빠르고 반복적인 개발을 요구하는 환경에서 유연한 스키마를 제공한다.
  • scalability(확장성): noSQL은 서버를 증축하는 대신 하드웨어의 분산형 클러스터(여러 개의 데이터베이스에 데이터를 분할 할 수 있음)를 통해 확장할 수 있도록 설계되어서 확장성이 높다.
  • high-performance(높은 성능): noSQL은 문서, 키-밸류, 그래프 형식을 갖춘 데이터 모델에 최적화되어 있어 관계형 데이터베이스보다 더 높은 성능을 보장한다.
  • highly functional(높은 기능성): noSQL은 데이터모델에 맞춘 api를 제공한다.

4. SQL과 NoSQL 비교

image.png

5. When to use noSQL?

2. MongoDB

1. What is MongoDB?

  • 문서 지향적(document-oriented) noSQL 데이터베이스로 엔진은 C++로 작성된 오픈 소스이다.

2. MongoDB 기본 개념

  1. Document: 관계형 데이터베이스에서 다루는 Record라는 개념과 유사하고, JSON 형식으로 key-value 쌍을 다루는 데이터 구조로 구성되었다. document에서는 _id라는 고유 값이 생성된다. _id의 구성은 시간/머신ID/프로세스ID/순차번호로 구성된다.
  2. Collection: 관계형 데이터베이스에서 다루는 Table이라는 개념과 유사하고, document의 집합이다.
  3. Database: Collection들의 컨테이너이다.

image.png MongoDB Structure 출처: https://poiemaweb.com/mongdb-basics

3. MongoDB 특징

  1. schema-less: 관계형 데이터베이스는 테이블 내에 레코드가 일정한 스키마를 유지해야 한 것과 달리, mongoDB에서는 콜렉션 내 도큐먼트 레벨이 다양한 스키마를 가질 수 있어서 도큐먼트가 각자 고유한 필드를 가질 수 있다.
  2. join-less: 관계형 데이터베이스가 join 등을 통해 관계를 정의하는 것과 달리, mongoDB에서는 join 과정 없이 한 도큐먼트 안에 최대한 많은 데이터를 포함시키기 때문에 querying이 더 빠르다.
  3. 확장성이 높고, mongos 서버 내에 sharding(여러 개 데이터 베이스로 데이터를 분할시켜 할당) 클러스터 구축이 가능하다.

4. MongoDB 기본 Querying

  1. insert: db.콜렉션명.insert({필드1: "값1", 필드2: "값2", ...})
  2. select: db.콜렉션명.find({필드1: "값1", ...})
  3. update: db.콜렉션명.update({조건 필드: "값"}, {$set: {변경 필드: "변경 값"})
  4. delete: db.콜렉션명.remove({삭제할 필드: "값"})

3. ORM과 ODM

1. ORM과 ODM 구분

  1. ORM: Object Relational Mapping
    • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도우미 역할을 한다.
    • ORM의 장점
      • 익숙한 객체 지향적인 코드를 사용함으로써 직관적인 이해 및 집중에 도움이 됨
      • ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성이 증가함
    • ORM의 단점
      • 구현을 잘 못한다면 성능이 저하될 수 있음
      • 복잡한 쿼리문의 경우 오히려 SQL문으로 사용이 직관적이면서 효율적임
  2. ODM: Object Document Mapping
    • ORM과 동일하게 객체 관계로 정의한 내용을 NoSQL 형태로 매핑(연결)해주는 도우미 역할을 한다.

2. Sequelize

  • Node.js 기반의 ORM으로 PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL을 지원한다.
  • 프로미스 기반의 ORM이기 때문에 비동기 처리에 용이하다.
  • table 대신 modeling을 통해 객체 형태로 table을 짠다.
  • 기본적인 query문은 아래와 같다.
// Find all users
User.findAll().then(users => {
  console.log("All users:", JSON.stringify(users, null, 4));
});

// Create a new user
User.create({ firstName: "Jane", lastName: "Doe" }).then(jane => {
  console.log("Jane's auto-generated ID:", jane.id);
});

// Delete everyone named "Jane"
User.destroy({
  where: {
    firstName: "Jane"
  }
}).then(() => {
  console.log("Done");
});

// Change everyone without a last name to "Doe"
User.update({ lastName: "Doe" }, {
  where: {
    lastName: null
  }
}).then(() => {
  console.log("Done");
});

3. Mongoose

  • MongoDB 기반 ODM(Object Data Mapping) Node.JS 전용 라이브러리
  • MongoDB는 Document 기반이지만 RDBMS에서 사용하는 스키마(schema) 개념의 부활, populate, 프로미스와 콜백 사용 가능, 편리한 쿼리 빌더 등의 장점으로 많이 쓰이는 ODM이다.
profile
선한 변화와 사회적 가치를 만들고 싶은 체인지 메이커+개발자입니다.

0개의 댓글