WIL | noSQL vs SQL, ORM, ODM

isthis·2021년 11월 28일
0
post-thumbnail

SQL과 NoSQL

SQL과 NoSQL에 대한 간단한 기초 개념, 그리고 각각의 장단점에 대해 알아보자.

SQL(관계형 DB)

"Structured Query Language"
관계형 데이터베이스를 조작하고 액세스하는 데 사용되는 구조화된 쿼리 언어

즉, SQL은 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용되는 쿼리 언어이다.

데이터를 관리하는 시스템인 DBMS 중에 RDBMS(Relational DBMS)라고 부르는 관계형 데이터베이스 관리 시스템이 있다. SQL을 사용하여 RDBMS를 이용할 수 있다.

이러한 관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다.

  1. 데이터는 엄격한 데이터 스키마(=structure)를 따라 데이터베이스 테이블에 저장된다.
  2. 데이터는 관계를 통해서 연결된 여러 테이블에 분산된다.
  • 대표적인 RDBMS : Oracle, MySQL, MSSQL(RDBMS별로 SQL문이 조금씩 다르다.)

NoSQL (비관계형 DB)

"Not Only SQL"
테이블 형식으로 구성되지 않고 테이블 형식이 없는 비 관계형 형식의 데이터를 관리하는 방법을 제공하는 데이터베이스.

관계형 데이터 모델을 사용하지 않고 SQL을 사용하지 않는 그 이외의 모든 데이터베이스 시스템 또는 데이터 스토어를 일컬어 NoSQL이라고 칭한다.
빅데이터를 다룰 때 RDBMS로만 트래픽을 감당하기 어려워져 이를 해결하기 위해 탄생하였다.
NoSQL의 가장 큰 특징은 확장성과 기용성, 높은 성능, 그리고 다양한 데이터 형태를 수용할 수 있다는 것이다.(SQL의 특징과 반대로 스키마가 없고, 관계도 없기 때문이다.)

NoSQL은 무한에 가까운 확장성을 제공하는데, 이를 위해 NoSQL 데이터베이스는 단순한 키와 값의 쌍으로 이루어져 있다. 인덱스와 데이터는 분리되어 별도로 운영되며 고정된 스키마도 없다. RDBMS와 다르게 테이블 스키마가 유동적이라 다양한 형태들의 데이터를 유연하게 처리할 수 있다. 대신 분산형 구조이기 때문에 분산 시스템의 특징을 반영한다.

  • 대표적인 NoSQL
운영 데이터베이스 모델DBMS 예시
Key-value storeRedis, MemcacheDB
Columnar databaseCassandra, Apache HBase
Document storeMongoDB, Couchbase
Graph databaseOrientDB, Neo4j

SQL vs NoSQL

어떠한 데이터를 다루는지, 어떤 애플리케이션에서 사용되는가에 따라 선택을 고려해야 한다.
그리고, 애플리케이션을 만들 때 한 가지 데이터베이스만 사용하는 것이 아니므로, 알맞은 곳에 알맞게 사용하면 된다.

SQL 장점

  • 명확하게 정의된 스키마, 데이터 무결성 보장
  • 관계를 통해 각 데이터를 중복 없이 한 번만 저장

SQL 단점

  • 상대적으로 덜 유연하며, 데이터 스키마는 미리 알고 계획해야 한다.(나중에 수정하는 것이 어렵거나 불가능하기 때문이다.)
  • 관계를 맺고 있어서 JOIN문이 많은 매우 복잡한 쿼리가 만들어질 수 있다.
  • 수평 확장이 어렵고, 보통 수직 확장만 가능하다. 즉, 어느 시점에서 처리량/처리 능력과 관련하여 약간의 성장 한계에 직면하게 될 수 있다.

NoSQL 장점

  • 스키마가 없기 때문에 유연성이 높다. 즉, 저장된 데이터를 언제든지 조정하고 새로운 필드(SQL에서의 컬럼)를 추가할 수 있다.
  • 데이터는 애플리케이션에 필요한 형식으로 저장된다. 따라서 데이터를 가져오는 속도가 빨라진다.
  • 수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기/쓰기 요청을 처리할 수 있다.

NoSQL 단점

  • 유연성 때문에, 데이터 구조 결정을 미루게 될 수 있다.(바로 계획, 결정해야만 하는 것이 아니기 때문이다.)
  • 데이터 중복을 중복을 계속 업데이트해야 한다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.(SQL은 중복 데이터가 없으므로 한 번으로 수행 가능)

SQL을 사용하면 좋은 경우

  • 앱의 여러 부분에서 관련 데이터가 비교적 자주 변경되는 경우(NoSQL은 항상 여러 컬렉션을 수정해야 한다.)
  • 명확한 스키마가 중요하며, 데이터구조가 극적으로 변경되지 않을 때

NoSQL을 사용하면 좋은 경우

  • 정확한 데이터 요구사항을 알 수 없거나 관계를 맺고 있는 데이터가 자주 변경(수정)되는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우(한 번의 변경으로 수십 개의 문서를 수정할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장할 필요가 있는 경우(즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)

ORM이란?

"Object-realational Mapping"
데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 도구.

객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용한다. 여기서 객체 모델과 관계형 모델 간에 불일치가 존재하는데, 이 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결한다.
예를 들어, Node.js에서 많이 사용되고 있는 ORM인 Sequelize는 자바스크립트 구문을 알아서 SQL로 바꾸어 RDBMS를 간편하게 다룰 수 있도록 해준다.
관계도를 그려보자면,
Object <=> 매핑 <=> DB데이터 이런 관계에서 ORM이 매핑의 역할을 수행하고 있다.

  • 대표적인 ORM : Sequelize, Prisma

ODM이란?

"Object Document Mapping"
NoSQL에서 Document Database를 지원하기 위해 데이터를 변환하는 도구.

Node.js에서 MongoDB를 사용하다 보면 mongoose라는 라이브러리를 자주 사용하는데, 이것이 바로 ODM이다. mongoose는 DB에서 문서를 조회할 때 자바스크립트 객체로 바꿔주는 등의 역할을 한다.

즉, document based DB(에 대한 자세한 설명)와 프로그램 사이 데이터를 변환해 주는 도구가 ODM이다.

ORM과 ODM의 장단점

장점

  • DBMS에 대한 종속성이 줄어들어 DBMS 변경 시 드는 비용이 줄어든다.

  • 객체 지향적인 코드로 가독성이 향상된다.

단점

  • 프로젝트의 복잡성이 커질수록 ORM, ODM의 추상화라는 장점이 오히려 단점이 될 수 있다.

  • 결국 프로젝트가 커질수록 SQL을 사용해야 한다.

참고자료
SQL vs NoSQL
https://devuna.tistory.com/25
https://ko.myservername.com/sql-vs-nosql-exact-differences
https://smoh.tistory.com/371
https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174384/mongodb%EB%9E%80

ORM, ODM
https://donghunee.github.io/study/2019/09/07/etc/
https://velog.io/@namezin/ODM-ORM
https://velog.io/@alskt0419/ORM%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C...-iek4f0o3fg

profile
공부하자

0개의 댓글