SQL
SQL(Structed Query Language)는 대표적인 DBMS의 카테고리 중 하나로, 관계형 데이터 베이스 시스템(RDBMS)를 사용하는 데이터 베이스이다.
SQL 데이터 베이스는 데이터간의 관계를 중요한 개념으로 채택한다는 점이 특징이다.
대표적인 SQL 데이터베이스로는 MySQL, PostgreSQL, Oracle 등이 있다.
SQL의 특징
SQL의 대표적인 특징으로는 `정형화된 데이터 스키마`, `ACID 트랜잭션`, `Relation 개념`등을 들 수 있다.
정형화된 데이터 스키마
SQL에서 데이터는 정해진 데이터 스키마에 따라 테이블에 저장되며, 구조가 고정된다는 특징이 있다.
해당 구조는 필드의 이름, 그리고 필드의 데이터 타입으로 정의되어 있다.
따라서 INSERT를 통해 추가되는 데이터들은 반드시 이 데이터 스키마를 준수해야하며, 이를 준수하지 않은 데이터는 테이블에 추가할 수 없다.
ACID 트랜잭션
ACID는 (Atomicity, Consistency, Isolation, Durability)의 약자로 트랜잭션의 안전성을 보장하기 위해 필요한 성질을 말한다.
여기서 `트랜잭션`이란 여러 개의 작업을 하나로 묶은 단위를 말한다.
Atomicity
Atomicity, 즉 원자성은 하나의 트랜잭션에 포함되어 있는 작업이 모두 성공하거나, 모두 실패하는 성질을 말한다.
원자성이 필요한 대표적인 예시로 금융 거래를 들 수 있다.
예를 들어 쿠팡에서 물건을 산다고 가정해보자.
쿠팡에서 돈을 지불해서 물건을 구매하는 과정은 간단하게 두 가지 과정으로 나눠볼 수 있다.
1. 쿠팡에서 원하는 물건을 고르고 돈을 지불한다.
2. 쿠팡에서 돈이 지불된 것을 확인하고 결제를 완료한다.
그런데 만약 1번 과정이 완료된 이후 서비스에 에러가 발생해서 2번 과정이 진행되지 않으면 어떻게 될까?
나는 분명 돈을 지불해서 계좌에서 돈이 빠져나갔지만, 물건 결제는 완료되지 않는 일이 발생할 것이다.
따라서 1번이 성공하더라도 2번이 실패하면, 1,2번을 모두 실패시켜야만 한다.
이것이 Atomicity 성질에 해당한다.
Consistency
트랜잭션이 데이터베이스의 일관성 규칙을 준수해야 함을 의미한다.
즉 트랜잭션이 시작 전과 끝난 후에 데이터베이스가 항상 일관된 상태를 유지해야 함을 의미하는 것이다.
조금 모호하게 다가올 수 있는데, 데이터 베이스가 트랜잭션 수행 전과 후에 모든 제약 조건, 규칙, 관계를 준수해야 한다는 내용이다.
예를 들어 Not Null, 즉 비어 있으면 안 되는 column이 있다고 가정하자. 만약 트랜잭션 이후로 해당 column이 비어있는 record가 추가된다면 데이터 베이스의 제약 조건을 위반한 것이다. 이러한 경우 Consistency가 위반되었다고 할 수 있다.
Isolation
실생활에서는 하나의 데이터베이스에 많은 사용자가 접근하는 것이 일반적이다.
이러한 상황에서 필요한 것이 Isolation으로, 사용자가 여러명인 환경에서 여러 트랜잭션이 병행 실행될 때, 각 트랜잭션이 다른 트랜잭션의 작업에 영향을 미치지 않아야 한다는 성질이다.
Durability
트랜잭션이 성공적으로 완료되면 해당 트랜잭션으로 인한 변경 사항이 영구적으로 저장되어야 한다는 성질이다.
시스템 장애, 정전 등의 돌발 상황이 발생하더라도 변경 사항이 손실되지 않아야 한다.
Relation
SQL과 NoSQL을 구분짓는 가장 큰 특징으로, 테이블 간의 관계를 지원하는 SQL의 핵심 개념에 해당한다.
SQL은 관계 개념을 사용하여 데이터의 중복을 막는다.
예를 들어 결제 내역을 DB에 저장한다고 가정하자.
2023년 10월 2일에 발생한 결제내역을 저장한다고 했을 때, 만약 해당 날짜에 결제가 1만번 발생했다면
'2023년 10월 2일`이라는 결제 날짜를 담은 데이터가 1만개 담기게 될 것이다.
하지만 만약 결제 날짜만을 따로 분리하여 테이블을 만들면, 1개의 데이터만 추가되어 중복된 데이터의 수를 줄일 수 있다.
이렇게 테이블을 나눠 중복 데이터의 수를 줄이는 과정을 `정규화`라고 한다.
NoSQL
NoSQL은 SQL과 반대로 비관계형 데이터 모델을 사용하는 데이터 베이스이다.
SQL에서 레코드라고 부르는 하나의 데이터를 NoSQL에서는 document라고 부른다.
대표적으로 MongoDB, Redis, Amazon DynamoDB 등이 NoSQL에 해당한다.
NoSQL의 특징
NoSQL의 특징으로는 `비정형 데이터 모델`, `분산 및 확장성`, `BASE 트랜잭션` 등을 들 수 있다.
비정형 데이터 모델
SQL과 큰 차이를 보여주는 부분으로 정해진 스키마를 따르지 않는 데이터를 추가할 수 있다는 특징이 있다.
저장된 데이터를 조정하고, 새로운 필드를 자유롭게 추가할 수 있다는 것이 NoSQL의 큰 장점이다.
분산 및 확장성
NoSQL 데이터베이스는 샤딩과 클러스터링을 사용하여 데이터를 여러 노드로 분산하여 저장한다.
따라서 데이터베이스 시스템의 확장성이 높으며, 높은 가용성을 제공할 수 있다.
여기서 샤딩(Sharding) 이란 같은 테이블에 담긴 데이터를 다수의 데이터베이스에 분산해서 저장하는 방식이다.
이렇게 하면 작업량을 분산시켜서 효율적인 성능을 기대할 수 있으며, `수평 확장`에 유리한 구조를 만들 수 있다.
클러스터링(Clustering) 이란 여러개의 DB를 수평 구조로 구축하는 방식으로, DB 서버를 확장하는 것을 의미한다.
이를 통해 데이터베이스 서버가 작동이 중단되어도, 다른 서버를 통해 fail over를 진행할 수 있다.
'DB' 카테고리의 다른 글
[Database System] Database Storage2 (0) | 2023.10.07 |
---|---|
[Database System] Database Storage (0) | 2023.10.05 |
[Database System] Normalization (0) | 2023.10.05 |
[Database System] Modern SQL (0) | 2023.09.17 |
[Database System] Introduction (0) | 2023.09.08 |