'NoSQL'에 해당되는 글 1

  1. 2011.02.23 NoSQL - 클라우딩 컴퓨팅 환경에서의 데이터 관리
IT/Tech Notes | Posted by 철규님(최규철) 2011. 2. 23. 01:22

NoSQL - 클라우딩 컴퓨팅 환경에서의 데이터 관리



NoSQL(Not only SQL)은 데이터베이스 관리 시스템(Database Management System, DBMS)을 의하는 용어인데, 최근에는 그 동안 사용되어 온 관계형 데이터베이스 관리 시스템(Relational Database Management System, RDBMS)과 대치되는 용어로 자주 사용된다.

덕분에 가장 쉽게 NoSQL에 대한 개념을 정리하려면 RDBMS와 어떻게 다른가를 찾아보면 된다. 대표적으로 정리되는 NoSQL의 특징은 아래와 같다.

  • 고정된 테이블 스키마 없음
  • 테이블 간의 JOIN 연산을 하지 않음
  • 수평적인 확장성이 있음
  • 대용량(heavy) 읽기/쓰기 성능이 좋음

개략적은 특징은 위와 같이 정리할 수 있지만, 더 자세한 내용을 알기 위해서는 DB의 기본적인 이론, RDBMS의 특징, NoSQL의 등장 배경 등에 대해서도 알아보아야 한다.


CAP Theorem은 분산형 시스템에서 아래의 세 가지 특성 모두를 제공하는 것이 불가능하다는 것을 언급하고 있는 정리이다.

 

  • Consistency : 모든 노드는 동시에 같은 데이터를 가지고 있음
  • Availability : 모든 노드는 항상 동작 해야함
  • Partition Tolerance : 전체 시스템은 물리적으로 분리된 노드 상에서도 잘 동작해야 함

CAP Theorem에 따르면 위의 세 가지 중에 최대 두가지 특성만을 적용할 수 있고, 때문에 분산형 시스템을 설계할 때는 그 시스템의 특성에 따라 필요한 특성을 골라 시스템을 구성해야 한다.

기존의 RDBMS를 위의 특성에 대입해서 판단한다면, RDBMS가 사용될 당시에는 데이터의 항시성과 무결성이 가장 중요한 요소이었기 때문에 RDBMS는 CA 특성을 가진 시스템에 해당 된다.

하지만 네트워크 발전으로 인해 많은 양의 데이터가 생겨나고 이를 처리하기 위해 클라우드 컴퓨팅 등 분산 처리 시스템이 도입되면서 기존의 RDBMS는 이를 위한 확장성을 지원하는 못하는 한계를 드러내게 된다. 때문에 기존의 RDBMS가 가지는 CA 특성 중 하나를 포기하고 P 특성을 도입하기 위한 다양한 시도들이 나오게 되는데, 그 과정에서 NoSQL이 나타나게 된다.

시스템이 사용되는 환경에 따라서 P를 중심으로 C 또는 A 특성을 추가하게 되는데, 대표적인 실사용예는 다음과 같다.

  • Google: BigTable - Consistency + Partition Tolerance
  • Amazon: Dynamo - Availability  + Partition Tolerance
  • Digg.com: Cassandra - Availability  + Partition Tolerance
  • Twitter: Cassandra - Availability  + Partition Tolerance


이처럼 NoSQL이 기존의 RDBMS가 가지던 CA 특성 중 하나를 포기하고 P를 선택함에 따라서 RDBMS가 가지는 일부의 장점을 잃게 되었다. 대표적인 것이 ACID이다.

  • Atomic : 데이터 처리의 원자성. 성공 또는 실패만 존재. 처리 중간에 정지할 수 없음
  • Consistent : 데이터의 일관성. 서로 다른 세션에서 동시에 참조할 경우 데이터는 항상 동일 해야 함
  • Isolated : 데이터 처리 트랜젝션 중에는 다른 세션에서 데이터를 참조할 수 없음
  • Durable : 데이터 처리 트랙젝션이 종료되면 완료된 값은 항상 유지되어야 함.


NoSQL의 경우에는 위의 네 가지를 모두 보장하지 않는데, 예를 들면 CAP 중 C를 포기하고 AP를 채용한 Cassandra 같은 경우에는 100%의 Consistency를 포기하고 Eventually consistency를 지원한다. 즉, Cassandra를 이용하는 시스템의 경우 동일한 데이터에 어떤 클라이언트에서는 값을 쓰고, 어떤 클라이언트에서는 값을 읽는 다면 두 클라이언트가 가지는 데이터 값이 다를 수도 있다는 것이다.

NoSQL은 구조화된 스키마를 가지지 않고 STL의 MAP 컨테이너와 유사한 Key-Value 방식으로 데이터를 저장한다.
분류적으로는 Key-Value 방식 이외에도 GraphDB, Documente-Oriented DB, Column-Orinted DB 등이 있지만, 넓은 의미에서 MAP 컨테이너의 Key-Value 방식으로 저장된다고 보면 된다.

NoSQL을 구성하는 아키텍처는 구현하는 시스템에 따라 매우 다양하지만, 큰 공통점은 아래와 같다.

  • 각각의 물리적 노드는 내부에 가상의 노드를 가지기도 함
  • 가상의 노드는 여러 물리적 노드에 복제본을 가지고 있음 => 물리적 노드 및 그 내부에 가상의 노드를 추가하고 기존의 데이터를 복제함으로써 수평적 확장성 지원
  • Key를 기준으로 검색 요청이 올 경우 물리적 노드를 대상으로 Hashing, Tree searching, Key meta server 등을 이용하여 해당 노드에 접근함


특정한 표준에 의해 만들어진 기술이 아닌 필요에 의해서 만들어진 기술이기 때문에 구체적인 내용에서는 많은 차이점을 가진다. 하지만 어떤 NoSQL 제품을 사용하던 개념적인 큰 틀은 이러한 내용에서 벗어나지 않는다고 볼 수 있다.

댓글을 달아 주세요