- 사전적인 의미로는 일반적으론 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미한다.
- 약어로는 DB라고 불리며, DB에 우리가 사용하는 데이터를 저장하지 않는다면 연결이 끊어졌을땐 휘발성으로 인해 데이터는 사라진다.
사용자와 데이터베이스 사이에서 사용자의 요청에 따라 데이터를 생성 조회 등 데이터베이스를 관리해주는 역할를 한다.
- 사전적인 의미로 해석하자면 관계형 데이터베이스 관리 시스템이라고 말할수 있다.
- 특징으로는 데이터 테이블 간의 정보가 서로 관계성을 가지고 있는것이고, 2차원의 행(row) 렬(column) 로 테이블을 표현하는 데이터 베이스이다.
- 외래 키(foreign key)를 이용하여 테이블 간의 Join이 가능하다.
- 관계형 데이터베이스랑은 다르게 테이블 간의 상호관계가 없는 것이 특징이다.
- 상호관계가 없기 때문에 테이블 간의 Join이 불가능하다.
- RDBMS의 같은 경우 관계형 데이터베이스 이기 때문에 복잡성과 용량이 한계가 있는데 이걸 극복하기 위해 등장했다.
- 데이터가 Key와 Value의 쌍으로 저장된다.
- Key는 Value에 접근하기 위한 용도로 사용되며, Value는 이미지나 비디오도 담을수 있으며 어떠한 형태의 데이터도 담을 수 있다.
- 간단한 구조이기 때문에 속도가 빠른 편이다.
대표적인 NoSQL Key-Value DB로는 Redis, AWS DynamoDB, Riak 등이 있다.
- Key-Value에서 확장된 방식으로 Key와 Document로 저장된다.
- Document가 계층적인 형태로 저장이 되고 검색에 최적화 되어있다.
- 저장되는 데이터 타입이 JSON, XML로 저장되고 JSON 타입을 사용하기 때문에 HTTP 기반의 웹서버의 경우 데이터를 편리하게 주고받을수 있다.
대표적인 NoSQL Document DB로는 MongoDB, Couch DB 등이 있다.
- 데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 저장한다.
- 객체와 관계를 그래프 형태로 표현한 것으로 관계형모델이라고 할 수 있으며, 데이터 간의 관계가 키일 경우에 적합하다.
- SNS, Network Diagrams 등에 사용되고, SNS에서 함께 아는 친구 찾기, 추천 등 연관된 데이터를 추천해주는 엔진이나 패턴 기능에 사용된다.
대표적인 NoSQL Graph DB로는 Neo4J가 있다.
- 정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장받을수 있다.
- 각 테이블 간의 관계를 정의해야 하므로, 데이터의 중복이 발생하지 않는다.
- 테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.
- 성능 향상을 위해서는 Scale-up만을 지원하기 때문에 비용이 기하급수적으로 늘어날수 있습니다.
- 스키마가 정해져 있기 때문에 데이터가 유연하지 못하며, 스키마가 나중에 변경될 경우 번거롭고 어려워 스키마가 자주 바뀌지 않는 서비스에 사용합니다.
- RDBMS와는 다르게 스키마가 없기 때문에 유연하고 자유로운 데이터 구조를 가질수있기 때문에 언제든지 자유롭게 데이터를 조정하고 필드를 추가할수 있습니다.
- 데이터 분산이 용이하며 성능 향상의 방법으로는 Scale-up과 Scale-out 모두 사용 가능하다.
- 스키마가 없기 때문에 데이터의 일관성이 존재하지 않고 데이터 구조 결정이 어려울수 있습니다.
- 데이터의 중복이 발생할수 있고 해당 데이터가 변경 될 경우 모든 컬렉션에서 update를 수행해야 합니다.