Background
NoSQL
Database / DBMS
쉽게 설명하면 데이터의 집합이다. Wiki의 정의를 따르면
A database is an organized collection of data, generally stored and accessed electronically from a computer system.
라고 한다.
이 데이터베이스를 관리하기 위한 시스템을 데이터베이스 관리 시스템 (DataBase Management System; DBMS)라고 한다.
간혹 DB와 DBMS가 혼용되어 사용되는데 경험상 DB라고 지칭하면 Database를 가리키긴 보단 DBMS도 발음하기 길어서 DB라고 하더라.
전통적으로 DBMS는 많은 발전을 해왔지만 모든 모들은 Relation이 통일해 버렸다. 다양한 데이터형태를 RDBMS가 거의 다 지원을 하도록 많은 연구가 되어 있어서 RDBMS에 만족을 했었다.
그러나 현대에 들어서면서 데이터가 폭발적으로 증가하고 다양한 형태의 요구 사항들이 존재하기 시작했다. 많은 데이터/빠른 속도를 지원하는 시스템의 요구사항이 생기면서 RDBMS의 한계가 발생하고 NoSQL이 등장하기 시작했다.
왜 RDBMS가 이것을 지원하지 못하는가는 설명이 길어서 나중에 설명하겠다.
NoSQL
NoSQL, Not Only SQL, 혹 New SQL로도 불리었는데, 지금은 NoSQL이 대표적으로 쓰이는 것 같다. RDBMS의 상징적인 것이 SQL(Structured Query Language) 인데 이것을 부정하기 시작한 것이다.
많은 모델들이 연구되었고, 그중에 가장 간단한 모델인 Key-Value (KV)가 생겨났다.
Key-value는 말그대로 Key와 Value로 데이터를 나타내는 것이다. 이 모델도 RDBMS에서 비유하자면 Primary Key로 생각하면 빠르다.
비유는 저렇게 되는데 다른점은 무엇일까? KV의 Value가 보이지 않는 것이다. 즉, key로는 접근이 가능한데, value는 접근이 불가능한것이다.
이렇게만 표현하면 되는데, 이것은 scale-out의 성능 저해를 가져오는 write에 관한 질의문을 효과적으로 처리할 수 있다. 왜냐하면, 여러노드에 걸쳐서 한 record가 분산되어 있으면 write이 어렵기 때문이고, KV에서는 한 노드에저장되기 때문이다.
Scale-Up / Scale-Out
이 개념은 DBMS 수업시간에는 나오지 않는 개념이고, 분산 시스템을 배우기 시작하면 나오기 시작한다 (경험상).
말 그대로 위로 가냐 밖으로 가냐라는 것인데, 수직적으로 성능을 향상 시키는것과 수평적으로 성능을 향상 시키는것에 대한 개념이다.
쉽게 이야기하면 같은 돈으로 컴퓨터를 살때 좋은 컴퓨터 한대를 맞추는 것과 컴퓨터를 여러대를 사는 것으로 나뉘는 것으로 생각하면 빠르겠다.
두 가지 다른 개념을 왜 쓰는 것일까?
한대로 모든것을 하면 좋다, 편하다. 하지만 기술의 발전에서 어느 순간 성장이 멈췄다. moore's law라고 하는 것이 있긴 있는데, 이 법칙이 이제는 통하지 않는다. 결국 여러개를 써보자라는 것으로 대동단결되어 분산해서 시스템을 구성한다.
결국 돈이다.
JavaScript Object Notation
CAP
Last updated