
데이터베이스 관리 시스템으로 RDMS이 널리 쓰이고 있지만 대용량 데이터 저장, 비정형 데이터 저장, 빠른 응답시간 등의 새로운 요구사항에 기존 RDBMS만으론 대응하기 어려울 때가 있다.
그래서 RDBMS와 다른 데이터베이스 관리 툴인 NoSql이 등장했다.
관계형 데이터베이스 관리 시스템
-> 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원의 열과 행(테이블)의 형태로 표현
외래 키(foreign key)를 사용하여 테이블 간 join이 가능
ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 기본으로 구성
정해진 스키마에 따라 데이터를 저장해야 해서 명확한 데이터 구조 보장 (데이터 정합성)
각 데이터를 중복 없이 한 번만 저장 가능 (데이터 무결성)
데이터 정합성 (Consistency)
-> 어떤 데이터들이 값이 서로 일치하는 상태
데이터 무결성 (Integrity)
-> 데이터가 전송, 저장되고 처리되는 모든 과정에서 변경되거나 손상되지 않고 완정성, 정확성, 일관성을 유지함을 보장하는 특성
데이터 베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것이다. 개체의 특성을 나타내는 속성(Attribute)과 속성들의 집합으로 이루어진 개체(ENtity), 개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들이 유지해야 할 제약조건들을 기술한 것입니다.스키마가 뭘까?
테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리 발생 가능
성능 향상을 위해 Scale-up만 지원
-> Scale-out이 불가능하기 때문에 처리 비용이 기하급수적으로 커질 수 있음
스키마로 인해 데이터가 유연하지 못함
-> 나중에 스키마가 변경될 경우 번거롭고 어려움
SQL을 사용하지 않는다는 의미에서 NoSQL이 아니라, RDBMS가 갖고 있는 특성뿐만 아니라 다른 특성들도 부가적으로 지원한다는 의미이다.

1. Key-Value DB
2. Document DB
3.Wide Column DB
4. Graph DB
스키마가 없어 유연하고 자유로운 데이터 구조
-> 언제든 저장된 데이터 조정과 새로운 필드 추가가 가능
성능 향상을 위해 Scale-up / Scale-out이 모두 가능
-> 데이터 분산이 용이하고, RDBMS에 비해 대용량의 데이터 저장 가능
스키마가 존재하지 않아 데이터의 일관성이 존재하지 않고 데이터 구조를 결정하기 어려울 수 있음
데이터의 중복 발생 가능
-> 이 경우 데이터를 변경하려면 모든 컬렉션에서 update해야 함