코딩박스

[NoSQL] NoSQL 이란?

by 코박7

 

관계형 데이터 베이스

  • 관계형 데이터 베이스의 경우 열과 행으로 구분되며, 사전에 정의가 필요하다.
  • 모든 열과 그와 관련된 데이터 유형이 미리 파악이 되어야 데이터베이스에 작성할 수 있다는 의미이다.
  • 또한 키를 사용해 여러 테이블을 연결하는 방식으로 정보를 저장한다. 이때, 여러 테이블 간의 관계가 형성되는것.

 

관계형 데이터베이스의 등장배경

RDB는 1970년대부터 사용되었는데, 당시 Disk Storage가 매우 고가의 제품이라서 데이터 중복을 줄이는데 집중했다.

그때는 현재의 Scale-out 등의 기법은 고려하지 않고 만들어졌다고 할 수 있다.

 

NoSQL

  • NoSQL 데이터베이스에서는 사전에 스키마를 정의하지 않아도 저장될 수 있다.
  • 이 데이터베이스는 그래프 기반, 열 지향, 키-값 저장소 등 특정 비지니스 요구 사항 수행에 적합하다고 한다.
  • 신속한 수평적 확장 능력 덕분에 비관계형 데이터베이스는 높은 트래픽을 처리할 수 있으며, 같은 이유로 고도의 적응력을 자랑한다고 함.
NoSQL 의 등장배경

NoSQL은 2000년대에 등장했으며, Disk Storage는 더 이상 큰 이슈가 아니게 되었다.

다루는 데이터의 크기와 성능의 요구사항이 커지게 되었고, 분산 환경이 대중화되었다.

 

개념

  • NoSQL은 비관계형 데이터베이스를 지칭한다. 즉, 관계형 데이터 모델을 지양 하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며 스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소를 말하며, 관계형 데이터베이스의 한계를 극복하기 위한 데이터 저장소의 새로운 형태라고 한다.

 

NoSQL 을 사용해야 하는 경우

  • NoSQL 데이터베이스는 유연한 스키마를 제공하며, 대량의 데이터 및 낮은 대기시간 또는 응답시간을 요구하는 애플리케이션 구축에 이상적인 데이터 모델을 지원 한다고함.
  • 온라인 게이밍 및 전자상거래 웹 애플리케이션이 위에 해당.
  • 내가 서비스 만드려는 알림 서비스의 경우도 위에 해당해 보임 .

 

NoSQL 을 피해야 하는 경우

  • NoSQL 의 경우 단일 테이블에 대한 쿼리 작업에 아주 잘 작동한다고 한다. 그러니 쿼리의 복잡성이 높아지는 경우 (테이블이 많고, 서로 엮여있는 데이터가 많은 경우가 되겠다.) NoSQL 보단 관계형 데이터베이스가 더 나은 선택이 된다고 한다.
  • NoSQL 데이터베이스는 보통 조인, 하위 쿼리 및 WHERE 절의 중첩 질의를 제공 하지 않는다고 한다.

 

하지만.

  • 꼭 관계형 및 비관계형 데이터베이스 중 하나를 선택해야 하는 건 아니라고 한다. 둘 모델을 결합해 적용할 수 있는 컨버지드 모델을 제공하는 데이터베이스를 선택할 수도 있다.

 

그래서 NoSQL 을 사용하면 뭐가 좋을까 ?

  1. 유연성
    1. SQL 데이터베이스를 사용할 경우 엄격한 사전 정의된 구조 안에 저장되지만 NoSQL 을 사용하면 엄격한 스키마 없이도 훨씬 더 자유롭게 저장될 수 있다.
  2. 확장성
    1. NoSQL 데이터베이스는 서버를 증설해 확장하는 대신 상업용 하드웨어를 사용하여 확장할 수 있다고 한다.
  3. 고성능
    1. NoSQL 데이터베이스의 아키텍처는 데이터 양이나 트래픽이 증가할 때 진가를 발휘한다고한다.
    2. 또한 NoSQL 데이터베이스는 데이터를 수집하여 이를 빠르고 안정적으로 제공한다.
  4. 고도의 기능성
    1. NoSQL 데이터베이스는 데이터 저장 수요가 큰 분산형 데이터 저장소를 위해 설계되었다.
    2. 이와 같은 특성 덕분에 빅데이타, 실시간 웹등 대규모 데이터를 처리하기에 이상적인 데이터베이스다.

 

NoSQL 의 종류.

Key-Value Database

출처: https://aws.amazon.com/ko/nosql/key-value/ (AWS DynamoDB)

  • Key-Value 하나의 묶음으로 저장되는 구조, 단순한 구조이기 때문에 속도가 빠르며 분산 저장 시 용이.
  • Value 에 모든 타입을 허용하며 이에 따라 검증 로직을 잘 구성 하여야한다.
  • Key-Value Database 의 종류로는 Redis, AWS DynamoDB 등 이 있다.

 

Document Database

출처: https://phoenixnap.com/kb/document-database

  • Key-Value Database 와 마찬가지로 데이터 저장시 Key-Value Type 을 사용하지만, 가장 큰 차이는 Document(ex: XML, JSON) 타입으로 저장이 된다.
  • Document 자체가 schema 가 된다.
  • 각 Document 별로 다른 필드를 가질 수 있으니, 컬럼과 필드 관리는 제대로 해야함.
  • Document Database 의 종류로는 MongoDB, CouchDB 등 이 있다.

 

Graph DataBase

출처: https://aws.amazon.com/ko/nosql/graph/

  • 그래프 데이터베이스는 노드(사람들)를 사용하여 엔티티를 저장하고 엣지(관계)로는 엔티티 간에 관계를 저장한다.
  • 엣지는 항상 시작 노드, 끝 노드, 유형과 방향을 가지며, 상-하위 관계, 동작, 소유자 등을 문서화 한다.
  • 하나의 노드가 가질 수 있는 관계의 수와 종류는 제한이 없다.
  • 그래프 데이터베이스는 데이터 간의 관계를 만들고 이러한 관계를 신속하게 쿼리해야 할 때 유용하다. (소셜 네트워킹, 추천 엔진 등)
  • Graph Database 로는 Neo4j, BlazeGraph, OrientDB 등이 있다.

블로그의 정보

코딩박스

코박7

활동하기