NoSQL은 Not-Only SQL, Non Relational SQL 등등 여러 의미로 사용되는, 기존의 관계형 데이터베이스와는 다른 새로운 방식의 데이터베이스를 가리키는 용어의 총칭이다. SQL만으로 데이터를 다루지 않고, 비관계형으로도 데이터를 다루는 방식의 데이터베이스를 NoSQL 데이터베이스라고 한다.
NoSQL이라고 무조건 데이터 간에 관계가 없는 것은 아니다. 관계형 데이터베이스와 방식은 다르지만 관계 데이터를 저장할 수 있다.
Agile 방식의 개발이 늘어나면서, 요구사항도 훨씬 빠른 속도로 변하기 시작했다. 이를 뒷받침하기 위해서는 소프트웨어 스택 전반에서 데이터 구조 등에도 신속한 변경이 이뤄져야 하는데, NoSQL은 이러한 구조 변경에 유연성 제공해준다.
또한 클라우드를 이용한 개발 및 배포 환경이 늘어나, 여러 서버와 리전에 데이터를 분산하는 방식도 많이 이용하고 있다. 이러한 환경에 알맞은 Scale-Out도 NoSQL에서는 쉽게 이용할 수 있다.
문서 데이터베이스
JSON 객체와 비슷한 문서에 데이터 저장
필드와 값의 쌍이 포함
개발자가 코드에서 사용하고 있는 객체에 맞춰 조정
수평 스케일아웃이 가능
MongoDB
키-값 데이터베이스
각 항목에 키와 값이 포함되어 있는 유형
대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 사례에 적합
사용자 선호도 저장 또는 캐싱에 사용
Redis, DynamoDB
와이드 컬럼 스토어
테이블, 행, 동적 열에 데이터를 저장함
각 행이 동일한 열을 가질 필요가 없음
대량의 데이터 저장에 적합
사물인터넷 데이터와 사용자 프로필 데이터 저장에 사용
Cassandra, HBase
그래프 데이터베이스
노드와 엣지에 데이터를 저장
노드 - 사람, 장소 및 사물에 대한 정보 저장
엣지 - 노드 간의 관계에 대한 정보 저장
소셜 네트워크, 권장 엔진 같은 패턴을 찾아보기 위해 관계를 상세히 검토해야 하는 사용 사례에 적합
Neo4j, JanusGraph
관계형 | NoSQL | |
---|---|---|
적합한 작업 | 일관성이 중요한 온라인 트랜잭션 프로세싱 어플리케이션 | 낮은 지연 시간의 어플리케이션을 포함한 수많은 데이터 액세스 패턴 반정형 데이터 분석 |
데이터 모델 | 행과 열로 구성된 테이블로 정규화 스키마 - 테이블, 행, 열, 인덱스, 관계 등을 정확하게 규정 테이블 사이의 참조 무결성 실현 | 키-값, 문서, 그래프 등 성능과 규모 확장에 최적화된 다양한 데이터 모델 제공 |
ACID 속성 | Atomicity Consistency Isolation Durability | 유연한 스케일 아웃을 위해 일부 ACID 속성을 완화 스케일 아웃 사용 사례에서 높은 처리량, 낮은 지연 시간을 위한 선택이 될 수 있음 |
성능 | 디스크 하위 시스템에 따라 다름 최고 성능을 위해 쿼리, 인덱스 및 테이블 구조를 최적화해야 함 | 기본 하드웨어 클러스터 크기, 네트워크 지연 시간 및 호출 어플리케이션의 기능에 달려있음 |
확장 | 하드웨어의 계산 성능을 높이거나, 읽기 전용 워크로드의 복제물을 추가해야 함 (Scale-Up) | 분산형 아키텍처를 사용해 액세스 패턴이 확장 가능함 (Scale-Out) |
API | SQL을 준수하는 쿼리를 사용하여 전달 | 객체 기반 API를 통해 데이터 구조를 저장 및 검색 |