SUSC DB design & modeling 스터디 Part 1.1: SQL and NoSQL Database

Choo121600·2025년 4월 1일
0

Part 1에서는 SQL과 NoSQL의 근본적인 차이점에 대해서 알아볼 예정입니다.
그래서 그들의 독특한 특징, 디자인 원칙, 트레이드 오프에 대해서 알게 될 수 있을 것이다.

SQL and NoSQL Databases: Characteristics, Design, and Trade-Offs

현대 어플리케이션에서 데이터의 복잡도와 볼륨이 지수적으로 증가하고 있다.
그래서 정보를 효율적으로 저장, 관리 및 액세스하는 데 있어 데이터베이스의 역할은 그 어느 때보다 중요했습니다.

시간이 지남에 따라 데이터베이스 관리를 위해 SQL(Structured Query Language)와 NoSQL 데이터베이스라는 두 가지 주요 패러다임이 등장했습니다.

SQL은 근본 느낌. 수십 년 동안 전통적인 데이터 저장 및 검색에 사용되었다.
데이터를 행과 열이 있는 테이블 구조로 관계형 데이터 모델을 따른다.

좀 더 자세히 들어가면, 각 테이블은 엔티티를 나타내고, 행은 개별 레코드로, 열은 해당 레코드의 속성으로 나타낸다. 그리고 엔티티와의 관계는 primary key나 foreign key를 통해 설정되어 데이터 및 참조 무결성을 보장하고 있습니다.

이를 통해 아래의 장점이 있다:

  • 일관성
  • 트랜젝션 지원
  • 성숙한 생태계

NoSQL은 빅데이터와 실시간 웹 애플리케이션에서 나타나는 확장성과 유연성 문제를 해결하도록 만들어졌다.
SQL 데이터베이스와 달리 NoSQL 데이터베이스는 엄격한 관계형 모델을 따르지 않으며 문서, 키-값, 넓은 열 및 그래프 데이터베이스를 포함한 다양한 데이터 모델을 수용하기 위해 다양한 유형으로 제공된다.

이를 통해 아래의 장점이 있다:

  • 대량의 비정형 또는 반정형 데이터를 처리할 수 있다.
  • 수평적 확장성 제공
  • 분산 시스탬에 적합

따라서, SQL 및 NoSQL 데이터베이스 패러다임은 각각 고유한 특성, 설계 고려 사항 및 트레이드오프를 가지고 있다.
SQL 데이터베이스: 강력한 일관성, 트랜잭션 지원 및 잘 확립된 생태계를 제공하는 데 탁월하여 많은 엔터프라이즈 애플리케이션에서 신뢰할 수 있는 선택이다.
NoSQL 데이터베이스: 유연성, 확장성 및 성능 이점을 제공하여 다양한 데이터 모델을 가진 다양한 사용 사례를 수용할 수 있다.

데이터베이스와 데이터 모델링에 대한 이해

데이터베이스는 데이터를 저장, 검색, 업데이트, 관리를 위해 구성되고 엑세스되는 구조화된 데이터 모음이다.
데이터베이스 내의 데이터 조직을 위한 청사진은 데이터 모델로 정의가 됩니다.
주요 데이터 모델은 관계형 데이터 모델(SQL)과 NoSQL 데이터 모델로 나뉜다.

관계형 데이터 모델 (Relational Model)

  • 데이터를 테이블(스키마) 형태로 조직하며, 각 테이블은 행(레코드)과 열(속성)으로 구성됨
  • 키(key)를 이용해 테이블 간 관계를 형성하며, 정규화(Normalization)를 통해 데이터 중복을 줄이고 무결성을 유지함
  • SQL(구조적 질의 언어)을 사용하여 데이터를 질의, 수정, 관리 가능
  • ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원하여 높은 신뢰성과 일관성 보장

NoSQL 데이터 모델

  • 문서(Document), 키-값(Key-Value), 컬럼(Column-Family), 그래프(Graph) 데이터 모델 등 다양한 형태를 가짐
  • 특정 사용 사례에 따라 유연성, 확장성, 성능을 중시하지만, 트랜잭션 지원 및 데이터 일관성 측면에서 제한이 있을 수 있음

이러한 데이터 모델의 차이는 데이터베이스의 효율성과 신뢰성에 직접적인 영향을 미치므로, 각각의 개념을 깊이 이해하는 것이 중요하다.

관계형 데이터 모델(SQL 데이터베이스)

관계형 데이터 모델은 SQL 데이터베이스의 기반이 되는 구조로, 수십 년 동안 산업 전반에서 널리 사용되었습니다. 집합론(Set Theory)과 논리학을 바탕으로 하며, 데이터를 구조적이고 체계적인 방식으로 저장하고 검색할 수 있도록 합니다.

  • 데이터는 테이블(Table) 형태로 저장되며, 각 테이블은 특정 엔터티(Entity)를 나타냄
  • 테이블 간 관계는 키(Key)를 통해 설정되며, 이를 통해 데이터 무결성을 보장함

관계형 데이터 모델은 데이터의 조직적인 관리와 강력한 쿼리 기능을 제공하여 데이터 일관성, 무결성, 보안성을 유지하는 데 중요한 역할을 합니다.

테이블, 행, 열

관계형 데이터 모델에서 데이터는 테이블이라는 2차원 구조로 저장됩니다. 테이블은 행(Records)과 열(Columns)로 구성됩니다.

  • 행(Row): 각 행은 개별 데이터 항목 또는 레코드를 나타냅니다. 예를 들어, "고객" 정보를 저장하는 테이블에서 각 행은 한 명의 고객을 나타냅니다.
  • 열(Column): 각 열은 속성이나 특성을 나타내며, 데이터의 특정 정보를 저장합니다. 예를 들어, 고객 테이블에서 열은 고객의 ID, 이름, 이메일 주소, 생년월일 등을 포함할 수 있습니다.

예시:

  • Customers 테이블은 고객 데이터를 저장하며, 각 행은 개별 고객을 나타냅니다. 각 열은 고객에 대한 특정 정보를 나타냅니다 (예: 고객 ID, 이름, 이메일, 생년월일).

키(Key)

키는 관계형 데이터 모델에서 매우 중요한 요소로, 테이블 간의 관계를 설정하고 데이터 무결성을 보장하는 역할을 합니다.

  1. 기본 키(Primary Key):

    • 각 테이블에는 기본 키를 설정하는 것이 좋습니다. 기본 키는 각 행을 고유하게 식별할 수 있는 속성입니다. 이를 통해 각 레코드는 고유하게 구별되며, 특정 레코드를 효율적으로 검색할 수 있습니다.
    • 기본 키는 엔터티의 무결성을 보장하며, 데이터가 중복되지 않도록 합니다.

    예시:
    고객 테이블에서 고객 ID가 기본 키로 설정될 수 있습니다. 이 키는 각 고객을 고유하게 식별합니다.

  2. 외래 키(Foreign Key):

    • 외래 키는 다른 테이블의 기본 키를 참조하는 컬럼 또는 컬럼 그룹입니다. 이를 통해 두 테이블 간의 관계를 설정할 수 있습니다. 외래 키는 일대다(One-to-Many) 또는 다대다(Many-to-Many) 관계를 나타냅니다.
    • 외래 키는 참조 무결성을 보장하여, 관련된 두 테이블 간의 관계가 일관되게 유지되도록 합니다.

    예시:
    주문 테이블(Orders)에서는 고객 ID가 외래 키로 설정되어 있을 수 있습니다. 이 외래 키는 고객 테이블의 고객 ID를 참조하여, 각 주문이 어떤 고객에 의해 이루어졌는지 나타냅니다.

정규화 (Normalization)

정규화는 관계형 데이터 모델에서 데이터 중복을 줄이고 데이터 무결성을 향상시키기 위한 필수 개념입니다. 정규화의 주요 목표는 데이터를 여러 테이블에 나누어 각 정보가 단 한 번만 저장되도록 하는 것입니다. 이를 통해 데이터 불일치나 데이터 삽입/수정 오류와 같은 문제를 해결할 수 있습니다.

정규화는 다음과 같은 정규형(Normal Forms)을 기준으로 이루어집니다:

  1. 제1정규형(1NF)

    • 테이블의 모든 열은 원자 값(Atomic Values)만을 포함해야 합니다. 즉, 각 셀에는 여러 값이 아닌 하나의 값만 들어가야 합니다.
    • 예를 들어, "전화번호" 열에 여러 개의 전화번호가 저장되는 것은 1NF를 만족하지 않습니다. 각 전화번호는 별도의 행이나 테이블로 분리되어야 합니다.
  2. 제2정규형(2NF)

    • 1NF를 만족하고, 기본 키의 부분 집합에 의존하지 않도록 데이터를 분리해야 합니다.
    • 즉, 부분적 함수 종속성을 제거합니다. 기본 키의 일부가 다른 속성에 의존하는 경우, 이를 별도의 테이블로 분리하여야 합니다.
  3. 제3정규형(3NF)

    • 2NF를 만족하고, 이행적 종속성(Transitive Dependency)을 제거합니다. 즉, 기본 키 외의 속성 간에 의존성이 없어야 합니다.
    • 예를 들어, "고객 ID"와 "고객 주소"가 포함된 테이블에서 "고객 주소"가 "고객 ID"에 의존하는 경우, 이 의존성을 제거하여 주소 정보를 별도의 테이블로 분리합니다.

정규화의 이점

  • 데이터 중복 제거: 정보를 여러 곳에 반복해서 저장하지 않으므로 저장 공간을 절약하고 일관성을 유지할 수 있습니다.
  • 데이터 무결성 향상: 데이터를 한 곳에만 저장하므로 데이터의 일관성을 보장할 수 있습니다.
  • 수정/삽입/삭제 이상 방지: 데이터 수정 시 불일치 문제를 방지하고, 새로운 데이터를 삽입할 때 오류를 방지할 수 있습니다.

이와 같이, 정규화는 데이터의 효율적인 관리와 무결성 보장을 위한 중요한 과정입니다. 정규화를 통해 데이터가 적절하게 분리되고, 중복 없이 일관되게 관리될 수 있습니다. 이러한 데이터를 관리하고 쿼리하는 데 필요한 도구가 바로 SQL입니다.

Structured Query Language (SQL)

SQL(Structured Query Language)은 관계형 데이터베이스와 상호작용하는 표준화된 언어로, 데이터베이스에서 데이터를 검색, 삽입, 수정 및 삭제하는 등 다양한 작업을 수행할 수 있는 강력한 쿼리 기능을 제공합니다. SQL의 가장 큰 장점 중 하나는 복잡한 쿼리를 간단하고 효율적으로 작성할 수 있다는 점입니다.

SQL의 주요 기능

  1. 데이터 검색 (SELECT)
    SQL은 데이터베이스에서 특정 정보를 효율적으로 검색할 수 있는 방법을 제공합니다. SELECT 문을 사용하여 원하는 조건에 맞는 데이터를 추출할 수 있습니다.

    SELECT name, email FROM Customers WHERE age > 30;

    이 쿼리는 고객 테이블에서 나이가 30세 이상인 고객들의 이름과 이메일을 검색합니다.

  2. 데이터 삽입 (INSERT)
    INSERT INTO 문을 사용하여 새로운 데이터를 테이블에 추가할 수 있습니다.

    INSERT INTO Customers (name, email, age) VALUES ('John Doe', 'john@example.com', 28);
  3. 데이터 수정 (UPDATE)
    UPDATE 문을 사용하여 기존 데이터를 수정할 수 있습니다. 특정 조건에 맞는 데이터만 변경할 수 있습니다.

    UPDATE Customers SET age = 29 WHERE name = 'John Doe';
  4. 데이터 삭제 (DELETE)
    DELETE 문을 사용하여 테이블에서 데이터를 삭제할 수 있습니다.

    DELETE FROM Customers WHERE age < 20;

SQL의 장점

  • 직관적이고 효율적인 쿼리 작성: SQL은 구조적이고 간단한 문법을 제공하므로, 복잡한 데이터 검색과 조작을 효율적으로 처리할 수 있습니다.
  • 데이터 저장 방식에 대한 추상화: SQL을 사용하면 개발자가 데이터가 실제로 어떻게 저장되고 조직되는지에 대해 신경 쓸 필요 없이 데이터에 접근할 수 있습니다. 데이터베이스 관리 시스템(DBMS)이 이를 처리합니다.
  • 데이터 일관성 및 무결성: SQL은 데이터를 삽입, 수정, 삭제하는 동안 ACID 트랜잭션을 지원하여 데이터 일관성과 무결성을 보장합니다.

트랜잭션 지원

SQL 데이터베이스는 트랜잭션 관리를 통해 데이터베이스의 신뢰성과 일관성을 유지합니다. 트랜잭션은 여러 작업이 일련의 작업으로 묶여 하나의 단위로 처리되도록 하여, 작업 도중 문제가 발생하더라도 전체 데이터가 손상되지 않도록 보장합니다. 예를 들어, 은행의 송금 작업에서 출금과 입금이 동시에 처리되며, 중간에 오류가 발생하면 이전 상태로 롤백(rollback)할 수 있습니다.

이처럼, SQL은 데이터베이스와의 상호작용을 간단하고 효율적으로 처리할 수 있게 해주는 중요한 도구입니다. SQL을 사용하면 복잡한 데이터 작업도 직관적으로 수행할 수 있으며, 데이터의 무결성과 일관성을 유지할 수 있습니다.

ACID 트랜잭션

SQL 데이터베이스는 ACID 트랜잭션을 완벽하게 지원하는 점에서 뛰어난 안정성을 제공합니다. ACID는 데이터베이스 작업의 신뢰성, 고립성, 일관성을 보장하여, 시스템 오류가 발생하더라도 데이터의 정확성과 무결성을 유지할 수 있게 합니다. ACID는 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) 네 가지 주요 특성으로 구성됩니다.

1. 원자성 (Atomicity)

  • 원자성은 트랜잭션이 "전부 아니면 전혀 없다"는 규칙을 따르는 것을 보장합니다. 즉, 트랜잭션 내의 모든 작업이 성공적으로 완료되거나, 하나라도 실패하면 트랜잭션 전체가 취소되어 데이터베이스는 트랜잭션 이전 상태로 돌아갑니다.
  • 예를 들어, 은행에서 송금 작업을 수행할 때, 송금액이 출금되었지만 입금이 실패한 경우, 출금도 취소되어야 합니다.

2. 일관성 (Consistency)

  • 일관성은 트랜잭션이 실행될 때마다 데이터베이스가 유효한 상태로 변환되도록 보장합니다. 트랜잭션이 끝난 후 데이터는 모든 무결성 제약조건을 만족해야 하며, 잘못된 데이터가 저장되지 않도록 합니다.
  • 예를 들어, 고객의 계좌에서 출금이 이루어졌다면, 트랜잭션 후에도 계좌 잔액이 음수로 남지 않도록 해야 합니다.

3. 고립성 (Isolation)

  • 고립성은 트랜잭션 간의 독립성을 보장하며, 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션의 중간 결과를 볼 수 없도록 합니다. 이를 통해 여러 트랜잭션이 동시에 실행되더라도 데이터 무결성을 유지할 수 있습니다.
  • 고립성 수준은 여러 가지로 설정할 수 있으며, 이는 데이터 무결성과 성능 간의 균형을 맞추는 역할을 합니다:
    • Read Uncommitted: 다른 트랜잭션에서 아직 커밋되지 않은 데이터를 읽을 수 있지만, 이로 인해 "더러운 읽기(dirty read)"가 발생할 수 있습니다. 성능은 높지만 데이터 정확성은 떨어질 수 있습니다.
    • Serializable: 가장 높은 수준의 고립성으로, 더러운 읽기, 반복 불가능한 읽기, 팬텀 읽기(phantom read)를 방지하지만 성능에 영향을 미칠 수 있습니다.

4. 지속성 (Durability)

  • 지속성은 트랜잭션이 성공적으로 커밋되면 그 변경 사항이 영구적으로 보존된다는 보장입니다. 시스템이 실패하더라도(예: 전원 끊김, 시스템 충돌) 트랜잭션에서 이루어진 변경은 복구될 수 있습니다.
  • 예를 들어, 고객의 주문이 완료되었으면, 시스템이 다운되더라도 주문 기록은 영구적으로 데이터베이스에 저장되고 복구 가능합니다.

ACID 트랜잭션의 중요성

ACID 원칙은 SQL 데이터베이스가 신뢰할 수 있는 데이터 관리를 제공하는 중요한 이유입니다. 특히, 데이터의 일관성, 신뢰성, 무결성이 중요한 애플리케이션에서 매우 중요한 역할을 합니다. 예를 들어, 금융 시스템, 재고 관리 시스템, 예약 시스템 등에서는 데이터의 정확성과 일관성이 절대적으로 필요합니다.

NoSQL과 ACID의 차이점

반면, NoSQL 데이터베이스는 ACID 원칙을 엄격하게 따르지 않는 경우가 많습니다. 대신 확장성과 유연성을 우선시하며, 데이터 일관성보다는 수평적 확장성(scalability)이나 대량의 비정형 데이터 처리에 더 적합합니다. NoSQL 데이터베이스는 여러 노드에 데이터를 분산하여 빠르게 확장할 수 있으므로, 대규모의 데이터나 빠른 응답 속도가 중요한 경우에 유리합니다.

따라서 ACID 트랜잭션을 지원하는 SQL 데이터베이스는 데이터의 일관성과 정확성을 최우선으로 해야 하는 애플리케이션에 적합하며, NoSQL은 확장성이나 유연성이 중요한 애플리케이션에 유리합니다.

NoSQL 데이터베이스는 전통적인 SQL 데이터베이스의 한계를 극복하고, 확장성, 유연성, 스키마가 없는 데이터 저장 솔루션을 요구하는 현대 애플리케이션에 적합한 강력한 대안으로 떠오르고 있습니다. NoSQL 데이터베이스가 제공하는 다양한 데이터 모델 중에서 문서 모델은 그 동적이고 직관적인 구조로 두각을 나타냅니다.

문서 데이터 모델의 특징

  • JSON-like 문서 구조:
    문서 모델에서 데이터는 JSON(JavaScript Object Notation)과 유사한 형태의 문서로 구성됩니다. 각 문서는 배열, 필드, 키-값 쌍을 포함하는 복잡한 중첩 구조를 가질 수 있어, 계층적인 데이터를 더 자연스럽고 표현력 있게 저장할 수 있습니다.
    예를 들어, 고객 정보를 저장하는 문서에는 이름, 주소, 전화번호 등의 속성과 함께 고객의 여러 주문 정보나 상호 관계를 중첩된 형태로 저장할 수 있습니다.

  • 스키마 없는 구조:
    SQL 데이터베이스에서는 정형화된 스키마가 필수적이지만, 문서 모델에서는 스키마가 없거나 유연하게 변경 가능합니다. 즉, 데이터를 저장할 때 기존 구조에 영향을 주지 않고 새 필드를 추가하거나 수정할 수 있습니다. 이는 데이터 요구 사항이나 애플리케이션 개발의 변화에 쉽게 적응할 수 있게 합니다.

문서 모델의 장점

  1. 유연성:
    데이터의 구조가 동적으로 변화할 수 있어, 애플리케이션 개발 과정에서 자주 발생하는 요구 사항의 변화에 유연하게 대응할 수 있습니다. 예를 들어, 새 필드를 추가하거나 기존 데이터를 변경해도 기존 데이터를 손상시키지 않으며, 대규모 데이터 마이그레이션이 필요하지 않습니다.

  2. 복잡한 계층 구조 표현:
    문서 모델은 JSON-like 문서를 사용하여 중첩된 데이터를 자연스럽게 표현할 수 있습니다. 관계형 데이터베이스에서는 다중 테이블 조인이 필요하지만, 문서 모델에서는 중첩된 문서 구조로 이를 간단히 해결할 수 있습니다.

  3. 수평적 확장성:
    NoSQL 데이터베이스는 수평 확장성(horizontal scaling)을 제공하여, 데이터와 트래픽의 증가에 따라 쉽게 노드를 추가할 수 있습니다. 이는 대규모 웹 애플리케이션에서 특히 유리합니다.

NoSQL 데이터베이스의 등장 배경

NoSQL 데이터베이스는 대규모 웹 애플리케이션의 필요에 따라 발전하게 되었습니다. 인터넷의 급격한 성장과 빅 데이터의 등장으로 인해, 기존의 관계형 데이터베이스는 수평적 확장성과 비정형 또는 반정형 데이터를 효율적으로 처리하는 데 한계가 있었습니다. 이에 따라 NoSQL 데이터베이스는 다음과 같은 요구 사항을 해결하기 위해 개발되었습니다:

  • 수평적 확장성: 여러 서버에 데이터를 분산하여 빠르고 효율적인 처리를 가능하게 합니다.
  • 비정형/반정형 데이터 처리: 다양한 형식의 데이터를 효율적으로 저장하고 검색할 수 있습니다.
  • 고가용성: 분산 시스템을 통해 고가용성과 내결함성(fault tolerance)을 보장합니다.

도전 과제

문서 모델은 유연성과 확장성을 제공하지만, 몇 가지 도전 과제도 동반합니다:

  • 데이터 일관성: 분산된 여러 문서에 대한 데이터 일관성을 유지하는 것이 어려울 수 있습니다. 일부 문서가 변경되면 다른 문서와의 관계에서 일관성이 깨질 위험이 있습니다.
  • 무결성 관리: 분산된 환경에서 데이터의 무결성 관리가 복잡할 수 있으며, 특히 트랜잭션 관리나 데이터 검증에 추가적인 고려가 필요합니다.

Applying the CAP theorem and NoSQL design choices

CAP 정리는 Eric Brewer가 2000년대 초에 제시한 개념으로, 분산 시스템에서 일관성(consistency), 가용성(availability), 파티션 내성(partition tolerance) 이 세 가지 특성을 동시에 만족시키는 것은 불가능하다는 것을 말합니다. 대신 분산 시스템 설계자는 시스템 요구 사항과 제약을 충족하기 위해 이 세 가지 특성 중 일부를 선택하고 다른 특성에서 타협을 해야 합니다.

이 세 가지 속성은 다음과 같습니다:

  1. 일관성 (Consistency):

    • 모든 노드는 동일한 데이터를 반환해야 합니다. 즉, 데이터 업데이트가 일어나면 모든 노드에서 이 업데이트가 즉시 반영되어야 합니다. 이를 통해 사용자가 언제나 최신의 일관된 데이터를 받을 수 있습니다.
  2. 가용성 (Availability):

    • 시스템은 항상 작동하며, 클라이언트가 데이터를 요청할 때 언제든지 응답을 받아야 합니다. 이는 시스템의 일부 노드가 장애를 겪더라도 나머지 노드가 요청을 처리할 수 있음을 의미합니다.
  3. 파티션 내성 (Partition Tolerance):

    • 시스템이 네트워크 파티션(즉, 일부 노드들이 서로 통신하지 못하는 상황)이 발생해도 여전히 정상적으로 동작할 수 있어야 합니다. 이는 분산 시스템의 필수적인 특성으로, 장애가 발생할 때도 시스템이 멈추지 않고 동작해야 함을 의미합니다.

CAP 정리와 NoSQL 설계 선택

CAP 정리에 따르면, 분산 시스템은 다음의 세 가지 속성 중에서 두 가지만을 동시에 선택할 수 있으며, 세 가지를 동시에 만족시키는 것은 불가능합니다. NoSQL 데이터베이스 설계자들은 이러한 속성들 간의 트레이드오프(trade-off)를 고려해야 합니다. 이를 통해 각 NoSQL 데이터베이스는 특정 요구 사항에 맞는 선택을 하게 됩니다.

1. CP (일관성 + 파티션 내성)

  • 일관성과 파티션 내성을 우선시하는 시스템은 모든 노드가 동일한 데이터를 유지하도록 보장하면서, 네트워크 파티션이 발생할 경우에도 동작을 유지하려고 합니다. 그러나 가용성을 희생할 수 있습니다. 즉, 일부 노드가 장애를 겪거나 파티션이 발생하면 데이터를 제공하지 못할 수도 있습니다.
  • 예시 데이터베이스: HBase, Zookeeper
    • 이들은 일관성과 파티션 내성을 제공하지만, 네트워크 장애가 발생하면 데이터 접근을 잠시 차단할 수 있습니다.

2. AP (가용성 + 파티션 내성)

  • 가용성과 파티션 내성을 우선시하는 시스템은, 네트워크 파티션 상황에서도 데이터를 제공하며, 각 노드는 독립적으로 작동할 수 있도록 합니다. 그러나 일관성을 희생할 수 있습니다. 즉, 일부 노드는 최신 데이터를 제공하지 못할 수 있으며, 데이터의 일관성이 보장되지 않을 수 있습니다.
  • 예시 데이터베이스: Cassandra, Riak
    • 이들은 가용성과 파티션 내성을 제공하며, 네트워크 장애가 발생해도 여전히 데이터를 사용할 수 있지만, 일관성이 약간 떨어질 수 있습니다. 예를 들어, 일부 클라이언트는 최신 데이터를 받지 못할 수 있습니다.

3. CA (일관성 + 가용성)

  • 일관성과 가용성을 우선시하는 시스템은, 파티션 내성이 희생됩니다. 즉, 시스템이 네트워크 파티션을 견딜 수 없으며, 일부 노드가 통신할 수 없을 경우 시스템이 작동을 멈출 수 있습니다.
  • 예시 데이터베이스: 클래식 RDBMS (예: MySQL, PostgreSQL)
    • 이러한 시스템들은 일관성과 가용성을 보장하지만, 파티션 내성에 문제가 있을 수 있습니다. 네트워크 장애가 발생하면 시스템의 일부 기능이 중단될 수 있습니다.

CAP 정리를 기반으로 한 NoSQL 설계 선택

NoSQL 데이터베이스의 설계와 선택은 CAP 정리에 따라 비즈니스 요구사항과 시스템 특성에 맞게 이루어집니다. 분산 시스템에서는 네트워크 지연, 서버 장애, 데이터 일관성 요구 사항 등 다양한 요소들이 영향을 미치기 때문에, 설계자는 다음과 같은 사항을 고려해야 합니다:

  • 일관성이 중요한 경우:
    금융 거래 시스템이나 재고 관리 시스템 등에서는 일관성이 매우 중요합니다. 이 경우 CP 모델을 선택하는 것이 적합할 수 있습니다.

  • 고가용성이 중요한 경우:
    소셜 미디어나 대규모 웹 애플리케이션에서는 가용성이 매우 중요합니다. 이러한 경우에는 AP 모델을 선택하여 시스템의 중단 없는 서비스를 보장할 수 있습니다.

  • 파티션 내성이 중요한 경우:
    대규모 분산 시스템에서 파티션 내성은 필수적입니다. AP와 CP 모델을 선택할 때, 파티션 내성이 중요시되며, 데이터를 분산하여 처리할 수 있는 시스템이 필요합니다.

결국, CAP 정리를 이해하고 NoSQL 데이터베이스 설계에서 일관성, 가용성, 파티션 내성 중 어느 속성에 집중할지를 결정하는 것은 시스템의 요구 사항과 트래픽 패턴에 따라 달라집니다.

NoSQL 데이터베이스의 장점

  1. 확장성 (Scalability):

    • 확장성은 NoSQL 데이터베이스의 가장 중요한 장점 중 하나입니다. 현대 애플리케이션은 엄청난 양의 데이터를 생성하고 처리하므로, 강력하고 확장 가능한 데이터 관리 솔루션이 필수적입니다.
    • NoSQL 데이터베이스는 데이터를 여러 서버와 노드에 분배하여 수평 확장(horizontal scaling)을 가능하게 합니다. 이 방식은 데이터 요구 사항이 증가할 때, 추가 서버를 통해 데이터 작업을 분배하고 성능 저하 없이 데이터 처리 속도를 유지할 수 있습니다.
    • 이 탄력성은 기업이 데이터 증가에 맞춰 인프라를 확장하고, 응답 시간과 시스템 가용성을 유지하면서 성장할 수 있도록 돕습니다.
  2. 유연성 (Flexibility):

    • NoSQL 데이터베이스는 스키마리스(schemaless) 방식을 채택하여 데이터 구조의 유연성을 제공합니다. SQL 데이터베이스는 고정된 스키마에 의존하는 반면, NoSQL은 데이터를 동적으로 저장할 수 있어 데이터 모델에 변화가 있을 때 시스템을 수정하거나 마이그레이션할 필요 없이 쉽게 적응할 수 있습니다.
    • 이는 특히 빠르게 변화하는 애플리케이션이나 프로젝트에서 유용하며, 데이터 속성 추가나 변경 시 기존 시스템에 대한 영향을 최소화하면서 빠르게 대응할 수 있는 유연성을 제공합니다.
  3. 고가용성 (High Availability):

    • NoSQL 데이터베이스는 고가용성을 보장하는 다양한 메커니즘을 제공합니다. 시스템이 단일 실패 지점(single point of failure)을 방지하도록 설계되어 있으며, 데이터는 여러 노드에 복제되어 저장됩니다.
    • 하나의 노드가 다운되거나 장애가 발생해도, 시스템은 다른 노드로 트래픽을 라우팅하여 서비스 중단 없이 계속 작동할 수 있습니다. 이러한 내구성은 실시간 데이터 접근과 지속적인 운영이 중요한 애플리케이션에 이상적입니다.
  4. 성능 (Performance):

    • 성능 향상은 NoSQL 데이터베이스의 주요 장점 중 하나입니다. NoSQL은 단순한 데이터 모델과 수평적 확장을 통해 뛰어난 읽기/쓰기 성능을 제공합니다. 복잡한 조인 연산과 제약 조건이 없어 대규모의 동시 작업을 효율적으로 처리할 수 있습니다.
    • 이는 실시간 분석, 콘텐츠 배포 네트워크(CDN), 대규모 사용자 기반을 지원하는 애플리케이션에서 매우 유리합니다. 또한, 데이터가 여러 노드에 분배되므로 부하 분산이 잘 이루어지고 서버에 가해지는 작업 부담을 줄여 성능을 최적화할 수 있습니다.

NoSQL 데이터베이스의 단점

  1. 표준화 부족 (Lack of Standardization):

    • NoSQL 데이터베이스는 각각 고유한 데이터 모델과 쿼리 언어를 사용합니다. 이는 개발자가 다른 NoSQL 데이터베이스로 전환하거나 기존 시스템과 원활하게 통합하는 데 어려움을 겪게 할 수 있습니다.
    • NoSQL 데이터베이스에는 표준화된 쿼리 언어가 없기 때문에, 데이터 이식성이나 마이그레이션이 복잡할 수 있습니다. 또한, 학습 곡선이 있을 수 있으며, 데이터베이스마다 쿼리 언어와 데이터 조작 방법을 배우는 데 시간이 필요합니다.
  2. 제한된 트랜잭션 지원 (Limited Transaction Support):

    • NoSQL 데이터베이스는 전통적인 SQL 데이터베이스에서 제공하는 ACID 트랜잭션을 지원하지 않는 경우가 많습니다. 대신 BASE 모델을 채택하여 가용성과 파티션 내성을 우선시합니다.
    • 이 모델은 강력한 일관성보다는 확장성과 내결함성에 초점을 맞추지만, 데이터 일관성이 중요한 애플리케이션에는 적합하지 않을 수 있습니다. 예를 들어, 금융 시스템이나 복잡한 데이터 처리 워크플로우에는 트랜잭션의 강력한 보장이 필요할 수 있습니다.
  3. 성숙도와 생태계 (Maturity and Ecosystem):

    • 일부 NoSQL 데이터베이스는 상대적으로 새로운 기술로, 커뮤니티 지원, 도구, 문서화가 부족할 수 있습니다. 이로 인해 문제 해결이나 지원을 받을 때 어려움을 겪을 수 있습니다.
    • SQL 데이터베이스는 오랜 역사를 가지고 있어 풍부한 문서화와 도구를 제공하지만, NoSQL 데이터베이스는 이러한 면에서 부족할 수 있습니다. 이로 인해 문제를 해결하는 데 더 많은 시간이 소요될 수 있습니다.
profile
추영욱입니다.

0개의 댓글