[CS - db] SQL vs NoSQL

Jo HangJoon·2022년 10월 20일
0

CS 공부

목록 보기
15/17

질문의 핵심

  • SQL과 NoSQL의 차이는?
  • 어느 경우에 RDBMS와 NoSQL이 적합한지?

1. 데이터베이스

데이터베이스(Database, DB)란?

  • 데이터의 모음.
  • 일반적으로 컴퓨터 시스템에 전자적으로 저장되는 조직화된 데이터 모음을 말한다.
  • 데이터베이스를 실질적으로 구현하기 위해 데이터베이스 관리 시스템(DBMS)이라는 것을 사용한다.
  • 연결할 애플리케이션, 데이터, DBMS 솔루션을 하나로 묶어 데이터베이스 시스템이라 한다.

데이터베이스는 원시적으로는 데이터의 모음을 뜻하지만, 데이터를 조직하는 유형별로, 혹은 DBMS 솔루션까지 묶어 데이터베이스라고 부르기도 한다.

이러한 데이터베이스의 유형은 크게 관계형과 비관계형 데이터베이스, 두 가지로 나뉜다.

관계형 데이터베이스

  • 고정된 행(row)과 열(column)로 구성된 테이블에 데이터를 저장한다.
  • 각 열은 하나의 속성에 대한 정보를 저장하고, 행은 각 열의 데이터 형식에 맞는 데이터를 저장한다.
  • 테이블의 구조와 데이터 타입 등을 사전에 정의한다. 따라서, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.

관계형 데이터베이스의 관리 시스템을 RDBMS라 부르고 다음과 같은 것들이 있다.

  • MySQL
  • Oracle
  • SQLite
  • MariaDB
  • PostgresSQL

관계형 데이터베이스의 데이터를 다룰 때는 SQL을 사용한다. 즉, SQL은 관계형 데이터베이스 전용 프로그래밍 언어이다. 결론적으로 관계형 데이터베이스를 SQL이라고도 부른다.

비관계형 데이터베이스

관계형 데이터베이스를 뺀 나머지.

관계형 데이터베이스를 SQL로 부르는 것처럼 비관계형 데이터베이스를 NoSQL라고도 부른다.

  • NoSQL 데이터베이스는 주로 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.
  • 주요 유형은 문서, 키 값, 와이드 컬럼, 그래프가 있다.
  • NoSQL이라고 반드시 스키마가 없는 것은 아니다. 유연한 스키마를 제공하기도 하며, 대량의 데이터와 높은 사용자 부하에도 손쉽게 확장이 가능하다.
  • 관계형 데이터베이스에서는 데이터를 입력할 때 스키마에 맞게 입력해야 하는 반면, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다. 이런 방식을 schema on read라고 한다.

NoSQL 데이터베이스 유형

  • Key-Value 타입: Redis, Dynamo
  • 문서형 데이터베이스: MongoDB
  • Wide-Column Store 데이터베이스: Cassandra, HBase
  • 그래프 데이터베이스: Neo4J, InfiniteGraph

2. SQL vs NoSQL

SQL과 NoSQL의 차이점

1. 데이터 저장(Storage)

  • 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장한다.
  • 비관계형 데이터베이스(NoSQL)는 key-value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
  • 두 방식 모두 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 한다.

2. 스키마(Schema)

  • SQL을 사용하려면, 고정된 형식의 스키마가 필요하다. 즉, 처리하려는 데이터 속성별로 column에 대한 정보를 미리 정해두어야 한다. 스키마는 나중에 변경할 수 있지만, 이 경우 데이터베이스 전체를 수정하거나 오프라인(down-time)으로 전환할 필요가 있다.
  • NoSQL은 SQL보다 동적으로 스키마의 형태를 관리할 수 있다. 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.

3. 쿼리(Querying)

  • 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 한다. 따라서, 정보를 요청할 때 SQL과 같은 구조화된 쿼리 언어를 사용한다.
  • 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 둔다. 따라서, 구조화되지 않은 쿼리 언어(UnQL; Unstructured Query Language)로도 데이터 요청이 가능하다.

4. 확장성(Scalability)

  • 관계형 데이터베이스는 일반적으로 수직적으로 확장한다. 높은 메모리, CPU를 사용하기 때문에 비용이 많이 든다. 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소모된다.
  • NoSQL로 구성된 데이터베이스는 수평적으로 확장한다. 값싼 서버 증설, 클라우드 서비스 이용을 통한 확장이다. 따라서 많은 트래픽을 보다 편리하게 처리할 수 있고 비용이 저렴하다.

어떤 것을 사용해야 할까?

SQL은 데이터의 무결성을 보장하고, 스키마가 명확하게 정의되어 있다. 관계는 각 데이터를 중복없이 한 번만 저장한다. 하지만, 덜 유연하고 데이터 스키마를 수정하기 어렵다. 관계를 맺고 있어 Join문이 많은 복잡한 쿼리가 생길 수 있고, 대체로 수직적 확장만 가능하다.

NoSQL은 스키마가 없어 유연하다. 언제든지 데이터를 조정하고 새로운 필드를 추가할 수 있다. 데이터를 읽어오는 속도도 빨라지고 수직 및 수평적 확장이 가능해 애플리케이션이 발생시키는 모든 읽기/쓰기 요청을 처리할 수 있다. 하지만, 데이터 구조 결정이 미뤄질 수 있고 데이터 중복을 계속 업데이트해야 한다.

SQL 기반의 관계형 데이터베이스를 사용

  1. 데이터베이스의 ACID 성질을 준수해야 하는 경우
  2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
  3. 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우

NoSQL 기반의 비관계형 데이터베이스를 사용

  1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
  2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
  3. 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우
  4. 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우

참조

0개의 댓글