사용자가 데이터베이스 내의 데이터에 접근하도록 도와주는 시스템이다.
관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해서 설계된 특수 목적의 프로그래밍 언어이다.
자료의 검색과 관리, DB 스키마의 생성과 수정, 데이터베이스 객체 조정 관리를 위해서 고안되었다.
관계형 데이터베이스 관리 시스템이라고 불리는 DBMS이며, 즉 RDB(Relational Database)를 관리하는 시스템이다. RDB는 관계형 데이터를 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다.
각각의 속성과 값을 가진 테이블들은 JOIN을 통해서 서로 관계를 맺으며 존재한다.
단, 스키마의 규격에 맞춰서 데이터를 저장하고 수정해야 한다.
스키마: 데이터베이스의 데이터를 구성하는 속성, 관계 및 제약조건 등에 대해 정의한 메타데이터의 집합
대표적인 RDBMS는 MySQL, Oracle, MSSQL 등이 존재한다.
SQL을 보완한다는 의미의 데이터베이스이며, 관계형 데이터베이스와는 다르게 데이터, 테이블간의 관계를 정의하지 않는다.
정해진 스키마가 없어서 자유롭게 데이터를 저장할 수 있다. 따라서 RDBMS 방식으로는 처리할 수 없는 복잡하고 대용량의 데이터를 처리할 수 있다.
Key-Value 형식으로 값을 나타낼 수 있고, Key값만 가지고 데이터 입출력을 진행할 수 있다. 또한 Document 형식의 NoSQL도 존재한다.
대표적인 NoSQL은 Redis, MongoDB 등이 존재한다.
RDBMS
장점
- 정해진 스키마에 따라 데이터를 저장하므로 명확한 데이터의 구조를 보장한다.
- 데이터를 중복없이 한번만 저장할 수 있다.
단점
- 데이터 처리에 대한 부하 발생시, 처리가 어렵다.
- 반드시 스키마 규격에 맞춰서 데이터를 다뤄야 하므로 유연하지 않다.
- 성능 향상을 위해서 서버의 성능을 향상시켜야 하는
Scale Up
만 지원한다. RDBMS의 특성상Scale Out
이 어렵다.
NoSQL
장점
- 정해진 스키마가 없어서 자유로운 데이터 저장이 가능하다.
- 데이터 간 관계를 정의하지 않는다.
- 복잡도가 낮아서 대용량의 데이터를 관리 및 저장할 수 있다.
- 성능 향상을 위해서 Scale Up 뿐만 아니라 Scale Out도 지원해서 유연한 성능 향상이 가능하다.
단점
- 데이터의 중복이 발생할 수 있으며, 중복된 데이터가 변경될 결우 모든 컬렉션에서 수행해야 한다.
- 명확한 데이터 구조를 보장하지 않기에 데이터 구조를 결정하기 어려울 수 있다.
- Key 값에 의한 입출력만 지원한다.
NoSQL은 대부분 분산형 구조를 띄고있기 때문에 분산형 구조의 CAP 이론을 따른다.
CAP 이론이란 이 중 2가지만 만족할 수 있다는 이론이다.
- 일관성(Consistency): 분산된 노드 중 어느 노드로 접근하더라도 데이터의 값이 같아야 한다.(데이터 복제중에 쿼리가 되는 일관성을 제공하지 않는 시스템의 경우 다른 데이터 값이 쿼리될 수 있다.)
- 가용성(Availability): 클러스터링된 노드 중 하나 이상의 노드가 실패(Fail)라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.
- 분산 허용(Partition Tolerance): 클러스터링 노드간에 통신하는 네트워크가 장애가 나더라도 정상적으로 서비스를 수행한다. 노드간 물리적으로 전혀 다른 네트워크 공간에 위치도 가능하다.