Skip to content

Latest commit

 

History

History
169 lines (84 loc) · 5.51 KB

박성우.md

File metadata and controls

169 lines (84 loc) · 5.51 KB

1. RDB와 NoSQL의 기본 개념

  • RDB

    관계형 데이터베이스로, 데이터를 테이블 형태로 구성하고, 각 테이블은 행과 열의 조합으로 데이터를 저장한다. 테이블 간에는 관계를 맺을 수 있다.

  • NoSQL

    비관계형 데이터베이스로, 다양한 데이터 모델을 사용하여 데이터를 저장한다. 주로 키-값, 문서, 열 지향, 그래프 형태의 데이터 구조를 사용한다.

2. RDB와 NoSQL의 데이터 모델 차이

  • RDB

    데이터는 정해진 스키마에 따라 테이블에 저장된다.

    데이터 간에 관계를 맺을 수 있다.

    테이블 간의 관계는 외래 키를 통해 정의된다.

  • NoSQL

    데이터는 스키마가 없거나 유연한 스키마를 가진다.

    각 문서나 객체는 고유한 식별자가 있다. 데이터 간의 관계를 명시적으로 정의하지 않고, 중첩 구조로 표현할 수 있다.

    • 중첩 구조

      JSON 같은 형식으로 데이터를 저장할 때 필드를 중첩해서 저장하는 구조

      ex)

      {
        "id": 1,
        "name": "Park",
        "age": 26,
        "address": {
          "city": "Seoul",
          "country": "Korea"
        }
      }

      중첩 구조는 데이터 간의 관계를 명시적으로 정의하지 않고도 데이터를 효율적으로 저장하고 조회할 수 있다. 즉, 데이터를 읽는 작업이 더욱 효율적이고 빠르게 처리될 수 있다.

3. RDB와 NoSQL은 각각 어떤 종류의 데이터를 처리하기에 적합한지?

  • RDB

    정형화된 데이터와 데이터 간의 관계가 중요한 경우 적합하다.

    ex) 금융 거래 기록, 주문 정보 등

  • NoSQL

    비정형화된 데이터, 대량의 데이터, 실시간 데이터 및 확장성이 중요한 경우에 적합하다.

    ex) 소셜 미디어 데이터, 로그 파일, 센서 데이터

4. RDB와 NoSQL은 어떤 종류의 프로젝트 또는 애플리케이션에 사용되는지?

  • RDB

    트랜잭션 처리, 복잡한 쿼리, 데이터의 일관성이 중요한 시스템

  • NoSQL

    대규모 데이터 저장과 처리, 분산 시스템, 실시간 애플리케이션

    왜?

    1. 확장성

      NoSQL 데이터베이스는 수평적 확장을 지원하여 대규모 데이터 처리에 적합하다. 데이터를 여러 서버에 분산하여 저장하고 처리하는 능력을 확장할 수 있다.

    2. 분산 시스템

      NoSQL 데이터베이스는 데이터를 여러 노드에 분산하여 처리하는 기능을 제공한다.

      즉, 고가용성을 갖춘 시스템을 구축할 수 있다.

    3. 실시간성

      데이터의 쓰기, 읽기 작업이 빠르며 다양한 인덱싱과 쿼리 기능을 제공하여 실시간으로 데이터 처리를 응답할 수 있다.

5. RDB와 NoSQL의 확장성과 성능 차이

  • RDB

    수직적 확장으로 서버의 처리 능력을 증가시킨다. 하지만 수평적 확장에는 제약이 있다.

    물론 샤딩같은 기능을 지원하지만, NoSQL DB가 수평적 확장을 더 적극적으로 지원한다.

  • NoSQL

    수평적 확장으로 여러 서버에 데이터를 분산하여 처리 능력을 증가시킨다.

6. RDB와 NoSQL의 일관성 유지 방법

  • RDB

    트랜잭션을 통해 데이터 일관성을 유지한다.

  • NoSQL

    CAP 이론을 기반으로 선택적인 일관성 모델을 사용한다.

CAP 이론이란?
  • Consistency (일관성)

    분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접근하더라도 언제나 같은 데이터를 보게 되어야한다.

  • Availability (가용성)

    분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야한다.

  • Partition tolerance(파티션 감내)

    파티션은 두 노드 사이에 통신 장애가 발생하였음을 의미한다.

    네트워크에 파티션이 생기더라도 시스템은 계속 동작해야한다!

Consistency, Availability, Partition tolerance 라는 세 가지 요구 사항을 동시에 만족하는 분산 시스템을 설계하는 것은 불가능하다! image (1)

실세계에서 CA는 존재하지 않는다. 왜냐하면 실세계에서 네트워크 장애는 피할 수 없는 일이기 때문이다.

즉, 파티션 문제가 발생하면 일관성과 가용성 중 하나를 택해야한다.

ex)

Untitled

n3 노드가 n1, n2 노드와 통신할 수 없는 상황이다.

  1. 일관성을 택한 경우

n1,n2,n3에 생길 수 있는 데이터의 불일치 문제를 피하기 위해 n1, n2에 대해 쓰기 연산을 중지시켜야한다.

즉, 데이터의 일관성은 유지되지만 가용성은 깨진다.

  1. 가용성을 택한 경우

n1, n2에 쓰기 연산을 계속 허용한다. 설사 n3에서 낡은 데이터를 반환할 위험이 있더라도.

즉, 데이터의 가용성은 유지되지만 일관성은 깨진다.