NoSQL

Roy Jung·2023년 1월 19일
0

Database

목록 보기
1/1
post-thumbnail
post-custom-banner

NoSQL이란 무엇입니까?

NoSQL을 사용하고 있는데 정작 잘 알지 못하고 사용하는 것 같아 정리해본다.

보통 “NoSQL 데이터베이스”란 용어를 비관계형 데이터베이스를 지칭할 때 사용한다. 누군가는 “NoSQL”을 “non SQL(비 SQL)“의 약자로, 또 누군가는 “not only SQL(SQL만을 사용하지 않는)”의 약자로 생각한다. 어떤 경우든 대부분의 사람들은 NoSQL 데이터베이스가 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스라는 데 동의한다.

역사적으로는 RDB보다 한참 뒤인 2000년대에 등장하기 시작했다. 스토리지 비용이 크게 하락하면서 데이터 중복 감소를 목적으로 관리가 어려운 데이터 모델을 생성하고 관리해야할 필요성이 낮아졌다. 따라서 스토리지 비용보다 개발자의 생산성의 priority가 높아졌다. 또한 데이터 어플리케이션의 양과 종류가 다양해졌다. 데이터의 모양 크기(structured, semi-structured and polymorphic 등)이 다양해지며 Schema를 미리 정의하는 것이 불가능해졌다. 따라서 많은 양의 unstrucutured data를 store할 수 있는 데이터베이스가 필요해졌다.

NoSQL 특징

사실 NoSQL은 굉장히 High level의 개념이고 다양한 종류가 존재한다. 하지만 NoSQL로 묶인 데에는 그럴 만한 이유가 있다. 공통적인 특징은 다음과 같다.

  • Flexible schema
  • Horizontal scaling
  • High Availability

Flexible schema

위에서 말한대로 RDB와 다르게 엄격한 schema 정의가 필요하지 않다는 말이다. 다양한 형태의 데이터를 자유롭게 저장할 수 있다.

Horizontal scaling

Scale up이 아닌 scale out에 초점을 맞춰 디자인 되었다. 이는 distributed system과 연관이 깊다.

High Availablity

데이터를 복제해서 저장한다. 따라서 일부 노드에 장애가 생겨도 서비스가 가능하게 설계되었다.

RDS vs NoSQL

RDB와 NOSQL은 추구하는 바가 다르다. RDB는 Transaction 개념을 사용하고 ACID를 지키는 것을 추구한다. 반면, NOSQL은 BASE를 지키는 것을 추구한다.

Base(염기)는 사실 ACID(산)과 비교하기 위해 어거지로 지어진 이름이다.

먼저 우리가 보다 익숙한 ACID에 대해 알아보자.

ACID

  • Actomity(원자성) : transaction 관련된 작업들은 모두 성공하거나 모두 실패하거나 둘 중 하나여야한다. 즉 부분 성공은 없다.
  • Consistency(일관성) : 데이터베이스는 항상 일관성이 유지되어야 한다. 규칙이나 제약을 항상 만족해야한다.
  • Isolation(고립성) : transaction 수행 시에 다른 transaction의 연산 작업이 끼어들 수 없다.
  • Durability(지속성) : 완료된 transaction은 영구적으로 반영되어야한다. 시스템 장애가 생겨도 성공한 transaction은 남아있어야한다.

BASE

  • Basically Available : 장애가 있더라도 가용성을 보장한다. 복제되어 저장되며 분산 시스템을 사용하므로 노드 하나가 장애가 있어도 가용성을 보장해야한다.
  • Soft State : 노드의 상태는 외부에서 전송된 정보를 통해서 결정됨. 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신된다. 즉 노드의 같은 데이터도 다른 값을 갖을 수 있음.
  • Eventually Consistent : Soft state에도 불구하고 최종적으로는 노드 간 데이터의 일관성을 갖게된다.

비교하자면 ACID는 데이터의 정확성에 집중했고 Base는 정확성을 일부 포기하고(조금 더 느슨한 정확성) 확장성과 가용성에 집중했다.

CAP/PACELC

다른 게시물에서 정리할 예정
참고

NoSQL 종류

먼저, 이 분류를 보다 보면 기준이 애매하거나 비슷해보이는 것들이 있다. 그냥 큰 범위의 분류이므로 넘어가고 추후 각각 대표적인 제품의 architecture를 살펴보자

  • Document

    여기서 말하는 documnet란 semi-structured entity로 주로 JSON이나 XML 같은 형식을 말한다. literally 형식이 자유로운 JSON이나 XML 형식으로 데이터를 저장하는 DB이다. 대표적의로 Mongo DB, Elasticsearch, CouchDB가 있다.

  • Graph

    Graph data를 다루기 위한 database이다. Neo4j가 대표적이다.

  • Key/value

    Key/value 형태로 데이터를 저장한다. 대표적으로 Redis, DynamoDB가 있다.

  • Wide column

    row, column이 있어서 RDB와 유사해보이지만 행마다 각기 다른 column을 갖을 수 있다. 2차원 key/value라고 할 수 있다. 대표적으로 cassandra, Big table, Hbase가 있다.

profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글