데이터실무

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

NoSQL 범주

데이터 저장
분산데이터베이스(NoSQL)
NoSQL 범주
작성자
admin
작성일
2021-02-15 13:46
조회
1332

NoSQL은 크게 데이터 모델 방식에 따라 분류되면서 한편으로는 시스템 구성별로 분류된다. 물론 각 방식과 구성에 따라 특성이 다르고 활용도가 다르기 때문에 하나씩 살펴보자.


데이터 모델별 분류

[그림 Ⅱ-2-3] NoSQL의 진화

[그림 Ⅱ-2-3] NoSQL의 진화

위 그림은 주요 NoSQL 유형의 진화를 묘사한 것이다. 다양한 유형의 발전과 진화에 따라 NoSQL이 점차 SQL의 위치를 위협하고 있음을 보여주고 있다.


키밸류(KeyValue)

가장 기초적이면서도 다른 데이터 모델의 기본이 되는 모델이다. 키밸류 모델은 특정 값을 조회용 고유 키와 매핑해 정해진 스키마 없이 저장되는 방식이다. HashMap처럼 키 값은 모두 고유한 값이어서 특정 키를 대상으로 랜덤액세스 할 때 유용하며, 정해진 데이터 모델이 없어 분산 시스템 또는 데이터베이스에 자주 등장한다. 다만 키밸류 간 연속성이 없어 영역 스캔이나 조회 시 성능이 불안정할 수 있다.

관련제품 - SimpleDB, Dynamo, Memcached, Coherence, Riak, Redis


순차적 키밸류(Ordered KeyValue)

KeyValue 모델에 데이터 간 연속성을 추가해 영역 스캔에 힘을 더하였다. 디스크에 키밸류 쌍을 순차적으로 저장한다.

관련제품 - Tokyo Cabinet, MemcacheDB, BerkeleyDB


빅테이블(Bigtable)

구글에서 발표한 「빅테이블」논문에서 지어진 이름이며, 테이블 형식(Tabular)이라고도 불린다. 순차적 키밸류 모델에 데이터 모델링이 가능하도록 변경된 모델이다. 키밸류 또는 순차적 키밸류 모델에서는 데이터를 바이너리나 텍스트 형태로만 보관이 가능해 애플리케이션 단에서 데이터 구조를 재형성해야 했다. 빅테이블 모델에서는 재귀적 데이터 구조를 형성할 수 있지만 성능 저하를 방지하기 위해 데이터 구조를 2~3단계까지만 허용한다.

관련제품 - DBase, Cassandra, Cloudata, Hypertable, Accumulo


도큐먼트(Document)

오브젝트형 데이터베이스(Object Database)가 NoSQL 형태로 파생된 모델이라 볼 수 있다. 다만 오브젝트 대신 XML, JSON, YAML, 바이너리와 같은 형태의 문서를 저장한다. 빅테이블 모델보다 기능 중심적인 도큐먼트 모델은 데이터 구조 깊이에 제한을 두지 않는다.

관련제품 - MongoDB, CouchDB, Couchbase, Cloudant, ElasticSearch


그래프(Graph)

빅데이터를 수집ㆍ저장하기 위해 모든 데이터베이스 기능을 제외하고 원초적인 키밸류 모델로 시작하더니 이젠 다시 데이터 간 관계를 형성시키려 한다. 하지만 그래프와 관계형 데이터베이스는 분명한 차이가 있다. 일단 데이터 모델이 관계형은 고정적이지만 그래프는 가변적이다. 노드 데이터를 복잡하게 구조화할 수 있고, 노드 간 관계를 수의 제약 없이 형성할 수 있다. 관계형은 엔티티간의 관계를, 그래프는 노드 사이의 연결을 지향한다. 예를 들어 ‘노드 A는 노드 B에 종속한다’ 또는 ‘A -> B’ 형식이다. 이러한 이유로 사용자 간 또는 제품 구매 간 관계 도출 같은 분석 시스템에 자주 쓰인다.

관련제품 - Neo4j, FlockDB

데이터 모델별 특성은 다음과 같다.

[표 Ⅱ-2-1] 데이터 모델별 특성 (*na = 제품마다 다름)


데이터 모델 성능 확장성 유연성 복잡도 기능
키밸류
빅테이블
도큐먼트
그래프 na na
관계형 na na

시스템 구성별 분류

지금까지는 데이터 모델, 즉 논리적인 관점의 NoSQL이었다. 이번에는 시스템 측면에서 대규모 데이터베이스를 구축하기 위해 NoSQL이 어떻게 관리되는지 알아보자.


마스터-슬레이브

마스터-슬레이브는 하나의 마스터 노드가 다수의 슬레이브 노드를 관리하기 위해 슬레이브 및 데이터의 메타 정보를 보관하는 방식이다. 이러한 마스터-슬레이브 방식은 클러스터에 서버를 추가하거나 삭제하는 작업은 비교적 쉽게 할 수 있다. 하지만 메타데이터를 관리하는 마스터 서버에 부하가 발생할 수 있으며, 마스터가 고장나면 전체 클러스터가 중단될 수 있다. 서비스의 지속성이 중요하다면, 마스터 HA6) 또는 이중화를 제공하는지 확인하고 선택해야 할 것이다.


라운드테이블 방식

[그림 Ⅱ-2-4] Dynamo의 DHT

[그림 Ⅱ-2-4] Dynamo의 DHT

라운드테이블은 DHT7)를 각 노드에 저장하는 방식이다. DHT는 일종의 해시테이블(HashTable)인데 DHT의 키는 미리 정의된 해시키이고 DHT의 밸류는 노드의 위치다. 그림처럼 각 노드는 자신이 할당받은 키값보다 높은 키영역의 데이터를 포함한다. 즉 노드 B는 Key K를 포함한 노드A와 B사이의 모든 키데이터를 보관하며, 복제 계수 N-1만큼의 노드로 복제한다. 그러면 노드 C와 D도 A-B영역의 데이터를 보관하게 된다. 별도의 마스터서버가 없기 때문에 고가용성 측면에서 좋다. 하지만 클러스터에 멤버 노드를 추가/삭제할 때 노드들간 데이터 이동이 발생하는데, 이때 대량의 네트워크 트래픽이 발생할 수 있다.
지금까지 다양한 NoSQL 제품군과 동작방식에 따른 분류를 알아보았다. 현재 주어진 업무나 비즈니스에 필요한 NoSQL이 눈에 보이는 사람도 있고, 아직 확답이 오지 않는 독자도 있을 것이다. 이러한 분은 NoSQL이 정말 필요한지 고민해 보거나 정확한 요구사항이 도출되었는지부터 다시 확인해 볼 필요가 있다.