NoSQL 개요: 등장 배경, CAP/BASE, 그리고 대표적 데이터 모델
이 글은 제가 2025년 8월 31일에 진행한 “NoSQL 기본 개념 및 이론” 세미나 내용을 기반으로 작성되었습니다.
NoSQL의 정의 및 등장 배경
NoSQL은 ‘Not only SQL’의 줄임말로, 관계형 데이터베이스(RDBMS)가 아닌 다른 데이터 모델 기반의 데이터베이스 시스템을 사용하는 움직임입니다. NoSQL은 RDBMS가 가진 엄격한 스키마 및 ACID(Atomicity, Consistency, Isolation, Durability) 트랜잭션 모델의 한계를 극복하기 위해 등장했습니다.
웹, 모바일, 사물 인터넷(IoT) 기기 등으로부터 발생하는 데이터의 양과 속도가 폭발적으로 증가하고 있습니다. 이러한 데이터의 특성은 빅데이터의 3V로 요약할 수 있습니다.
- Volume (규모): 처리해야 할 데이터의 양이 굉장히 크게 증가했습니다.
- Velocity (속도): 데이터가 생성되고 소비되는 속도가 매우 빨라졌습니다.
- Variety (다양성): 데이터의 형태가 정형 데이터뿐만 아니라 반정형 및 비정형 데이터까지 포함하며 다양해졌습니다.
전통적인 RDBMS는 이러한 3V의 특성을 처리하는 데 있어 여러 한계에 직면합니다.
- Volume & Velocity: 전통적인 RDBMS는 엄격한 ACID 트랜잭션 모델 때문에 데이터 분산 및 처리에 오버헤드가 발생합니다. 이로 인해 수평적 확장이 어렵고, 빠르게 생성되는 대용량의 데이터를 처리하는 데 한계가 나타납니다.
- Variety: RDBMS는 고정된 스키마를 요구하므로, 형태가 일정하지 않은 비정형 또는 반정형 데이터를 저장하기 어렵습니다.
NoSQL의 일반적인 특징
NoSQL 시스템은 RDBMS와 구분되는 몇 가지 공통적인 특징을 가집니다.
- 유연한 스키마: 엄격한 스키마 없이 데이터를 저장할 수 있어 다양한 형태의 데이터 관리에 용이합니다.
- 어그리게이션 지향(Aggregation oriented): RDBMS의 정규화(Normalization)와 달리, 관련 데이터를 하나의 단위로 묶어 저장하여 데이터 접근을 단순화합니다. 이는 비정규화(de-normalization)된 형태로 데이터를 관리하는 것을 의미합니다.
- 약한 일관성 모델: RDBMS의 ACID와 달리, BASE라는 일관성 모델을 따릅니다. 이는 강력한 일관성을 일부 완화하여 높은 가용성(high availability)과 낮은 지연 시간(low latency)을 확보합니다.
- 분산 처리 친화성: NoSQL은 처음부터 분산 환경에 최적화되어 설계되었기 때문에 여러 서버에 데이터를 분산하여 저장하고 처리하는 데 있어 훨씬 효율적입니다. 이로 인해 대규모 환경에서 수평적 확장이 용이합니다.
NoSQL의 주요 이론: CAP 및 BASE
NoSQL의 약한 일관성 모델을 이해하기 위해서는 CAP 정리를 먼저 살펴봐야 합니다. CAP은 2000년 Eric Brewer가 CAP Conjecture라는 가설로 제안하였으며, 이후 2002년 Seth Gilbert와 Nancy Lynch에 의해 증명되었습니다. 이 이론은 분산 시스템이 일관성(Consistency), 가용성(Availability), 분할 내성(Partition tolerance) 중 최대 두 가지만을 동시에 만족할 수 있다는 것을 설명합니다.
- 일관성(Consistency): 모든 클라이언트가 어느 노드에 접근하든 동일한 최신 데이터에 접근할 수 있도록 보장합니다.
- 가용성(Availability): 시스템의 모든 노드가 요청에 대해 항상 응답할 수 있도록 보장합니다.
- 분할 내성(Partition tolerance): 네트워크 분할(노드 간 통신 단절)과 같은 장애 상황에서도 시스템이 정상적으로 동작하는 것을 보장합니다.
NoSQL은 일반적으로 가용성과 분할 내성을 선택하고, 일관성을 일부 희생하는 경향을 보입니다. 많은 NoSQL 시스템이 채택하는 BASE 모델은 이러한 가용성 중시의 결과입니다.
- Basically Available: 시스템의 모든 노드가 데이터를 처리할 수 있도록 보장합니다. 노드 장애가 발생해도 시스템은 지속적으로 동작합니다.
- Soft state: 데이터의 상태는 트랜잭션 종료 후에도 즉각적으로 일관되지 않을 수 있으며, 이는 입력이 없어도 시스템의 상태가 변할 수 있다는 의미를 포함합니다. 데이터의 최종적인 상태는 일정 시간이 지나야 확정됩니다.
- Eventually consistent: 모든 노드에 데이터 업데이트가 전파되면, 최종적으로 모든 노드가 동일한 데이터를 갖게 됩니다. 이러한 일관성은 즉각적이지 않고 시간이 걸립니다.
주요 NoSQL 데이터 저장소
NoSQL은 저장하는 데이터의 형태에 따라 크게 네 가지로 분류됩니다. 이 섹션에서는 각 데이터 저장소의 특징과 대표적인 예시를 설명합니다.
키-값 저장소(Key-value stores)
키-값 저장소는 데이터를 고유한 키(Key)와 이에 연결된 값(Value)의 쌍으로 저장합니다. 이는 가장 단순한 형태의 데이터 모델로, 매우 빠른 읽기 및 쓰기 성능을 제공합니다. 값의 형태에는 제약이 없으므로, 문자열, JSON 객체, 이미지, 파일 등 다양한 데이터를 저장할 수 있습니다. 이러한 단순성 덕분에 Redis, RocksDB, AWS DynamoDB와 같은 시스템에 널리 활용됩니다. 대부분의 키-값 저장소는 내부적으로 LSM-Tree(Log-Structured Merge-Tree)를 사용하여 쓰기 성능을 최적화합니다.
와이드-컬럼 저장소(Wide-column stores)
와이드-컬럼 저장소는 RDBMS가 사용하는 테이블 구조와 같은 방식으로 데이터를 구성하지만, 스키마에 컬럼이 미리 정의되지 않아도 동적으로 컬럼을 추가할 수 있습니다. 즉, 각 행이 서로 다른 컬럼 집합을 가질 수 있습니다. 이는 스파스(sparse) 데이터를 관리하는 데 유리합니다. Apache Cassandra와 HBase가 대표적인 예시이며, 대규모 로그 데이터나 시계열 데이터와 같이 행마다 열이 다양하게 추가되는 환경에 적합합니다. 대부분의 와이드-컬럼 저장소는 키-값 저장소를 스토리지 엔진으로 사용합니다.
문서 저장소(Document stores)
문서 저장소는 데이터를 문서(Document) 형태로 저장합니다. 이 문서는 일반적으로 JSON과 같은 반정형 데이터 형식을 따릅니다. 문서 내의 값으로 다시 중첩된 문서(nested-document)가 들어갈 수 있어 전체적으로 트리(Tree) 형태의 계층 구조를 가집니다. 문서 저장소는 고정된 스키마가 필요 없어 구조가 다른 데이터를 동일한 컬렉션에 저장할 수 있으므로, RDBMS의 고정된 테이블 구조보다 훨씬 유연합니다. MongoDB와 Couchbase가 널리 사용됩니다. MongoDB는 내부적으로 WiredTiger라는 스토리지 엔진을 사용합니다. 이 엔진은 데이터를 저장할 때 JSON과 유사한 이진 포맷인 BSON을 사용하여 효율적으로 문서를 관리합니다.
그래프 저장소(Graph stores)
그래프 저장소는 데이터 엔티티를 나타내는 정점(Vertex)과 그들 간의 관계인 간선(Edge)으로 표현되는 그래프 데이터를 저장하는 데 사용됩니다. 이러한 구조는 복잡한 관계를 효율적으로 탐색하는 데 강점을 가지며, 소셜 네트워크, 추천 시스템, 지식 그래프 등에 활용됩니다. Neo4j가 대표적인 예시이며, Neo4j는 index-free adjacency라는 스토리지를 사용해 데이터 노드와 관계를 직접적인 포인터로 연결하여 빠른 탐색 속도를 보장합니다.
결론
이 글에서는 NoSQL의 정의, 등장 배경, 일반적인 특징, 그리고 주요 데이터 모델에 대해 개괄적으로 살펴보았습니다. 다음 글부터는 각 모델 별 저장소의 스토리지 엔진에 대해 더 깊이 있게 논의할 예정입니다.