데이터 구조
: 테이블 형태로 데이터를 저장하며, 각 테이블은 레코드(행)와 속성(열)으로 구성됩니다. 테이블 간의 관계는 외래키(Foreign Key)를 사용하여 정의됩니다.데이터 스키마
: 엄격한 스키마를 가집니다. 데이터의 구조와 타입을 미리 정의해야 하며, 데이터의 변경이 필요한 경우, 스키마 변경이 복잡할 수 있습니다.쿼리 언어
: 대표적인 쿼리 언어로 SQL(Structured Query Language)을 사용합니다. SQL을 이용하여 데이터를 조회, 수정, 삭제할 수 있습니다.트랜잭션
: ACID 원칙(원자성, 일관성, 고립성, 지속성)을 준수하여 데이터의 일관성과 무결성을 보장합니다.스케일링
: 수평적 확장이 어려워서 대부분 수직적 확장을 사용합니다. 대용량 트래픽 처리에 어려움이 있을 수 있습니다.데이터 구조
: 다양한 형태의 데이터 모델을 사용합니다. key-value, document, graph 등의 다양한 데이터 모델이 있습니다.데이터 스키마
: 유연한 스키마를 가지며, 필요한 속성을 동적으로 추가할 수 있습니다. 스키마 변경이 간단하며, 다양한 형태의 데이터를 수용할 수 있습니다.쿼리 언어
: SQL 대신 데이터베이스마다 다양한 쿼리 언어를 사용합니다. 예를 들어, MongoDB는 자체 쿼리 언어를 사용합니다.트랜잭션
: 몇몇 NoSQL 데이터베이스는 ACID원칙을 준수하거나, 비교적 느슨한 일관성 모델(Consistency Model)을 따릅니다. 그러나 모든 NoSQL 데이터베이스가 이를 보장하지는 않습니다.스케일링
: 수평적 확장이 용이합니다. 대용량 데이터 처리와 분산 환경에서 유리한 성능을 보일 수 있습니다.관계형 데이터베이스
는 정형화된 데이터와 복잡한 관계를 다루는 데 유리하며, 데이터 일관성과 무결성을 중요시하는 경우에 적합합니다. 반면 NoSQL 데이터베이스
는 비정형 또는 반정형 데이터, 대용량 데이터 처리, 빠른 확장 등의 경우에 유용합니다. 따라서 데이터베이스 선택은 사용하는 데이터의 특성과 요구사항에 따라 결정되어야 합니다.
RDB(SQL) | NoSQL | |
---|---|---|
데이터 모델 | 테이블 | Document, Key-Value, Column-Family, Graph |
개발 목적 | 데이터 중복 방지 | 애자일 / 확장가능성 / 수정가능성 |
확장성 | 수직적 확장에 용이 | 수평적 확장에 용이 |
스키마 | 엄격한 데이터 구조 | 유연한 데이터 구조 |
트랜잭션 | ACID 트랜잭션을 지원 | CAP이론을 기반으로 함 |
장점 | 명확한 데이터 구조, 데이터 중복이 없어 update 용이 | 유연한 데이터 구조, 새로운 필드 추가가 자유로움, 수평적 확장(Scale out)용이 |
단점 | 시스템이 커지면 쿼리가 복잡함, 비용이 큰 수직적 확장에 적합함 | 데이터 중복 발생 가능으로 update시 모든 컬렉션 수정 필요, 명확한 데이터 구조를 보장하지 않음 |
예시 | Oracle, MySQL, PostgreSQL 등 | MongoDB, DynamoDB, CassandraDB 등 |
유연한 데이터 모델링
이 가능합니다. 데이터의 구조를 동적으로 조정할 수 있기 때문에 수평적 확장에 용이하며, 빠른 읽기와 쓰기가 가능합니다.일관성
, 가용성
, 분할 내성
중 세 가지 요소를 모두 만족하는 시스템은 존재하지 않음을 증명한 정리입니다.일관성(Consistency)
: 모든 노드는 동일한 순간의 데이터를 볼 수 있도록 보장합니다. 즉, 한 노드에서 데이터가 변경되면 다른 모든 노드에서도 같은 데이터 변경이 반영되어야 합니다.가용성(Availability)
: 모든 요청에 대해 성공이나 실패에 대한 응답을 받도록 보장합니다. 시스템이 어떤 노드의 장애나 오류로 인해 작동하지 않더라도 다른 노드가 계속 서비스를 제공할 수 있어야 합니다.분할 내성(Partition Tolerance)
: 네트워크 분할 등으로 인해 노드 간의 통신이 실패하거나 지연되더라도 시스템이 지속될 수 있도록 보장합니다. 네트워크는 항상 신뢰할 수 없으므로 이는 많은 경우에 반드시 필요로 합니다.CA
: 분할 내성을 포기하고 일관성과 가용성을 확보합니다. 이는 전통적인 관계형 데이터베이스에 해당됩니다.CP
: 가용성을 포기하고 일관성과 분할 내성을 확보합니다. 원자성 읽기와 쓰기 작업을 필요로 하는 비즈니스 로직 등 높은 일관성을 요구하는 상황에 적합합니다.AP
: 일관성을 포기하고 가용성과 분할 내성을 선택합니다. 분산 시스템에서 빠른 응답과 안정성을 요구하는 상황에 적합합니다.RDB의 정규화된 스키마
, ACID 트랜잭션
, Scalability
등이 NoSQL에 비해 부하가 많이 걸릴 수 있는 요인입니다.
정규화된 스키마
ACID 트랜잭션
Scalability
🙏 본 개념의 정리에 대한 피드백과 질문은 환영입니다!
본 개념의 다른 정리 및 피드백, 인터뷰 주제의 순서는 테크 인터뷰 스터디 Repository에서 확인 가능합니다.
티스토리 - RDBMS의 한계와 NoSQL을 사용하는 이유 (3) NoSQL 장단점, 특징
깃허브 - <데이터베이스> 관계형 vs. NoSQL 언제 무엇을 써야할까?
깃허브 - SQL과 NOSQL의 차이
티스토리 - RDB와 NoSQL의 차이는?
데이터온에어 - 데이터실무
미디엄 - Differences Between SQL And NoSQL: Is NoSQL Faster Than SQL?
미디엄 - [Elastic Search] 기본 개념과 특징(장단점)
티스토리 - [시스템 디자인] CAP 이론 정리