bsh6226 2024. 9. 2. 11:39

NoSQL

관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화된 저장소

스키마 없이 사용간ㅇ하거나 느슨한 스키마를 제공하는 저장소

 

전통적인 **관계형 데이터베이스 관리 시스템(RDBMS)**은 분산 데이터베이스와 같은 방식으로 데이터를 수평적으로 확장하는 것이 본질적으로 어렵습니다. RDBMS는 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 유지하며 데이터의 일관성과 무결성을 보장하는 데 최적화되어 있는데, 이 특성 때문에 데이터베이스를 여러 노드에 분산하는 데 있어 몇 가지 중요한 제약이 있습니다.

RDBMS의 확장성 제약

  1. 수직 확장(Vertical Scaling)에 의존:
    • 전통적으로 RDBMS는 하나의 강력한 서버에서 실행되도록 설계되었습니다. 따라서 더 많은 성능이 필요할 때는 서버의 하드웨어(예: CPU, 메모리, 디스크)를 업그레이드하는 수직 확장이 일반적입니다.
    • 수직 확장은 어느 정도까지는 유효하지만, 결국에는 하드웨어의 물리적 한계에 도달할 수 있고 비용이 매우 비싸집니다.
  2. 수평 확장(Scale-Out)이 어려움:
    • 데이터 일관성 유지: RDBMS는 데이터의 일관성을 엄격하게 유지하기 위해 설계되었기 때문에, 데이터를 여러 서버에 분산할 경우 일관성을 유지하는 것이 매우 복잡해집니다. 특히 분산된 노드들 간에 트랜잭션을 처리할 때 ACID 특성을 유지하는 것은 큰 도전 과제입니다.
    • 복잡한 쿼리: RDBMS는 복잡한 조인, 집계, 트랜잭션을 효율적으로 처리하기 위해 설계되었습니다. 하지만 데이터가 여러 노드에 분산되면 이러한 쿼리의 성능이 저하될 수 있습니다. 예를 들어, 여러 노드에서 데이터를 수집하고 조합하는 데 시간이 오래 걸릴 수 있습니다.
    • 복제와 샤딩: 데이터를 여러 노드에 분산하는 일반적인 방법은 샤딩(sharding) 또는 **복제(replication)**입니다. 그러나 RDBMS에서 샤딩은 매우 복잡하고, 잘못된 샤드 키를 선택할 경우 데이터 불균형, 핫스팟 문제 등이 발생할 수 있습니다. 복제는 읽기 작업에서는 유용하지만, 쓰기 작업에서는 여전히 단일 노드가 병목이 될 수 있습니다.

RDBMS에서의 확장 가능성

최근 몇 년 동안, RDBMS가 수평 확장을 지원하기 위해 여러 개선이 이루어졌습니다. 하지만 여전히 전통적인 NoSQL 또는 NewSQL 시스템과 비교했을 때 확장성이 제한적입니다.

  1. 분산 SQL 데이터베이스:
    • 일부 현대적인 RDBMS는 분산 환경에서 SQL과 ACID 특성을 유지하기 위해 분산 SQL 접근 방식을 도입했습니다. Google Spanner, CockroachDB, YugabyteDB 같은 시스템은 이러한 접근 방식을 따르며, 여러 노드에 걸쳐 데이터를 분산하고도 SQL 쿼리와 트랜잭션을 지원합니다.
  2. 샤딩(Sharding) 지원:
    • 일부 RDBMS(예: MySQL의 InnoDB Cluster, PostgreSQL의 Citus)는 샤딩 기능을 지원하여 데이터를 수평적으로 분산할 수 있게 합니다. 그러나 이러한 기능을 제대로 활용하려면 상당한 구성 및 관리가 필요하며, 애플리케이션 수준에서 샤딩 논리를 구현해야 할 수도 있습니다.
  3. 읽기 확장성(Read Scalability):
    • 복제(replication): RDBMS는 여러 복제본을 만들어 읽기 작업을 분산할 수 있습니다. 이를 통해 읽기 성능을 개선할 수 있지만, 쓰기 작업은 여전히 주 노드(Primary Node)에서만 처리되므로 이 부분이 병목이 될 수 있습니다.

결론

전통적인 RDBMS는 그 설계 특성상 분산 데이터베이스처럼 쉽게 수평 확장이 되지 않습니다. 특히, 데이터 일관성과 복잡한 쿼리를 처리하는 능력 때문에 데이터를 여러 노드에 걸쳐 분산하는 것이 어렵습니다.

그러나 현대의 일부 RDBMS는 제한적이지만 수평 확장을 지원하기 위한 기능을 제공하며, 분산 SQL 데이터베이스와 같은 새로운 기술들은 이러한 문제를 해결하기 위한 노력의 일환으로 개발되고 있습니다. 따라서 RDBMS의 확장성을 고려할 때, 애플리케이션의 요구사항에 따라 수직 확장과 수평 확장 중 어떤 접근이 적절한지 평가해야 합니다.