데이터 저장소는 기존의 RDBMS에서 처리해왔다. RDBMS에 데이터를 넣기 위해서는 데이터를 일반화 시켜서 정해진 컬럼으로 정규화하고 관계를 정의해야한다. 그러나, 최근의 서비스들은 크기와 구조를 예측할 수 없는 비정형 데이터에대한 요구가 증가하고 있습니다.
비정형 데이터
비정형 데이터의 예를 들어보면, JSON과 같은 데이터는 구조에 따라 저장된 데이터지만 데이터 내용 안에 구조에 대한 설명이 함께 존재합니다. 그렇기 때문에 데이터 내용에 대한 설명인 구조를 파악하는 파싱 과정이 필요합니다. 웹에서 데이터를 교환하기 위해 작성하는 많은 HTML, XML, JSON 문서나 웹 로그, 센서 데이터 등은 모두 비정형 데이터에 속합니다.
이러한 데이터를 기존의 RDBMS에 적재하기 위해서는 많은 정규화 과정을 거쳐야하기 때문에 복잡한 과정이 필요합니다.
그 외에도 소셜 데이터의 텍스트, 이미지, 영상, 워드나 PDF 문서와 같은 멀티미디어 데이터가 대표적인 예다. SNS 이용률이 크게 높아지면서 실시간으로 많은 양의 비정형 데이터가 생산되고 있고 처리를 필요로 하고 있습니다.
NoSQL 이란?
NoSQL이란 용어는 No SQL, Not Only SQL을 의미한다. 기존의 관계형 데이터베이스를 대표하는 SQL(Structured Query Language)외에도 다른 형태의 비정형 데이터를 저장하는 방법을 추구한다는 의미를 갖습니다.
그러므로, NoSQL은 기존의 RDBMS와 다른 RDBMS의 한계를 극복하는 구조를 갖지만 RDBMS에서 제공하는 일부 주요 기능을 포기했습니다.
그러므로, NoSQL은 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Duarabity) 특성을 제공하지 않는, 그렇지만 뛰어난 확장성이나 성능 등의 특성을 갖는 수많은 비관계형, 분산 데이터 베이스를 말합니다.
NoSQL의 특징
NoSQL 데이터베이스는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키-값(Key-Value) 저장 기법을 사용하여, 응답속도나, 처리 효율 등에 있어서 빠른 성능을 추구합니다. NoSQL의 특징들을 요약하면 기존 관계형 데이터베이스와 다음과 같은 차이를 갖고 있습니다.
- 관계형 모델을 사용하지 않고, Documents, 키-값 모델을 사용함
- 테이블간의 조인 기능 없음
- 비SQL 인터페이스를 통한 데이터 접근(Documents, key-value 모델)
- 여러 대의 서버를 묶어서(클러스터링) 서비스 하는 분산 기능을 제공함
- RDBMS에서 지원하는 Transaction ACID 미지원
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less, Documnets, key-value)
- 고가용성: 중단 없는 서비스와 자동 복구 기능지원
- 확장성: 노드 확장 지원
- 실시간 응답: 키-값 구조를 통해서 실시간으로 데이터 검색을 지원
- 다수가 Open Source로 제공
가장 인기있는 NoSQL 데이터베이스는?
Redis는 스택오버플로우에서 가장 사랑받는 데이터베이스로 2017년 부터 2021년까지 5년동안 선정되었습니다.
Redis는 Remote Dictionary Server의 약자로 고성능 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 비관계형(NoSQL) 인메모리 데이터베이스 입니다.
그럼, 왜 레디스가 인기 있고, 실제로 어떨때 쓰이며, 장 단점은 어떤 것들이 있는지 이어서 포스팅 하도록 해 보겠습니다.