[DB] 관계형 데이터베이스 & 비관계형 데이터베이스
1. 관계형 데이터베이스 (RDBMS) : 행렬 | 관계 | Fixed Schema
• 행렬 구조: 관계형 데이터베이스(RDBMS)는 데이터를 표(테이블) 형태로 저장하며, 각 테이블은 행(row)과 열(column)로 구성됩니다.
• 관계: 테이블 간에 관계를 설정하여 데이터를 연결합니다. 예를 들어 Customer와 Order 테이블은 고객과 주문 정보를 연결하는 식으로 관계를 맺습니다.
• 고정된 스키마(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 (복제): 데이터를 복사하여 여러 서버에 동일하게 저장합니다.