데이터베이스

[DB] 관계형 데이터베이스 & 비관계형 데이터베이스

goblin- 2024. 11. 11. 23:59

1. 관계형 데이터베이스 (RDBMS) : 행렬 | 관계 | Fixed Schema

 

행렬 구조: 관계형 데이터베이스(RDBMS)는 데이터를 표(테이블) 형태로 저장하며, 각 테이블은 행(row)과 열(column)로 구성됩니다.

관계: 테이블 간에 관계를 설정하여 데이터를 연결합니다. 예를 들어 CustomerOrder 테이블은 고객과 주문 정보를 연결하는 식으로 관계를 맺습니다.

고정된 스키마(Fixed Schema): 데이터 구조(스키마)를 사전에 정의해야 하며, 데이터는 정의된 스키마에 따라 삽입됩니다.

 

RDBMS 예시: MySQL, PostgreSQL, Oracle Database, SQL Server

 

1.2. 비관계형 데이터베이스 (NoSQL) : 비정형 | 비관계 | Schemaless

 

비정형 데이터: NoSQL은 구조가 고정되지 않아 다양한 형태의 데이터를 저장할 수 있습니다. 일반적으로 JSON 형식으로 데이터를 저장합니다.

비관계: 데이터 간 관계를 엄격히 정의하지 않고, 각 데이터는 개별적으로 저장됩니다. 따라서 RDBMS처럼 외래 키를 사용한 관계 정의가 필요하지 않습니다.

스키마 없음(Schemaless): 고정된 스키마가 없고, 데이터 형식이 유연하여 데이터를 자유롭게 추가 및 수정할 수 있습니다.

 

NoSQL 예시: MongoDB, Cassandra, Redis, Couchbase

 

1.3. 관계형 데이터베이스 (RDBMS, SQL) 특징 상세

 

ACID 속성 지원: 트랜잭션을 통해 데이터의 일관성과 무결성을 유지하며, ACID(원자성, 일관성, 고립성, 지속성)를 보장합니다.

정규화: 중복을 최소화하고 데이터를 구조화하여 데이터 무결성을 유지합니다.

복잡한 쿼리와 조인 지원: SQL을 통해 다중 테이블에 걸친 복잡한 쿼리와 조인을 수행할 수 있습니다.

 

1.3.1. 관계형 데이터베이스 (RDBMS, SQL)의 종류

 

MySQL: 오픈 소스이며 가벼운 구조로, 웹 애플리케이션에 자주 사용됩니다.

PostgreSQL: 오픈 소스이며 고급 기능과 JSON을 지원해 복합적인 데이터 구조를 다루기에 적합합니다.

Oracle DB: 안정성, 고가용성, 확장성이 뛰어나며 주로 대기업에서 사용됩니다.

SQL Server: Microsoft에서 개발한 RDBMS로, 윈도우와의 통합성이 높습니다.

 

1.4. 비관계형 데이터베이스 (NoSQL) 특징 상세

 

CAP 이론에 따라 설계: 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition tolerance) 중 두 가지 속성을 선택해 최적화합니다.

유연한 데이터 모델: 스키마가 없어 데이터의 추가와 수정이 자유롭습니다.

수평적 확장 용이: 샤딩을 통해 데이터를 분산 저장하고, 분산 서버에 데이터를 저장하여 확장이 용이합니다.

 

1.4.1. 비관계형 데이터베이스 (NoSQL)의 종류

 

키-값 저장소: Redis, DynamoDB. 간단한 키-값 쌍을 빠르게 저장/조회하는 데 유리합니다.

도큐먼트 저장소: MongoDB, CouchDB. JSON과 유사한 형식으로 데이터를 저장하여 가변적인 데이터 구조를 지원합니다.

컬럼 기반 저장소: Cassandra, HBase. 데이터를 컬럼 단위로 저장하여 분석 및 빅데이터에 최적화되어 있습니다.

그래프 저장소: Neo4j, ArangoDB. 노드와 간선의 관계를 저장하며 소셜 네트워크 분석에 적합합니다.

 

1.4.2. 비관계형 데이터베이스 (NoSQL) 심화 : CAP Theorem

 

Consistency (일관성): 모든 노드에서 동일한 데이터를 볼 수 있도록 보장.

Availability (가용성): 모든 요청에 대해 응답을 보장.

Partition Tolerance (파티션 허용성): 네트워크 파티션이 발생해도 시스템이 정상 작동.

 

CAP 이론에 따르면 세 가지 속성을 모두 충족할 수는 없고, 두 가지를 우선시하여 최적화를 수행해야 합니다.

 

1.5. 관계형 데이터베이스 & 비관계형 데이터베이스 비교

 

데이터 저장 방식: 관계형은 행렬 구조, 비관계형은 다양한 저장 형식(JSON 등).

확장성: 관계형은 수직 확장이 일반적, 비관계형은 수평 확장이 용이.

스키마: 관계형은 고정된 스키마, 비관계형은 유연한 스키마.

데이터 조작: 관계형은 SQL, 비관계형은 각 DB에 맞는 API를 사용.

 

관계형 데이터베이스 장점

 

강력한 데이터 무결성 보장.

복잡한 쿼리와 데이터 분석 지원.

 

비관계형 데이터베이스 장점

 

데이터 구조에 유연성.

빅데이터와 실시간 분석 처리에 유리.

 

2. 데이터베이스 확장 (Scaling)

 

데이터가 많아지고 요청이 늘어나면 데이터베이스의 확장이 필요합니다.

 

Vertical Scaling (수직 확장): 서버의 CPU, 메모리, 디스크 용량을 늘려 성능을 높이는 방식입니다. 비용이 많이 들며 한계가 있습니다.

Horizontal Scaling (수평 확장): 여러 서버에 데이터를 분산 저장하여 확장하는 방식입니다. NoSQL이 일반적으로 이 방식을 지원하며, 데이터베이스의 성능과 용량을 유연하게 확장할 수 있습니다.

 

Horizontal Scaling의 두 가지 방식:

 

1. Partitioning (파티셔닝): 데이터를 컬럼이나 행 단위로 분리하여 분산 서버에 저장합니다.

Vertical Partitioning: 컬럼 단위로 나눠 분산 저장.

Horizontal Partitioning (Sharding): 행 단위로 나눠 분산 저장.

2. Replication (복제): 데이터를 복사하여 여러 서버에 동일하게 저장합니다.