-
RDB
관계형 데이터베이스로, 데이터를 테이블 형태로 구성하고, 각 테이블은 행과 열의 조합으로 데이터를 저장한다. 테이블 간에는 관계를 맺을 수 있다.
-
NoSQL
비관계형 데이터베이스로, 다양한 데이터 모델을 사용하여 데이터를 저장한다. 주로 키-값, 문서, 열 지향, 그래프 형태의 데이터 구조를 사용한다.
-
RDB
데이터는 정해진 스키마에 따라 테이블에 저장된다.
데이터 간에 관계를 맺을 수 있다.
테이블 간의 관계는 외래 키를 통해 정의된다.
-
NoSQL
데이터는 스키마가 없거나 유연한 스키마를 가진다.
각 문서나 객체는 고유한 식별자가 있다. 데이터 간의 관계를 명시적으로 정의하지 않고, 중첩 구조로 표현할 수 있다.
-
중첩 구조
JSON 같은 형식으로 데이터를 저장할 때 필드를 중첩해서 저장하는 구조
ex)
{ "id": 1, "name": "Park", "age": 26, "address": { "city": "Seoul", "country": "Korea" } }
중첩 구조는 데이터 간의 관계를 명시적으로 정의하지 않고도 데이터를 효율적으로 저장하고 조회할 수 있다. 즉, 데이터를 읽는 작업이 더욱 효율적이고 빠르게 처리될 수 있다.
-
-
RDB
정형화된 데이터와 데이터 간의 관계가 중요한 경우 적합하다.
ex) 금융 거래 기록, 주문 정보 등
-
NoSQL
비정형화된 데이터, 대량의 데이터, 실시간 데이터 및 확장성이 중요한 경우에 적합하다.
ex) 소셜 미디어 데이터, 로그 파일, 센서 데이터
-
RDB
트랜잭션 처리, 복잡한 쿼리, 데이터의 일관성이 중요한 시스템
-
NoSQL
대규모 데이터 저장과 처리, 분산 시스템, 실시간 애플리케이션
왜?
-
확장성
NoSQL 데이터베이스는 수평적 확장을 지원하여 대규모 데이터 처리에 적합하다. 데이터를 여러 서버에 분산하여 저장하고 처리하는 능력을 확장할 수 있다.
-
분산 시스템
NoSQL 데이터베이스는 데이터를 여러 노드에 분산하여 처리하는 기능을 제공한다.
즉, 고가용성을 갖춘 시스템을 구축할 수 있다.
-
실시간성
데이터의 쓰기, 읽기 작업이 빠르며 다양한 인덱싱과 쿼리 기능을 제공하여 실시간으로 데이터 처리를 응답할 수 있다.
-
-
RDB
수직적 확장으로 서버의 처리 능력을 증가시킨다. 하지만 수평적 확장에는 제약이 있다.
물론 샤딩같은 기능을 지원하지만, NoSQL DB가 수평적 확장을 더 적극적으로 지원한다.
-
NoSQL
수평적 확장으로 여러 서버에 데이터를 분산하여 처리 능력을 증가시킨다.
-
RDB
트랜잭션을 통해 데이터 일관성을 유지한다.
-
NoSQL
CAP 이론을 기반으로 선택적인 일관성 모델을 사용한다.
CAP 이론이란?
-
Consistency (일관성)
분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접근하더라도 언제나 같은 데이터를 보게 되어야한다.
-
Availability (가용성)
분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야한다.
-
Partition tolerance(파티션 감내)
파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미한다.
네트워크에 파티션이 생기더라도 시스템은 계속 동작해야한다!
Consistency, Availability, Partition tolerance 라는 세 가지 요구 사항을 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다!
실세계에서 CA는 존재하지 않는다. 왜냐하면 실세계에서 네트워크 장애는 피할 수 없는 일이기 때문이다.
즉, 파티션 문제가 발생하면 일관성과 가용성 중 하나를 택해야한다.
ex)
n3 노드가 n1, n2 노드와 통신할 수 없는 상황이다.
- 일관성을 택한 경우
n1,n2,n3에 생길 수 있는 데이터의 불일치 문제를 피하기 위해 n1, n2에 대해 쓰기 연산을 중지시켜야한다.
즉, 데이터의 일관성은 유지되지만 가용성은 깨진다.
- 가용성을 택한 경우
n1, n2에 쓰기 연산을 계속 허용한다. 설사 n3에서 낡은 데이터를 반환할 위험이 있더라도.
즉, 데이터의 가용성은 유지되지만 일관성은 깨진다.