요즘 NoSQL을 사용하는 기업들이 많아지고 있다. Facebook, Twitter, Netflix, Instagram, Apple의 iCloud 등 많은 기업들이 NoSQL을 채택했다. 왜 NoSQL을 사용할까? 그럼에도 불구하고 SQL(관계형DB)는 여전히 주류 DB로 통용된다. 두 데이터베이스는 무엇이 다르고 어떤 경우에 무엇을 채택해야 할까?

 

✅ Database, DBMS

📍 Database

  • 관련된 데이터의 모임 또는 집합
  • 정형화되고 조작 가능한(처리하기에 용이한) 컴퓨터에 저장된 데이터의 모임
  • 특정 목적을 위해 계산, 저장, 검색, 정렬 등의 "데이터 처리" 작업을 수행
  • 한마디로, 어떤 특정 조직의 응용 시스템에 사용되는 조작 가능한 저장 데이터의 모습

 

📍 DBMS

  • DBMS, DataBase Management System의 약자.
  • 컴퓨터에 저장되는 데이터베이스를 관리해주는 소프트웨어 시스템
  • 종류
    • Oracle, MySQL, PostgresSQL ...

 

RDBMS: 관계형 DB

데이터를 Row(필드, field)와 Column(레코드, record)이라는 일종의 이차원 테이블 형태로 저장한다. 각 테이블/관계는 하나의 엔티티 타입을 대표, 로우는 그 엔티티 종류의 인스턴스를 대표, 컬럼은 그 인스턴스의 속성이 되는 값들 대표한다.

  • 신뢰성이 높고 데이터의 분류, 정렬, 탐색 속도가 빠름
  • 그 어떤 상황에서도 무결성을 보장
  • 관계를 나타내기 위해서 '외래 키(foreign key)' 사용
  • 외래키 이용한 테이블 간 Join이 가능한 것이 특징
  • SQL을 이용하는 DBMS는 ACID 트랜잭션을 준수해야 한다.

🤖 무결성이란?

완전한 수명주기를 거치며 데이터의 정확성과 일관성을 유지하고 보증하는 것

🤖 ACID (Atomic, Consistency, Integrity, Duarabity)

데이터 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질

 

 NoSQL: 비관계형 DB

NoSQL, Not Only SQL 또는 non SQL, non relation 의미한다. 기존 관계형DB보다 더 융통성 있는 데이터 모델을 사용하고, 데이터의 저장 및 검색을 위한 특화된 매커니즘을 제공한다.

  • 관계형DB 와는 달리 테이블 정의 X. 데이터 테이블은 그냥 하나의 테이블이며 테이블 간 관계를 정의하지 않아 일반적으로 테이블간 Join 불가능
  • 비 SQL 인터페이스를 통한 데이터 액세스
  • 대부분 여러 대의 데이터베이스 서버를 묶어(클러스터링) 하나의 데이터베이스 구성
  • Data처리 완결성(Transaction ACID 지원) 미보장
  • 데이터베이스의 중단 없는 서비스와 자동 복구 기능 지원
  • 확장성, 가용성, 높은 성능

 

 NoSQL 종류

NoSQL은 저장되는 데이터 구조에 따라 다양하게 분류 할 수 있다.

  • Key Value DB
    • Key와 Value의 쌍으로 데이터가 저장되는 가장 단순한 형태의 솔루션
  • Wide Columnar Store
    • Big Table DB라고도 하며, Key Value 에서 발전된 형태의 Column Family 데이터 모델 사용
  • Document DB
    • JSON, XML과 같은 Collection 모델 구조 채택
  • Graph DB
    • Nodes, Relationship, Key-Value 데이터 모델 채용

image

 

 종류별 성능

image

 

RDBMS vs  NoSQL  언제 사용할까?

➡️ RDBMS를 사용하는 이유

📌 ACID를 보장해야 할 때
ACID 보장은 트랜잭션이 데이터베이스와 상호작용 하는 방식을 정확히 규정해 에러를 줄이고 데이터베이스의 무결성을 보호한다. 그래서 많은 전자상거래 및 금융 애플리케이션의 경우 ACID 보장 데이터베이스를 선호한다.

 

📌 한 번 구조화된 데이터가 변경되지 않을 때
일관된 데이터로만 작업하는 경우, 다양한 데이터 유형과 높은 트래픽 볼륨을 지원하도록 설계된 관계형 DB를 사용한다.

 

📌 '관계를 맺고 있는' 데이터가 자주 변경 될 때
NoSQL은 관계를 맺고 있는 데이터를 수정하려면 여러 컬렉션을 수정해야 한다. 따라서 비효율적이다.

관계형 DB는 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합하다.

 

➡️ NoSQL 데이터베이스를 사용하는 이유

📌 구조화되지 않은 대용량 데이터를 저장해야 할 때
NoSQL 데이터베이스는 함께 저장할 수 있는 데이터 유형에 제한이 없다. 필요에 따라 다양한 유형을 추가 할 수 있다. Document 기반 데이터베이스를 사용하면 '유형'을 미리 정의하지 않고 데이터를 한곳에 저장할 수 있다. 따라서 소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요할 경우 사용한다.

 

📌 빠른 개발이 필요할 때
NoSQL은 구조화를 먼저 하지 않기 때문에, 짧은 스프린트 내에서 개발중이거나, 데이터 구조를 자주 변경할 때 사용한다.

 

📌 클라우드 컴퓨팅 및 스토리지를 최대한 활용할 때
클라우드 기반으로 데이터베이스 저장소를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다.
따라서 소프트웨어에 데이터베이스의 확장성이 중요하다면, 별다른 번거로움 없이 확장할 수 있는 NoSQL 데이터베이스를 사용하는 것이 좋다.

 

참고자료