ORM ,NoSQL,SQL 개념정리

ccy·2022년 2월 10일
0

Week I Learned (WIL)

목록 보기
4/5

RDBMS란?

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

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");
});

ORM과 ODM 구분

ORM?
Object Relational Mapping, 객체-관계 매핑

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
객체 간의 관계를 바탕으로 SQL을 자동 생성해서 sql 쿼리문 없이도 데이터베이스의 데이터들을 다룰 수 있다.
ORM의 장점

  • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
  • 재사용 및 유지보수의 편리성이 증가한다.
    특정 DB에 한정 되지 않기 때문에 나중에 어떤 DB로든 쉽게 migration 가능하다

ORM의 단점
완벽하게 ORM으로만 서비스를 구현하기가 어렵다.
프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다

ODM: Object Document Mapping
ORM과 동일하게 객체 관계로 정의한 내용을 NoSQL 형태로 매핑(연결)해주는 도우미 역할을 한다.

NoSQL?
Not Only SQL이라고도 표현되며 SQL 또는 관계형 DB만을 사용하지 않고 여러유형의 DB를 사용하는 확장된 DB를 말한다.
기본적으로 SQL과 반대되는 접근방식을 따르고 비관계형 데이터베이스라고 불리며 스키마가 없다.

  • NoSQL에서는 테이블(table)을 컬렉션(Collection)으로, 레코드(record)를 문서(documents)라고 부른다
  • 데이터의 일관성이 보장되어야 하거나 여러번의 조인 연산이 필요한 데이터라면 NoSQL을 사용하는 것 보다 RDBMS를 사용하는 것이 좋을 것이다. NoSQL은 RDBMS를 대체하기 위한 데이터베이스가 아니라 상호 보완할 수 있는 데이터베이스이며, 따라서 목적에 맞게 사용하는 것이 중요하다.

    예를 들어 구매 내역이나 게임의 로그 같은 데이터들은 매 초마다 엄청난 양이 생성되지만 한번 저장되고 난 뒤에는 수정될 일이 거의 없다. 거기다 생성되는 데이터의 양도 많기 때문에 장비의 성능에도 상당한 영향을 미칠 것이다. NoSQL은 이러한 데이터들을 효율적으로 저장할 수 있다. 여러 대의 장비에 빠른 속도로 저장이 가능하며, 데이터의 양이 누적되더라도 얼마든지 수평적 확장이 가능하기 때문이다.
    실제로 페이스북이나 트위터 같은 SNS에서는 게시글들을 저장하는 데 NoSQL 데이터베이스를 사용하고 있다.

NoSQL의 특징

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

MongoDB가 NoSQL이다

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

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

Mongoose
MongoDB 기반 ODM(Object Data Mapping) Node.JS 전용 라이브러리
MongoDB는 Document 기반이지만 RDBMS에서 사용하는 스키마(schema) 개념의 부활, populate, 프로미스와 콜백 사용 가능, 편리한 쿼리 빌더 등의 장점으로 많이 쓰이는 ODM이다.

NoSQL 기반에서 schema를 정의하여 model에 도움을 주는 라이브러리

profile
개발배우는중

0개의 댓글