Relational DBMS
Background: Relational DBMS
DBMS란?
일상 생활에서 생기는 다양한 정보를 기록하기 위해 다이어리와 노트를 사용하듯이, 컴퓨터도 정보를 기록하기 위해 데이터베이스 (Database)를 사용한다. 그리고 데이터베이스를 관리하는 애플리케이션을 **DataBase Management System(DBMS)**이라고 한다.
다수의 사람들이 데이터를 생성하고, 참조하고, 수정하는 웹 서버의 특수한 환경에 가장 적합한 자료구조로 채택된 것이 데이터베이스이며, 최근의 웹 서비스에는 거의 필수적으로 포함되어야 한다.
웹 서비스는 데이터베이스에 정보를 저장하고, 이를 관리하기 위해 **DataBase Management System (DBMS)**을 사용한다.
DBMS는 데이터베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정, 삭제하는 역할을 한다.
DBMS는 다수의 사람이 동시에 데이터베이스에 접근할 수 있고, 웹 서비스의 검색 기능과 같이 복잡한 요구사항을 만족하는 데이터를 조회할 수 있다는 특징이 있다.
DBMS는 크게 관계형과 비관계형을 기준으로 분류하며, 다양한 종류의 DBMS가 존재합니다.
종류 대표적인 DBMS
Relational | |
(관계형) | MySQL, MariaDB, PostgreSQL, SQLite |
Non-Relational | |
(비관계형) | MongoDB, CouchDB, Redis |
Relational DBMS
**Relational DataBase Management System (RDBMS, 관계형 RDBMS)**는 1970년에 Codds가 12가지 규칙을 정의하여 생성한 데이터베이스 모델이다.
RDBMS는 행 (Row)과 열 (Column)의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리하고, 테이블 형식의 데이터를 조작할 수 있는 관계 연산자를 제공한다.
Codds는 12가지 규칙을 정의했지만 실제로 구현된 RDBMS들은 12가지 규칙을 모두 따르지는 않았고, 최소한의 조건으로 앞의 두 조건을 만족하는 DBMS를 RDBMS라고 부르게 되었다.
RDBMS에서 관계 연산자는 **Structured Query Language (SQL)**라는 쿼리 언어를 사용하고, 쿼리를 통해 테이블 형식의 데이터를 조작한다.
SQL
**Structured Query Language (SQL)**는 RDBMS의 데이터를 정의하고 질의, 수정 등을 하기 위해 고안된 언어이다.
SQL은 구조화된 형태를 가지는 언어로 웹 애플리케이션이 DBMS와 상호작용할 때 사용된다.
SQL은 사용 목적과 행위에 따라 다양한 구조가 존재하며 대표적으로 아래와 같이 구분된다.
언어 설명
DDL | |
(Data Definiton Language) | 데이터를 정의하기 위한 언어이다. |
데이터를 저장하기 위한 스키마, 데이터베이스의 생성/수정/삭제 등의 행위를 수행한다. | |
DML | |
(Data Manipulation Language) | 데이터를 조작하기 위한 언어이다. |
실제 데이터베이스 내에 존재하는 데이터에 대해 조회/저장/수정/삭제 등의 행위를 수행한다. | |
DCL | |
(Data Control Language) | 데이터베이스의 접근 권한 등의 설정을 하기 위한 언어이다. 데이터베이스 내에 이용자의 권한을 부여하기 위한 GRANT와 권한을 박탈하는 REVOKE가 대표적이다. |
DDL
웹 어플리케이션은 SQL을 사용해서 DBMS와 상호작용을 하며 데이터를 관리한다.
RDBMS에서 사용하는 기본적인 구조는 데이터베이스 → 테이블 → 데이터 구조 이다.
데이터를 다루기 위해 데이터베이스와 테이블을 생성해야 하며, DDL을 사용해야 한다.
DDL의 CREATE명령을 사용해 새로운 데이터베이스 또는 테이블을 생성할 수 있다.
- 데이터베이스 생성
User이라는 데이터베이스를 생성하는 쿼리문이다.
CREATE DATABASE User;
- 테이블 생성
앞서 생성한 데이터베이스에 Board 테이블을 생성하는 쿼리문이다.
USE User;
# Board 이름의 테이블 생성
CREATE TABLE Board(
idx INT AUTO_INCREMENT,
boardTitle VARCHAR(100) NOT NULL,
boardContent VARCHAR(2000) NOT NULL,
PRIMARY KEY(idx)
);
DML
생성된 테이블에 데이터를 추가하기 위해 DML을 사용합니다.
새로운 데이터를 생성하는 INSERT, 데이터를 조회하는 SELECT, 그리고 데이터를 수정하는 UPDATE의 예시입니다.
- 테이블 데이터 생성
Board 테이블에 데이터를 삽입하는 쿼리문이다.
INSERT INTO
Board(boardTitle, boardContent, createdDate)
Values(
'Hello',
'World !',
Now()
);
- 테이블 데이터 조회
Board 테이블의 데이터를 조회하는 쿼리문이다.
SELECT
boardTitle, boardContent
FROM
Board
Where
idx=1;
- 테이블 데이터 변경
Board 테이블의 컬럼 값을 변경하는 쿼리문이다.
UPDATE Board SET boardContent='Users'
Where idx=1;
DCL
데이터베이스 시스템에서 사용자 및 역할에 대한 권한을 관리하는 명령어들을 포함한다.
DCL 명령어를 사용하여 데이터베이스 내부의 객체(테이블, 뷰, 프로시저 등)에 대한 접근 권한 및 작업 권한을 부여하거나 취소할 수 있다.
- GRANT
GRANT는 특정 사용자나 역할에 대해 데이터베이스 객체에 대한 권한을 부여한다.
board 테이블에 대해 SELECT, INSERT 권한을 user 사용자에게 부여하는 예시 코드이다.
GRANT SELECT, INSERT ON board TO user;
- Revoke
REVOKE는 데이터베이스 객체에 대한 권한을 취소합니다.
board 테이블에 대해 user 사용자의 INSERT 권한을 취소하는 예시입니다.