Skip to content

Latest commit

 

History

History
143 lines (96 loc) · 10.2 KB

nosql.md

File metadata and controls

143 lines (96 loc) · 10.2 KB

NoSQL

목차

NoSQL 데이터베이스

NoSQL 데이터베이스는 전통적인 관계형 데이터베이스(RDBMS)와 달리, 스키마가 없는 방식으로 데이터를 저장하며, 다양한 데이터 구조(문서, 키-값, 그래프, 컬럼 기반 등)를 지원하는 데이터베이스입니다. 주로 대규모 분산 환경에서 사용되며, 높은 확장성과 성능을 제공합니다.

특징

  • 스키마가 없음 (Schema-less): NoSQL은 사전에 정의된 스키마가 필요하지 않으며, 각 데이터 항목은 서로 다른 구조를 가질 수 있습니다.
  • 유연한 데이터 모델: NoSQL은 관계형 데이터베이스가 제공하는 테이블, 열, 행 개념 대신, 문서, 키-값, 그래프, 열 기반 데이터 구조를 사용합니다.
  • 수평 확장성: NoSQL 데이터베이스는 데이터를 여러 서버에 분산하여 저장하므로, 수평적으로 쉽게 확장할 수 있습니다.
  • 높은 성능: 읽기와 쓰기가 매우 빠르며, 특히 대규모 트래픽을 처리하는 데 적합합니다.

사용 사례

  • 대용량 데이터를 다루는 시스템(예: 소셜 네트워크, 빅데이터, IoT).
  • 실시간 데이터 처리 시스템(예: 로그 데이터 수집, 실시간 분석).
  • 비정형 데이터 저장(예: JSON, XML 데이터).

장점

  • 확장성: 수평적 확장을 통해 대규모 데이터를 처리할 수 있으며, 서버를 추가하여 성능을 향상시킬 수 있습니다.
  • 유연성: 스키마가 없기 때문에 구조가 고정되지 않아 유연한 데이터 모델링이 가능합니다.
  • 빠른 성능: 데이터베이스 트랜잭션의 일관성보다는 성능과 가용성에 중점을 두어 빠른 읽기 및 쓰기 성능을 제공합니다.
  • 다양한 데이터 구조 지원: 비정형 데이터를 처리할 수 있으며, 문서형, 키-값형, 열 기반, 그래프형 등 다양한 데이터 모델을 지원합니다.

단점

  • 일관성 부족: 즉시 일관성이 보장되지 않으며, 최종적 일관성을 지원하는 모델이 많습니다.
  • 제한된 트랜잭션 지원: RDBMS처럼 복잡한 트랜잭션을 지원하지 않으며, 다중 테이블간의 관계를 관리하기 어렵습니다.
  • 데이터 모델링의 복잡성: 데이터 구조와 모델링이 자유롭기 때문에, 적절한 모델링 설계가 필요하며, 경험이 없는 경우 잘못된 설계로 인해 성능 문제가 발생할 수 있습니다.

NoSQL과 관계형 데이터베이스의 차이점

NoSQL 데이터베이스는 RDBMS와 여러 가지 측면에서 차이점이 있습니다. 주요 차이점은 다음과 같습니다.

데이터 모델링

  • RDBMS: 테이블 기반의 스키마를 따르며, 관계형 데이터 모델을 사용합니다. 데이터는 테이블, 행, 열로 구조화되고, 각 테이블 간에 관계(Join)를 맺을 수 있습니다.
  • NoSQL: 스키마가 없거나 유연한 구조를 가집니다. 문서형, 키-값형, 컬럼 기반, 그래프형 등 다양한 데이터 모델을 지원합니다.

스케일링(Scaling)

  • RDBMS: 주로 **수직적 확장(Vertical Scaling)**을 지원합니다. 즉, 더 강력한 하드웨어로 교체하거나 성능을 높이는 방식으로 확장합니다.
  • NoSQL: 주로 **수평적 확장(Horizontal Scaling)**을 지원하며, 여러 서버에 데이터를 분산하여 확장할 수 있습니다.

ACID vs. BASE

  • RDBMS: ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 따르며, 트랜잭션의 일관성과 무결성을 보장합니다.
  • NoSQL: BASE(Basically Available, Soft state, Eventual consistency) 원칙을 따릅니다. 즉, 즉각적인 일관성보다는 가용성과 확장성에 중점을 두며, 일정 시간이 지난 후 데이터가 최종적으로 일관성을 갖는 방식(eventual consistency)을 지원합니다.

사용 사례

  • RDBMS: 금융, 회계, ERP 시스템처럼 데이터 정합성이 중요한 시스템에서 사용됩니다.
  • NoSQL: 대규모 트래픽과 다양한 데이터 형식을 처리해야 하는 시스템(예: 소셜 미디어, 로그 관리, 비정형 데이터 처리)에 주로 사용됩니다.

NoSQL의 주요 데이터베이스 유형

NoSQL 데이터베이스는 데이터 구조에 따라 여러 유형으로 나눌 수 있습니다. 주요 NoSQL 데이터베이스 유형은 다음과 같습니다:

1. 문서형(Document-based) 데이터베이스

  • 설명: 문서형 데이터베이스는 데이터를 문서 단위로 저장하며, 각 문서는 JSON, BSON, XML 형식으로 저장됩니다. 문서 간의 구조는 서로 다를 수 있어 매우 유연합니다.
  • 대표적인 데이터베이스: MongoDB, CouchDB.
  • 사용 사례: 비정형 데이터를 저장하는 시스템, 웹 애플리케이션, 콘텐츠 관리 시스템.

2. 키-값(Key-Value) 데이터베이스

  • 설명: 키-값 데이터베이스는 데이터를 키와 값의 쌍으로 저장합니다. 매우 간단한 데이터 구조로 빠른 조회 속도를 자랑합니다.
  • 대표적인 데이터베이스: Redis, DynamoDB.
  • 사용 사례: 세션 관리, 캐시 시스템, 간단한 데이터 저장소.

3. 열 기반(Column-based) 데이터베이스

  • 설명: 열 기반 데이터베이스는 데이터를 열(Column) 단위로 저장합니다. 대량의 데이터를 빠르게 조회할 수 있으며, 데이터 압축에 유리합니다.
  • 대표적인 데이터베이스: Cassandra, HBase.
  • 사용 사례: 로그 데이터 처리, 실시간 분석, 시계열 데이터 저장소.

4. 그래프형(Graph-based) 데이터베이스

  • 설명: 그래프형 데이터베이스는 노드(Node)와 엣지(Edge)를 사용하여 데이터를 저장하며, 복잡한 관계성을 가진 데이터를 효율적으로 관리할 수 있습니다.
  • 대표적인 데이터베이스: Neo4j, ArangoDB.
  • 사용 사례: 소셜 네트워크, 추천 시스템, 복잡한 관계형 데이터 처리.

CAP 이론과 NoSQL

CAP 이론은 분산 시스템에서 Consistency(일관성), Availability(가용성), Partition Tolerance(파티션 허용성) 중 두 가지 특성만을 동시에 보장할 수 있다는 이론입니다.

  • Consistency (일관성): 모든 노드가 같은 시점에 동일한 데이터를 볼 수 있는 상태입니다.
  • Availability (가용성): 시스템이 항상 응답을 제공할 수 있어야 하며, 일부 노드에 문제가 생기더라도 요청에 대한 응답이 가능해야 합니다.
  • Partition Tolerance (파티션 허용성): 네트워크 분할이 발생해도 시스템이 계속 작동해야 합니다.

CAP 이론의 적용

  • CP 시스템: 일관성과 파티션 허용성을 보장하지만, 네트워크 분할 시 일부 요청에 대한 응답이 지연될 수 있습니다. 예: HBase, MongoDB.
  • AP 시스템: 가용성과 파티션 허용성을 보장하지만, 네트워크 분할 시 데이터 일관성이 보장되지 않을 수 있습니다. 예: Cassandra, DynamoDB.

NoSQL 시스템은 대체로 가용성과 파티션 허용성(AP)을 우선시하는 경향이 있습니다. 즉, 네트워크 분할 시에도 시스템이 계속 작동하지만, 일관성은 시간이 지나면서 최종적으로 보장됩니다(이벤트 추정적 일관성).

NoSQL에서 스케일링(Scaling)

NoSQL은 주로 **수평적 확장(Horizontal Scaling)**을 통해 대규모 데이터를 처리합니다. 수평적 확장은 여러 대의 서버를 추가하여 데이터를 분산 저장하는 방식으로, 관계형 데이터베이스에서 사용하는 수직적 확장(더 강력한 서버로 업그레이드)과 차별화됩니다.

스케일링 방법

샤딩(Sharding)

  • 데이터를 여러 개의 작은 조각(샤드)으로 나누고, 이를 각각 다른 서버에 분산하여 저장하는 방식입니다. 각 샤드는 독립적으로 관리되며, 트래픽이 증가해도 쉽게 확장 가능합니다.
  • 예시: MongoDB는 샤딩을 통해 수평적 확장을 지원하며, 데이터를 여러 노드에 자동으로 분산시킵니다.

리플리케이션(Replication)

  • 데이터를 여러 서버에 복제하여 고가용성과 성능을 향상시킵니다. 한 서버가 장애를 일으키더라도 다른 복제 서버에서 데이터를 제공할 수 있어, 서비스 중단을 방지할 수 있습니다.
  • 예시: Cassandra는 리플리케이션 기능을 사용하여 여러 데이터센터 간에 데이터를 복제하고, 네트워크 문제 발생 시에도 서비스 가용성을 유지합니다.

분산 클러스터(Distributed Cluster)

  • 데이터를 분산하여 저장하고, 클러스터 내에서 작업을 병렬로 처리하여 성능을 극대화하는 방식입니다. 클러스터 구성 시, 데이터를 여러 노드에 분산 저장하며 트래픽 분산 및 장애 복구가 용이합니다.
  • 예시: Amazon DynamoDB는 수평적 확장을 통해 대규모 트래픽과 데이터를 처리할 수 있습니다.