[일반] Database, DBMS

Shadis·2024년 12월 11일

일반

목록 보기
12/14

Database, DBMS

우리가 컴퓨터를 사용하는 이유는 컴퓨터를 통해 빠른 연산을 하기 위한 목적도 있지만 데이터를 저장하기 위한 목적도 있다. 데이터의 저장은 컴퓨터의 기본적인 기능 중 하나이다. 데이터를 효율적이고 체계적으로 저장하기 위해 등장한 기술이 데이터베이스(Database)와 DBMS이다.

ACID

A(Atomic) - transaction 단위로 묶여있는 query가 모두 성공하거나 아니면 모두 실패하여야 한다.
C(consistence) - 데이터의 규칙이 query가 실행된 이후에도 지속되어야 한다.
I(Isolation) - transaction이 동시에 돌아갈 때 transaction이 서로에게 영향을 주면 안된다.
D(Durable) - 성공적으로 transaction이 완료되면 그 기록은 영구히 기록되어야 한다.

이 ACID는 DB가 만족해야 하는 핵심 조건들로, 기존의 OS의 File System은 위의 조건을 만족하지 못한다. 그래서 DBMS를 따로 만드는 것이다.

Database, DBMS의 관계

데이터베이스와 DBMS는 어떤 관계이고 두 개념의 차이점이 무엇일까?

데이터베이스는 컴퓨터에 저장되는 데이터 그 자체 혹은 데이터를 저장하는 공간 자체를 의미한다.

DBMS(Database Management System)는 그런 데이터베이스를 관리하기 위한 프로그램이다. 뒤에 설명할 것이지만 데이터베이스는 RDBMS의 경우에는 SQL, NoSQL의 경우에는 각 DBMS의 데이터베이스 언어를 통해 조작된다. DBMS는 SQL(사람)과 데이터베이스의 사이에서 SQL을 해석하고 SQL의 명령에 따라 실제로 데이터베이스를 조작하는 역할을 수행한다.

흔히 데이터베이스 프로그램이라고 불리는 MySQL, MariaDB, MongoDB 등의 프로그램은 모두 DBMS이다.

DBMS의 종류

먼저, 데이터베이스의 종류를 구분하는 것은 의미가 없다. 데이터베이스는 DBMS에 따라 구조가 결정되는 데이터이므로 데이터베이스의 종류는 결국 DBMS의 종류에 따라 결정된다.

DBMS는 데이터를 저장하는 메커니즘과 SQL 사용 유무를 기준으로 크게 RDBMS, NoSQL 두 가지로 분류할 수 있다.

RDBMS

RDBMS(Relational DBMS, 관계형 DBMS)는 데이터베이스를 행과 열로 이루어진 테이블 구조로 저장하며 SQL을 사용하는 DBMS이다. 우리가 데이터베이스 하면 쉽게 떠오를 수 있는 엑셀 구조, 실생활에서 익숙하게 접해본 행과 열로 이루어진 테이블 구조로 데이터를 저장하는 DBMS가 RDBMS이다.

RDBMS 이름

RDBMS에 Relational, 관계형 이라는 단어가 붙은 이유는 데이터가 Relation(표)로 저장되었을 뿐만 아니라, 테이블에 저장된 데이터와 foreign key를 사용해서 테이블간의 관계를 형성할 수 있기 때문이다. 테이블간의 관계는 예를 들어 'B table의 특정 column은 A table의 요소 중에 하나를 가져야 한다.'와 같은 관계이다.

RDBMS 조건

초창기 RDBMS가 만들어질 당시에 RDBMS를 만든 창시자 Codds가 RDBMS가 되기 위한 12가지 조건을 만들었다. 하지만 현대에는 이 12가지 조건을 모두 따르지 않고 그 중 2가지 조건만을 사용한다.

1. 행과 열로 이루어진 테이블 구조여야 한다.
2. SQL을 사용해서 데이터를 조작해야 한다.

RDBMS 예시

RDBMS를 사용하는 대표적인 DBMS로는 MySQL, MariaDB(MySQL에서 독립), SQLite 등이 있다.

RDBMS 구조

엑셀에 데이터가 저장될 때 엑셀 파일 - 데이터 시트 - 실제 데이터 구조로 되어있는 것처럼 RDBMS도 데이터베이스 - 테이블 - 실제 데이터의 구조로 되어있다.

MySQL 이외
데이터베이스 - 스키마 - 테이블 - 데이터

MySQL
데이터베이스(스키마) - 테이블 - 데이터

스키마는 일종의 디렉토리이다.

NoSQL

NoSQL(Not Only SQL, 비관계형 DBMS)는 데이터베이스를 키:값 쌍으로 저장하며 SQL 대신 각 DBMS만의 언어를 사용하는 DBMS를 말한다.

NoSQL 이름

오해하면 안되는게 NoDBMS가 아니라 NoSQL이다. DBMS의 종류 이름인데 NoDBMS가 아니라 NoSQL인 것은 SQL을 사용하지 않는다는 특징을 강조하기 위해서라고 생각한다.

NoSQL 구조

NoSQL은 파이썬의 딕셔너리 리스트와 매우 유사한 구조를 가지고 있다. 파이썬의 딕셔너리 리스트는 키:값 쌍을 여러개 가지고 있는 딕셔너리들이 여러개 존재하는 리스트이다. NoSQL의 컬렉션(RDBMS의 테이블)에도 ID를 중심으로 여러 키:값 쌍이 들어있는 데이터가 여러개 모여있는 데이터들의 집합으로 구성되어 있다.

그런데 왜 NoSQL에서는 같은 데이터를 담는 단위를 테이블이 아니라 컬렉션이라고 부르는 것일까?

앞서 설명했듯이 RDBMS는 테이블의 구조를 정의하는 스키마를 바탕으로 행과 열로 이루어진 2차원 테이블이 만들어진다. 그리고 그 테이블의 모든 칸에는 데이터가 없더라도 None 값이 들어가야 한다. 즉, 2차원 테이블의 모든 칸이 채워져야 한다는 것이다.

하지만 NoSQL는 키:값 쌍을 저장하기 때문에 컬렉션의 구조를 정의하는 스키마가 없다. 키:값 쌍을 저장하는 것과 스키마가 없어도 되는게 무슨 상관일까?

RDBMS의 경우 열(키)가 모두 정해진 다음에 행(데이터)을 넣는 것이다. 하지만 NoSQL의 경우 키와 데이터를 함께 넣기 때문에 미리 키를 정의하지 않아도 된다는 것이고 이는 즉 미리 컬렉션의 구조를 정해놓지 않아도 된다는 것이다.

데이터베이스 - 컬렉션 - 데이터

NoSQL 특징

이런 NoSQL의 구조 때문에 NoSQL은 RDBMS보다 용량이 작고 가볍다는 특징이 있다. RDBMS는 모든 테이블의 값을 넣어야 하지만 NoSQL은 필요한 키:값만 넣기 때문이다.

SQL

SQL(Structured Query Language)은 데이터베이스의 조작, 조회, 관리 등을 위해 RDBMS에서 해석되는 데이터베이스 언어이다. 여기서 Query라는 단어는 한국어로 "질의"라고 해석되지만 SQL에서의 Qeury는 질의보다는 "문의"라는 뜻에 더 가깝다. REST(Representational State Transfer) 웹 서비스 설계 원칙이 리소스에 대한 "표현"으로 서버와 클라이언트 간의 통신을 구조화했듯이, SQL도 개발자와 RDBMS의 통신 수단을 RDBMS에 대한 "문의"와 그에 대한 답변으로 구조화하였다.

앞서 RDBMS의 조건 중에 SQL을 사용해야 한다는 조건이 있다고 하였다.

2. SQL을 사용해서 데이터를 조작해야 한다.

즉, 모든 RDBMS는 같은 SQL을 사용한다. 하지만 DBMS마다 SQL의 표준을 지키면서 추가적인 기능을 제공하는 등 DBMS별로 SQL 문법이나 기능이 조금씩 다르기도 하다.

NoSQL는 SQL을 사용하지 않고 SQL을 닮은 언어라든지, HTTP API라든지, 자체적인 언어를 사용하는 등 NoSQL 별로 각자 정해진 소통수단을 사용한다.

SQL Query문 종류

SQL query문은 DDL, DML, DCL 세 종류로 나뉜다.

DDL(Data Definition Language)는 데이터베이스 생성, 테이블 스키마(테이블 구조) 생성 등 데이터를 저장하기 위한 데이터베이스와 테이블을 조작하는 query문이다.

CREATE DATABASE my_database;

CREATE TABLE my_table (
	key INT PRIMARY KEY,
	name VARCHAR(100)
);

DML(Data Manipulation Language)는 실제 데이터베이스에 저장된 데이터를 생성, 삭제, 조회 등 조작하는 query문이다.

INSERT INTO 'my_table'(...) VALUES ...;
SELECT * FROM 'my_table' WHERE ...;

DCL(Data Control Language)는 데이터베이스의 이용자 권한과 관련된 query문이다.

profile
HGU 20 김민석

0개의 댓글