스터디/CS 스터디

[데이터베이스] NoSQL - What are Data Models

제이온 (Jayon) 2021. 12. 17.

cs-study에서 스터디를 진행하고 있습니다.

도입

NoSQL(Not Only SQL)은 관계형 데이터 모델의 한계를 보완하기 위해 느슨한 스키마를 도입하여 고안된 모델이라고 많이 설명하며, 관계형 데이터 모델과 더불어 가장 많이 사용되는 데이터 모델이다. 따라서 우리는 데이터 모델이 무엇인지, 그리고 그 중 하나인 관계형 데이터 모델과 NoSQL은 각각 무엇이며 특징이 무엇인지 알아볼 것이다.

 

  1. 데이터 모델이란?
  2. 스키마란?
  3. 관계형 데이터 모델이란?
  4. NoSQL이란?

 

데이터 모델 (Data Model)

데이터 모델은 데이터의 요소를 정리하고 각 요소들이 서로, 그리고 실제 세상의 요소와 어떠한 관계를 갖고 있는지 표준화하는 추상적인 모델이다.

 

이 데이터에는 데이터 요소 A, B, C가 있고, 요소 B와 C는 A에 포함되어 있다. A는 자동차를 나타내고 B와 C는 각각 그 자동차의 색과 크기를 표현한다

 

데이터, 데이터의 관계, 데이터의 의미와 일관성, 제약 조건을 기술한다.

 

 

우리는 데이터 모델을 통해 데이터를 실제로 이용할 수 있는 형태로 가지고 있을 수 있게 되는 것이다.

 

데이터 모델이 기술하는 요소

기본 구성 요소

  • 개체 (Entity)
    • DB에 표현하려는 것이다.
    • 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체이며, 무형의 정보로서 서로 연관된 몇 개의 속성으로 구성된다.
  • 속성 (Attribute)
    • 데이터의 가장 작은 논리적 단위이다.
    • 개체를 구성하는 항목이다.

 

 

  • 관계 (Relation)
    • 개체 또는 속성 간의 관계이다.

 

 

표시해야 하는 3요소

  • 구조 (Data Structure)
    • 논리적으로 표현된 개체 타입 간의 관계로서 데이터 구조 및 정적 성질을 표현한다.
  • 연산 (Operation)
    • DB에 저장된 실제 데이터를 처리하는 작업에 대한 명세서
  • 제약 조건 (Constraint)
    • DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건

 

예시

아래는 관계형 데이터 모델의 3가지 요소이다.

 

 

데이터 모델의 분류 - Three Level Architecture

ANSI/SPARC에 의하면, 데이터 모델 인스턴스는 크게 3가지 계층으로 분류할 수 있다.

 

개념적 데이터 모델 (Conceptual Data Model)

  • 가장 단순하고 추상적인 모델이다.
  • 속성으로 기술된 개체 타입과 그들 간의 관계를 기술하여 현실 세계를 표현한다.
  • 이를 위해 데이터 요구 사항을 분석하고, 어떤 자료가 어떻게 관리되어야 하는지 분석해야 한다.
  • 핵심 엔티티와 그들 간의 관계를 발견하고, Entity-Relationship-Diagram(ERD)로 기술한다.

 

논리적 데이터 모델 (Logical Data Model)

  • 개념적 데이터 모델을 기반으로 기본적인 프레임워크를 설정한 모델이다.
  • 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있게 변환한 것이다.
  • 보통 데이터 모델이라 하면 논리적 모델을 가리키는 것이며, 하나의 DBMS는 하나의 논리적 모델을 선택하여 사용한다.
  • 데이터 간의 관계를 표현하는 방식에 따라 모델을 분류할 수 있다.
    • 관계 모델 (Relational Model)
    • 계층 모델 (Hierarchical Model)
    • 네트워크 모델 (Network Model)
    • ...
  • 논리적 데이터 모델을 설계하는 과정에서 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔티티에 배치되도록 하는 정규화가 이루어져야 한다.

 

물리적 데이터 모델 (Physical Data Model)

  • 가장 구체적인 모델이다.
  • 데이터 저장소로서 논리적 데이터 모델을 기반으로 어떻게 컴퓨터 하드웨어에 표현할 것인가를 표현한다.
  • 테이블, 컬럼으로 표현되는 물리적인 저장 구조와 사용될 저장 장치, 자료를 추출하기 위해 사용될 접근 방법 등을 기술한다.

 

스키마 (Schema)

DB의 구조(개체, 속성, 관계)와 제약 조건에 관한 전반적인 명세를 기술한 메타 데이터의 집합이다. 즉 DB를 어떻게 구성할 지 나타낸다.

ANSI/SPARC의 3단계 구성의 모델 분류에 따라 외부 단계, 개념적 단계, 내부적 단계로 서로 간섭하지 않는 모델로 분류된다.

 

 

외부 스키마 (External Schema) = 사용자 뷰

  • 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.
  • 하나의 DB는 여러 개의 외부 스키마가 존재할 수 있으며, 하나의 외부 스키마는 여러 개의 응용 프로그램이나 사용자가 공유할 수 있다.
  • 전체 DB의 한 논리적인 부분이므로 서브 스키마라고도 부른다.

 

개념 스키마 (Conceptual Schema) = 전체적인 뷰

  • DB의 전체적인 논리적 구조로서 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 것이다.
  • 조직 전체의 DB이므로 DBA가 구성한다.
  • 하나의 DB는 하나의 개념 스키마를 갖는다.
  • 개체 간의 관계와 제약 조건, DB의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.

 

내부 스키마 (Internal Schema) = 저장 스키마

  • 물리적 저장 장치의 입장에서 본 DB의 구조이다.
  • 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마이다.
  • 실제로 DB에 저장된 레코드의 물리적인 구조, 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 정의한다.

 

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

이론적으로 함수 종속에 의해 정규화된 모델이라고 정의할 수 있다. 테이블 형태의 저장 구조를 가지며 데이터 사이의 관계를 테이블의 키와 열을 통해 표현하는 저장 방식이다.

 

기본 개념

 

  • 릴레이션 (Relation)
    • 데이터가 저장되어 있는 2차원 테이블 구조이다.
    • 머리 부분(Head Intension, 내포)인 arrtibute와 몸통 부분(Body Extension, 외포)인 tuple로 구분할 수 있다.
  • 튜플 (Tuple)
    • 릴레이션의 열에 해당한다.
    • 속성의 집합이며, 레코드나 인스턴스라고도 부른다.
  • 속성 (Attribute)
    • 릴레이션의 행에 해당한다.
    • 개체를 구성하는 속성을 나타내며, 필드라고도 부른다.
    • 이때, 튜플을 유일하게 식별할 수 있는 attribute를 식별자라고 한다.
  • 스키마 (Relation Schema)
    • 릴레이션의 이름 + 내포
  • 릴레이션 인스턴스 (Relation Instance0
    • 릴레이션에 입력된 튜플의 집합
  • 차수 (Degree)
    • 릴레이션을 구성하는 속성의 수
  • 카디널리티 (Cardinality)
    • 릴레이션에 입력된 튜플의 수
    • Degree가 1개 이상이고, Cardinality가 0개 이상이면 유효한 Relation이다.
  • 도메인 (Domain)
    • 하나의 속성이 가질 수 있는 값의 범위이다.

 

특징

ACID 속성

관계형 데이터 모델은 ACID라고 불리는 4가지 속성을 만족하는 특징을 가지고 있다.

 

  • Atomicity (원자성)
    • 트랜잭션은 완벽하게 실행하거나, 전혀 실행되지 않는다.
  • Consistency (일관성)
    • 트랜잭션이 커밋되면, 데이터는 DB 스키마를 준수해야 한다.
  • Isolation (격리성)
    • 동시에 일어나는 트랜잭션들은 각각 별도로 실행되어야 한다.
  • Durability (내구성)
    • 시스템 장애 시 마지막으로 알려진 상태로 복구할 수 있어야 한다.

 

확장

하드웨어의 계산 성능을 개선하거나 읽기 전용 워크 로드의 복제물을 추가하여 확장한다.

 

데이터의 이용

데이터를 저장 및 검색하기 위해 SQL을 준수하는 쿼리를 이용하여 요청한다.

 

한계

  • 관계형 데이터베이스의 핵심은 데이터를 중복해서 저장하지 않도록 설계하는 것이다.
  • 데이터 구조를 효율적으로 설계하기 어렵다는 단점이 생긴다.
  • 일관성을 보장하는 관계형 모델의 특징에 의해 수평적인 확장이 어렵다.
    • 수직적 확장(Vertical Scalability)은 CPU나 RAM 같은 부품이나 하드웨어를 추가해주거나 교체를 해 전체적인 성능을 높이는 것을 의미한다. 그래서 소프트웨어의 설계나 구조에 변화를 주거나 시간을 따로 쏟을 필요가 없다. 단순하게 데이터베이스 서버의 성능을 향상한다.
    • 수평적 확장(Horizontal Scalability)은 더 많은 서버를 추가해서 데이터베이스를 전체적으로 분산하는 것을 의미한다. 하나의 데이터베이스에서 작동하지만 여러 호스트가 사용 가능한 구조이다.
      • 관계형 데이터 베이스를 수평적으로 확장하는 것이 어려운 이유는 관계형 모델이 일관성을 보장하도록 설계되어 있다는 사실과 관련이 있다. 즉, 동일한 데이터 베이스에 쿼리를 보내는 클라이언트는 항상 최신의 데이터를 보게 해야 한다. 여러 시스템에 걸쳐 관계형 데이터 베이스를 수평으로 확장하는 경우 클라이언트가 A 노드가 아닌 B 노드에 데이터를 쓸 수 있고 처음 쓴 B 노드와 다른 노드가 연결되는 시간이 존재하여 변경 사항이 반영되는 업데이트 지연이 발생할 수 있어 일관성을 보장하기 어려워진다.
  • 스키마에 의해 미리 정의된 데이터 타입과 일치하는 구조화 된 데이터만 관리할 수 있어서 비정형 데이터에 관한 관리가 어렵다.

 

NoSQL

특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 DB로서 현대적인 애플리케이션 구축을 위한 유연한 스키마를 가지고 있다. NoSQL은 대량의 분산 데이터를 저장/조회하는 데에 특화되어 있으며, 개발의 용이성, 기능성 및 확장성을 인정 받고 있다.

 

특징

  • 성능과 규모 확장에 최적화된 다양한 데이터 모델 제공
  • ACID 속성을 완화하여 수평적인 확장 보장
  • 분산형 아키텍처를 사용하여 액세스 분할성 존재
  • 객체 기반 API를 통해 데이터를 쉽게 저장 및 검색
  • 장점
    • 유연성
      • 유연한 스키마를 제공하기 때문에 빠르고 반복적인 개발이 가능하며, 반정형 및 비정형 데이터를 다루기에 용이함
    • 확장성
      • 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계되어 있음
    • 고성능
      • 특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 관계형 데이터베이스보다 유사한 기능을 더 뛰어난 성능으로 처리 가능
    • 고기능성
      • 각 데이터 모델에 맞추어 특별히 구축된 뛰어난 기능의 API와 데이터 유형을 제공

댓글

추천 글