관계형 데이터베이스(RDBMS)의 데이터를 관리 및 처리하기 위해 설계된 질의(Query) 언어
단순히 정보를 저장하고 있는 공간을 DB(DataBase)라고 하진 않는다. 예를 들어,메모장에 수많은 맛집 목록에 대한 정보를 저장한다면 필요한 데이터를 저장하는 역할을 하고있지만 일반적으로 데이터베이스라고 하진 않는다는 말이다.
DB는 다음과 같이 정의할 수 있다.
DB는 컴퓨터 시스템에 어떤 방식으로도 구조화된 정보 혹은 데이터의 집합이다
앞선 예시에서 맛집에 대한 정보를 구조화하여 메모장에 저장되어 있다면, DB에 대한 개념을 만족하기에 DB라 부를 수 있다.
메모장 뿐만 아니라 많은 프로그램들이 DB의 역할을 수행하고 있고, 대표적으로 엑셀, 스프레드 시트 등이 있다.
이러한 DB에 대하여 데이터를 저장하는 공간으로서의 역할 뿐만 아니라 저장, 검색, 백업 등 다양한 관리를 할 수 있는 기능들이 제공된다면 DBMS라 부를 수 있다.
DBMS : DataBase Management System
DBMS들도 데이터의 구조화 방식에 따라 RDBMS와 Non-RDBMS로 나뉜다.
Relataional-DBMS
관계형 데이터 베이스는 다음과 같은 특징을 가진다.
앞서 메모장에 저장하려했던 맛집을 예시로 테이블을 만들어 보자.
맛집 위치 음식특징 대표메뉴 A locA 한식 김치볶음밥 B locB 중식 짬뽕 C locC 양식 크림리조또 이때, 대표 메뉴에 대해 또 다른 정보를 저장하고 있다면,
음식 칼로리 주재료 김치볶음밥 800Kcal 김치 맛집 - 음식 이라는 관계를 형성할 수 있다.
맛집 위치 음식특징 대표메뉴 A locA 한식 (음식 ->) 김치볶음밥 이어 붙히면,
맛집 위치 음식특징 음식 칼로리 주재료 A locA 한식 김치볶음밥 800Kcal 김치 이렇게 표현할 수 있다는 뜻이다.
이러한 작업(Join)을 포함하여 데이터에 대하여 SQL이라는 언어를 통해 원활하게 사용하거나 관리할 수 있다.
RDBMS로는 MySQL, ORACLE, PostgreSQL등 여러 프로그램들이 있지만 ANSI SQL이라는 Standard형태의 언어로 부터 제조사 마다 조금씩 변형하여 사용되므로 ANSI SQL을 숙지한다면 여러 RDBMS를 다루기에 용이할 수 있다.
Non-RDBMS
테이블로만 저장하는 RDBMS의 문제점에 대해 고안하며 개발되어온 형태.
Table형식이 아닌 Document(mongoDB), Graph(Neo4j), Key-Value(redis) 등 다양한 데이터 구조를 활용하여 저장한다는 특징이 있다.
앞서 살펴본 맛집 테이블 에서 맛집에서 "점포" 컬럼이 추가된 경우,
맛집 위치 음식특징 대표메뉴 점포 A locA 한식 (음식 ->) 김치볶음밥 1호점 B locB 중식 짬뽕 NULL C locC 양식 크림리조또 29호점 프랜차이즈 사업을 하지 않는 B식당의 "점포" 정보는 NULL이 들어간다.
데이터의 변동이 잦거나 형식을 규격화 하기 어려운 경우 테이블의 장점이 크게 줄어들 수 있다.
웹에서 자주 사용되는 Document방식(JSON)으로 저장한다면,
{
"맛집" : "A",
"위치" : "locA",
"음식특징" : "한식",
"대표메뉴" : {
"음식" : "김치볶음밥",
"칼로리" : 800,
"주재료" : "김치"
},
"점포" : "1호점"
},
{
"맛집" : "B",
"위치" : "locB",
"음식특징" : "중식",
"대표메뉴" : {
"음식" : "짬뽕",
"칼로리" : 900,
"주재료" : "해물"
}
// 점포는 존재하지 않음
}
이런식으로 필요한 컬럼(?)만 저장할 수 있다는 특징이 있다.
이러한 유연성은 불필요한 정보를 저장하지 않아도 되기 때문에 용량적인 면에서 이점을 가질 수 있고, 새로운 데이터를 추가하는데 있어서도 자유롭다.
각각의 장단점이 존재한다.
제공하는 서비스 혹은 사용 목적에 맞게 필요한 DBMS를 사용하자
장점
단점
from : https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
장점
단점