Server 05 - NoSQL
in Web-Programming on Server
기존 RDBMS의 한계
관계형 데이터베이스 관리 시스템, 통칭 RDBMS는 개발자 공부에서 DB라는 것을 배울 때 기초적으로 나오는 기본적인 데이터 베이스 관리 시스템이다. 테이블을 이용하여 정형화된 데이터를 관리하는 시스템으로서 SQL문을 써서 데이터를 만지고, 트랜잭션과 연산을 지원하는 가장 기본적인 데이터 관리 방법이 바로 RDBMS이다.
그런데 말입니다.. 모든 데이터가 형식이 정해져 있을까요? 뭔가 딱딱딱 이름과 아이디를 가지고 모든 데이터를 관리할 수 있을까요? 각자 다른 데이터들이 양이 많아지고 또 다양해지다 보니, RDBMS로 형식적으로 관리하는 데는 한계가 있습니다. 즉 수많고 다양한 데이터들을 유연하게 대치하기 위해 다른 데이터베이스 관리 개념이 필요합니다. 그래서 나온게 바로 NoSQL입니다.
NoSQL? Not Only SQL!
NoSQL, 이름을 들어보면 SQL이 아니다, 없다라고 오해할 만하다. 그러나 곧이 곧대로 읽어선 안된다. NoSQL은 Not Only SQL을 줄인 말이다. ‘SQL뿐만이 아니다’라… 이는 기존 RDBMS외 다른 것을 제공해주는 저장 기술인 것이다.
NoSQL의 정의는 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)의 스키마, 관계, 복잡한 쿼리 등에 구애받지 않는 다양한 데이터 저장 기술을 포괄하는 기술이다. 비관계형 데이터 모델을 기반으로 크게 4가지 유형으로 나눌 수 있다.
- 키-값 저장소(Key-Value Stores): 가장 단순한 형태로, 키에 하나의 값을 매핑해서 데이터를 저장. (예: Redis, DynamoDB)
- 문서 지향 데이터베이스(Document-Oriented Databases): JSON, BSON 같은 문서 형식을 사용해 데이터를 저장. 각 문서는 스키마가 없어서 서로 다른 구조의 데이터를 같은 컬렉션(테이블과 비슷한 개념)에 저장 가능. (예: MongoDB)
- 열 저장소(Column-Family Stores): 데이터를 열 기반으로 저장해서, 대용량 데이터의 빠른 조회와 집계가 필요할 때 유용. (예: HBase, Cassandra)
- 그래프 데이터베이스(Graph Databases): 엔티티(노드)들과 그 관계(엣지)를 그래프 구조로 표현하고 저장. 복잡한 관계를 효과적으로 분석할 수 있어서 소셜 네트워크, 추천 시스템 등에 사용. (예: Neo4j, ArangoDB)
NoSQL의 특징
NoSQL의 특징은 다음과 같다.
- 스키마 유연성: NoSQL 데이터베이스는 스키마가 없거나 매우 유연하다. 이로 인해 데이터 구조가 자주 변하거나 미리 정의되지 않은 애플리케이션에 유리하며, 개발자가 데이터베이스 구조에 대한 걱정 없이 빠르게 애플리케이션을 개발하고 조정할 수 있다.
- 수평적 확장성: NoSQL 데이터베이스는 수평적 확장이 가능해서, 데이터베이스 시스템을 여러 서버에 걸쳐 쉽게 확장할 수 있다. 이는 빅 데이터를 처리하거나 높은 처리량이 필요할 때 매우 유용하다.
- 다양한 데이터 모델 지원: NoSQL은 키-값 저장소, 문서 지향, 열 기반 저장소, 그래프 데이터베이스 등 다양한 데이터 모델을 제공한다. 이를 통해 애플리케이션의 요구사항에 맞춰 가장 적합한 데이터 저장 방식을 선택할 수 있다.
- 대용량 데이터 처리: NoSQL 데이터베이스는 대규모 데이터 세트를 효율적으로 처리하고 저장할 수 있는 설계가 되어 있다. 이는 빅 데이터 애플리케이션과 실시간 데이터 처리에 이상적이다.
- BASE 속성: ACID(원자성, 일관성, 고립성, 지속성) 보장이 중요한 관계형 데이터베이스와 달리, NoSQL은 BASE(기본적으로 사용 가능, 부드러운 상태, 최종 일관성)를 중시한다. 이는 더 높은 가용성과 유연성을 제공하지만, 엄격한 일관성은 희생할 수 있다.
- 쿼리 성능: 특정 NoSQL 데이터베이스는 특정 유형의 쿼리에서 매우 빠른 응답 속도를 보여준다. 예를 들어, 키-값 저장소는 간단한 조회에서 매우 빠르고, 문서 지향 데이터베이스는 복잡한 문서 구조를 빠르게 처리할 수 있다.
NoSQL & RDBMS 비교
이렇게 따지고 본다면, NoSQL이 기존의 RDBMS보다 유연하고, 확장성 있고, 성능 좋게 보이는데… 한번 요약해서 비교해보자
- 데이터 구조
- RDBMS: 정형화된 테이블 데이터 구조, 테이블간의 관계
- NoSQL: 비정형화된 데이터 구조, JSON/XML 등 유연한 데이터 관리
- 확장성
- RDBMS: 수직 확장(기존 하드웨어 성능을 늘려 더 큰 공간 확보) 방식
- NoSQL: 수평 확장(추가적인 노드를 통한 분산 처리함으로써 처리 능력 확장) 방식
- 트랜잭션 처리
- RDBMS: ACID(원자성/일관성/고립성/지속성) 원칙으로 안정적인 데이터 관리
- NoSQL: BASE(기본사용가능,부드러운 상태, 최종 일관성) 모델로 유연하고 빠르게 데이터 처리
요약을 하자면 RDBMS는 기존의 안정적인 데이터 관리를 위한 방식이고, NoSQL은 대용량 데이터를 빠르게 처리를 위한 방식이라 할 수 있다. 처음 이야기할 때 RDBMS의 한계에서 비롯된 방식이 NoSQL이라고 하지만, 실제로 데이터 주체에 따른 관리 방식에 따라 RDBMS 또는 NoSQL을 선택해서 사용해야 할 것이다.
RDBMS의 예시)
전자 상거래 시스템, 사내 인트라넷 인사 관리, 은행의 트랜잭션 처리
=> 데이터 자체와 형식에 무게가 많이 드는 방식
NoSQL의 예시)
소셜 네트워크, 대규모 비디오 스트리밍 서비스, 실시간 채팅 어플리케이션, IoT 데이터 수집 시스템
=> 유연한 그리고 대용량 데이터 구조 처리에 무게를 두는 형식
결론: 그래서 NoSQL에는 SQL이 없나요?
NoSQL = Not Only SQL;
SQL은 관계형에서 사용되는 쿼리 언어이고 NoSQL은 SQL뿐만이 아니라 그 외 다양한 쿼리 언어 또는 명령어가 사옹된다. 그저 SQL을 안 쓰는 것 대신, SQL 지원 여부와 관계없이 비관계형 데이터베이스임을 강조하며, NoSQL은 다양한 요구를 충족시키기 위해 SQL만을 고집하지 않는다는 의미로 해석한다!