[Database] RDBMS vs NoSQL - 차이점과 장단점

Jeongyeon Park·2023년 6월 23일

Database 기본 개념

목록 보기
2/3

RDBMS (Relational Database Management System, 관계형 데이터베이스)와 SQL


1. RDBMS의 정의와 특징

1) 정의

RDB(Relational Database, 관계형 데이터베이스)를 관리하는 시스템

  • RDB: 관계형 데이터 모델을 기반으로, 저장된 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스

  • 여러 테이블이 서로 관계를 맺으며 모여있는 집합체

2) 특징

  • 외래키(Foreign Key)를 사용해 테이블 간의 Join 가능

  • ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 따른다.

  • 사전에 정의된 DB Schema에 따라 데이터 저장

  • SQL로 데이터 관리(저장, 수정, 삭제 등)

  • 종류: MySQL, Oracle, SQLite, MariaDB, PostgresSQL 등

2. RDBMS의 장단점

1) 장점

  • 사전에 정의된 DB Schema에 따라 데이터를 저장해야 하므로, 명확한 데이터 구조 보장

  • 하나의 테이블 내에서는 동일한 데이터를 한 번만 저장 가능(중복저장 불가)

2) 단점

  • 테이블 간의 관계가 설정되어 있으므로, 시스템의 규모가 커질 경우 여러 개의 테이블을 동시에 Join하면서 복잡한 쿼리가 만들어질 수 있다.

  • 성능 향상이 필요한 경우 Scale-up 방식만을 지원하므로, 비용이 기하급수적으로 증가할 수 있다.

  • 정해진 Schema(스키마)에 따라 데이터를 저장하므로 유연성이 떨어지며, 추후 스키마가 변경될 경우 기존에 저장된 데이터의 형식 역시 변경해야 한다.



NoSQL(Not only SQL)


1. NoSQL의 정의와 특징

1) 정의

비관계형 데이터베이스로, 스키마를 사용하지 않거나 느슨한 스키마를 제공하는 시스템

  • 관계형 데이터베이스의 한계를 극복하기 위한 새로운 형태의 데이터 저장소

  • 빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 증가함에 따라, RDBMS보다 향상된 성능으로 사용 가능한 NoSQL 등장

2) 특징

  • RDBMS와 달리 테이블 간의 관계를 정의하지 않음 -> Join 연산 X

  • 하나의 레코드 = 문서(Document)

  • RDBMS에 비해 대용량 데이터 저장 가능 (페타바이트 단위)

  • 여러 대의 서버에 데이터를 분산 저장하는 분산형 구조 -> 특정 서버에 장애가 발생해도 데이터 유실/서비스 중지가 발생하지 않도록 함

  • 유동적인 테이블 스키마 -> 하나의 테이블에 저장된 데이터가 각기 다른 column(=attribute, 속성)이름과 데이터 타입을 가질 수 있음

2. NoSQL 종류

1) Key-Value DB

  • Key(속성 이름)-Value(속성에 연결된 실제 데이터) 쌍으로 데이터 저장 (배열 형태)

  • Key값은 모든 데이터 타입 허용 & 중복되지 않는 유니크한 값

  • 간단한 구조와 API 제공 => 질의의 속도가 매우 빠른 편

  • Redis, AWS DynamoDB, Riak 등

2) Document DB

  • Key-Value에서 확장된 방식 => Key-Document 형태로 저장

  • 각 Document는 하나의 속성(Key)에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리

  • Document는 데이터가 계층적으로 구성될 수 있는 포맷(JSON,XML)으로 저장 => Json 형태로 자원을 표현하는 서버(Restful API 등)에서 데이터를 주고받기에 유리

  • Document는 객체지향에서의 객체와 유사 => 각 Document가 하나의 단위로 취급되므로, Document에 포함된 모든 데이터는 하나의 테이블에 저장

  • Key-Value 모델과 동일하게 검색에 최적화

  • MongoDB, Couch DB 등

3) Graph DB

  • Key-Value 쌍으로 이루어진 노드 간의 관계를 그래프 형태로 표현한 데이터베이스로, 노드(Node) / 엣지(Edge) / 속성(Property) 으로 구성

  • Node = Row(혹은 Document) / Property = Key-Value 쌍으로 구성된 실제 데이터 / Edge = Node간의 관계

  • SNS Network Diagram, 친구 추천 등 연관된 데이터를 추천해주는 엔진/서비스 등에 사용 가능

  • Neo4J 등

4) Wide Column DataBase

  • Column-Family 모델 기반

  • 각 Column(=Key)에 Key-Value 형식의 데이터 저장 => 컬럼 패밀리(Column families)라고 하는 Column의 집합체 단위로 데이터 처리

  • 데이터가 Key 기준 오름차순으로 저장되는 특징 => Order by를 제공하지 않는 NoSQL에서 유사한 기능 활용 가능

  • 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각각 Column-name 존재

  • 하나의 Row에 여러 개의 Column을 포함할 수 있으며, 필요한 Column을 유연하게 선택 가능 => 규모가 큰 데이터 분석에 주로 사용

  • Cassandra, HBase, Hypertable 등

3. NoSQL의 장단점

1) 장점

  • RBMS에 비해 저렴한 비용으로 분산처리와 병렬처리 가능 => 빅데이터 처리에 효과적

  • 비정형 데이터 구조 설계로 설계 비용 감소

  • 가변적인 구조 => 데이터 모델의 유연한 변화 가능

2) 단점

  • 데이터 중복 저장 가능 => 데이터 변경 시 모든 Collection에서 중복 데이터 수정 필요

  • 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능

  • 많은 인덱스를 사용하려면 충분한 메모리가 필요

  • 인덱스 구조가 메모리에 저장 => 데이터 일관성이 항상 보장되지 않음



RDBMS와 NoSQL의 차이점


📍 데이터 저장 방식

RDBMS

  • 미리 정의된 스키마를 기반으로, SQL을 이용해 정해진 형식에 맞게 데이터 저장

NoSQL

  • Key-Value, Document, Wide-Column, Graph 등 다양한 방식으로 데이터 저장

📍 스키마(Schema)

RDBMS

  • SQL을 사용하기 위해 고정된 형식의 스키마 필요 => 처리하려는 데이터의 속성에 따라 각 Column(=Attribute, 속성)에 대한 정보를 미리 정의

  • 스키마를 추후에 변경하는 것은 가능하지만, 변경 시 데이터베이스 전체를 수정하거나 오프라인(down-time)으로 전환

NoSQL

  • 유동적인 형태의 스키마 사용 => 새로운 Document를 추가할 때 이전 데이터에 정의되지 않은 속성 포함 가능

  • 사용되지 않는 속성에 대해 데이터를 입력할 필요 X

📍 쿼리(Querying)의 특징

RDBMS

  • 테이블 스키마와 테이블 간의 관계에 맞게 데이터를 요청 => SQL 등 구조화된 쿼리 언어 사용

NoSQL

  • NoSQL의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점 => 구조화되지 않은 쿼리 언어로도 데이터 요청 가능

  • UnQL(UnStructured Query Language)

📍 확장성(Scability)

RDBMS

  • Scale-Up, 수직적 확장 => 메모리, CPU 등 데이터베이스가 구축된 하드웨어의 성능을 향상시키는 방식이므로 많은 비용 소요

  • 여러 서버에 걸쳐 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 많은 시간 소모

NoSQL

  • Scale-Out, 수평적 확장 => 서버 증설, 클라우드 서비스 이용 등 데이터베이스를 위한 서버를 추가적으로 구축하는 방식이므로 많은 트래픽을 보다 편리하게 처리 가능

  • 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅하는 방식을 주로 사용 => 수직적 확장보다 상대적으로 저렴한 비용

📍 RDBMS / NoSQL를 사용하는 케이스

RDBMS

1) ACID 원칙을 준수해야 하는 경우

  • Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)을 준수하는 것이 중요한 시스템

  • 트랜잭션(Transaction) 단위로 데이터베이스 상태 변화를 수행하는 과정에서, 안전성을 보장하기 위해 필요한 성질

  • SQL 사용 시 데이터베이스와 상호 작용하는 방식을 정확하게 규정 가능 => 데이터 처리 시 발생 가능한 예외적인 상황 최소화 & 데이터 무결성 보장이 중요한 시스템

2) 데이터가 구조적이고 일관적인 경우

  • 데이터 구조가 변경될 여지가 거의 없고, 구조가 명확한 시스템

  • 데이터 Update가 빈번한 시스템

NoSQL

1) 정해진 구조가 없는 대용량 데이터를 저장하는 경우

  • 일반적으로 NoSQL 데이터베이스는 저장할 수 있는 데이터의 유형에 제한이 없고, 언제든지 새로운 속성을 추가할 수 있는 특징 => 정형화되지 않은 대용량 데이터가 필요한 시스템

2) 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

  • 클라우드 기반 데이터 저장소 구축 시, 저렴한 비용의 솔루션 제공 => 데이터베이스의 확장성이 중요한 시스템

3) 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우

  • 스키마를 미리 정의할 필요가 없어 빠른 개발이 필요한 경우 유리한 특성

  • 소프트웨어 버전에 따라 데이터 구조를 자주 업데이트 해야하는 시스템 => NoSQL은 스키마를 수정할 필요가 없으므로 down-time(데이터베이스 서버를 오프라인으로 전환하여 데이터 처리를 진행하는 작업 시간) 소요 X


References

0개의 댓글