본문 바로가기

이론

DB 발전 과정

 

데이터베이스(Database): 데이터의 저장소

 

데이터베이스 관리 시스템(DBMS): 데이터베이스를 운영하고 관리하는 소프트웨어

 

SQL(Structed Query Language): 구조화된 질의 언어, 데이터베이스의 모든 작업을 통제하는 비절차적 언어

비절차적 언어?
데이터베이스 사용자(이하 사용자)가 SQL을 사용해 원하는 작업의 결과만 기술하고, 그 작업이 어떻게 수행될 것인지는 전혀 고려하지 않아도 된다는 것을 의미한다

 

 

DBMS 발전과정

 

1) 계층 DBMS

계층적 데이터 모델은 데이터 모델의 가장 오래된 유형이다. 트리와 같은 구조로 데이터를 구성된다.

각 노드에는 정화히 하나의 부모 노드가 있고, 부모노드는 자식노드를 여러개 가질 수 있다.

 

 

2) 네트워크 DBMS

 

계층적 데이터 모델의 고급 버전이다. 데이터를 구성하기 위해 트리 구조 대신 방향 그래프를 사용한다. 하나의 자식노드는 둘 이상의 부모를 가질 수 있다. 

 

 

3) 관계 DBMS (RDBMS)

데이터는 테이블 형식으로 표기되며 물리적 구조가 아닌 데이터만 다룬다.

  • 다대다 관계도 구현할 수 있다.
  • SQL을 이용한 선언적 질의 기능을 제공
  • 레코드는 행과 열의 도움으로 연결된다.
  • 데이터 독립성을 제공한다.
데이터 독립성?
데이터베이스의 구조와 데이터의 내용이 서로 영향을 미치지않는 것을 의미한다.

 

문제점:

  • 데이터 타입의 제한과 새로운 타입의 생성 및 기존 타입의 확장 불가능
  • 비정형 복합 정보를 표현하기가 어렵다.
  • 상호 관련된 객체들을 찾아내어 처리하기가 어렵다.
  • 임피던스 미스매치 문제로 인해서 응용 개발 및 유지가 어렵다.

 

4) 객체지향 DBMS (OODBMS)

등장 배경:

 

 1. 프로그래밍의 패러다임이 '절차적 프로그래밍' 방식에서 '객체지향 프로그래밍' 방식으로 바뀌어서

2. 기존 관계형 DMBS(RDBMS) SQL과 프로그래밍 언어 사이에 데이터 구조 차이로 '임피던스 불일치'라 불리는 충돌 문제가 발생하여서

3. 컴퓨터 성능과 네트워크 기술의 발전으로 인한 비정형 데이터를 관리할 수 있는 시스템에 대한 요구가 커져서

임피던스 불일치? (Impedance mismatches)
기존 관계형 데이터베이스의 SQL과 프로그래밍 언어 사이에 데이터 구조, 기능 등의 차이로 발생하는 충돌을 일컫는다.

 

특징:

  • RDBMS의 경우 미리 정의된 데이터 형식에 맞춰 데이터만 저장할 수 있는 데 비해 객체지향DBMS는 '메소드'를 함께 저장해 사용할 수 있다.
  • 관계형DBMS는 데이터 저장 방식이 테이블 구조에 한정돼있다. 각체지향DBMS의 경우 데이터 개체간의 관계가 포인팅 방식으로 돼 있어, 실세계의 모델링에 관계형 DBMS보다 유리하다.
  • '임피던스 불일치'가 발생하지 않는다.

문제점과 붕괴:

 

객체지향 DM는 관계형 DB를 대체하기 위한 목적으로 개발된 것이 아니었다. 하지만 마케팅을 진행하면서 관계형DBMS의 경쟁자가 되었고 여러 문제점이 제기되었다.

→ SQL쿼리 사용 못하고, 검색 성능이 느리고 대규모 트랜잭션 처리 성능이 떨어진다.

→ SQL과 흡사한 OQL(Object Query Language), 검색 기능 강화, 트랜잭션 처리 능력 보강

오라클의 객체관계 DBMS 선전

객체지향DB 시장 붕괴

 

 

5) 객체관계형 DBMS (ORDBMS)

ORDB는 객체지향 데이터베이스 모델이 있다는 점을 제외하고는 RDB와 유사하다.  

 

특징:

  • 사용자 정의형 지원: 사용자 정의형 데이터 타입의 저장 및 검색 기능
  • 참조 타입 지원: 하나의 객체 레코드가 다른 객체 레코드를 참조함으로써 참조 구조를 이용한 내비게이션 기반 접근 가능
  • 중첩된 테이블: 테이블 안의 하나의 컬럼이 또 다른 테이블로 구성됨으로써 복합 구조의 모델링이 가능해짐
  • 대단위 객체지원: 이미지, 오디오, 비디오 등의 대단위 비정형 데이터를 위한 LOB(Large Object)을 기본형으로 지원함.
  • 테이블간 상속관계: 테이블 간의 상속 관계를 지정함으로써 객체지향의 장점 수용
  RDBMS OODBMS ORDBMS
데이터 모델 문자, 숫자, 날짜 등 단순한 정보 타입만 지원 사용자 정의 타입 및 비정형 복합정보 타입 지원 사용자 정의 타입 및 비정형 복합정보 타입 지원
주된 질의어 SQL OOL SQL(SQL3)
대규모 처리 능력 탁월 보통 탁월
시스템 안정성 탁월 보통 탁월
장점 오랜 기간 걸쳐 검증된 시스템 안정성과 대규모 정보처리 성능 복잡한 정보 구조의 모델링 가능 기존 RDBMS의 안정성에 객체지향 모델의 장점을 가미
단점 제한된 형태의 정보만 저리 가능하고, 복잡한 구조의 모델링이 힘들다. 기본적인 DB관리 기능에 있어서 성능 및 안정성 검증 미비  

 

 

6) NoSQL (비관계형 데이터베이스)

Not Only SQL, 단순히 기존 관계형 DBMS가 갖고있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 것을 의미한다.  2000년 후반으로 넘어오면서 비정형데이터라는 것을 보다 쉽게 담아서 저장하고 처리할 수 있는 구조를 가진 데이터베이스들이 관심을 받게되면서 NoSQL 데이터베이스가 각광받았다.

 

목적:

많은 데이터 량과 데이터 처리량이 계속적으로 증가할 경우 기존 'RDBMS'은 아래와 같은 문제가 발생한다

  • 스키마 문제: 빅데이터를 RDB의 스키마에 맞춰 변경해서 넣으려면 매우 긴 시간의 down time 발생
  • 스케일 아웃의 한계: RDBMS는 애초에 수평확장(scale out)을 염두하고 설계된 시스템이 아니다. SQL은 일관성을 보장해야하기 때문에 수평확장이 복잡해져 불가능하다.

이러한 문제를 해결하기위해 NoSQL이 탄생했다. NoSQL은 초고용량 데이터 처리 등 성능에 특화된 목적을 위해, 비관계형 데이터 저장소에, 비구조적인 데이터를 저장하기 위한 분산 저장 시스템이라고 볼 수 있다. 

 

특징:

  • 기존의 관계형 데이터베이스보다 더 융통성있는 데이터 모델 사용
  • 데이터 저장 및 검색을 위한 특화된 매커니즘 제공 
  • RDB에서 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
  • 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
  • 확장성, 가용성, 높은 성능
  • 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
  • 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의(Schema-less)

 

데이터 구조

1. Key Value Store

이름에서 알 수 있듯이 이 유형의 NoSQL 데이터베이스는 해시 테이블을 구현하여 해당 데이터 값에 대한 포인터와 함께 고유 키를 저장합니다. 값은 정수와 같은 스칼라 데이터 유형 또는 JSON, 목록 또는 BLOB 등과 같은 복잡한 구조일 수 있습니다. 키-값 저장소는 설계 및 구현할 수 있는 가장 간단한 유형의 NoSQL 데이터베이스입니다. 클라이언트는 get, put  delete API를 사용하여 데이터를 읽고 쓸 수 있으며 항상 기본 키 액세스를 사용하기 때문에 확장이 매우 쉽고 고성능을 제공합니다. 

 

키-값 저장소는 애플리케이션에 특정 데이터 값, 여러 고유 키 및 이들 간의 관계를 포함하는 복잡한 쿼리 또는 빈번한 업데이트가 필요한 경우 적합하지 않습니다.

Ex) Redis, Riak

 

2. Document Store

문서 저장소는 키와 해당 값이 있다는 점에서 키-값 저장소와 유사하지만 값은 XML, JSON, BSON형식으로 저장된 데이터 구조를 제공합니다. 이 값을 문서라고 합니다. 각 문서는 문자열, 날짜, 이진 또는 배열과 같은 형식화된 값과 함께 특성 메타데이터를 포함하는 개체입니다. 이렇게 하면 문서의 특성을 기반으로 데이터를 인덱싱하고 쿼리할 수 있습니다.

문서 데이터에는 유연한 스키마가 있으며 각 문서에는 서로 다른 속성 집합이 있을 수 있습니다. 문서는 비즈니스 요구 사항에 따라 컨테이너로 그룹화됩니다. 관계는 이러한 컨테이너 내에 저장되지 않으므로 데이터베이스에 조인을 사용할 수 없습니다. 또는 문서 집합을 문서 내에 포함하여 비정규화 수준을 제공할 수 있습니다. 

 

유연한 스키마와 복잡한 쿼리 기능으로 인해 문서 저장소는 널리 사용되며 다음과 같은 다양한 사용 사례에 적합합니다.

  • 콘텐츠 관리 시스템
  • 전자 상거래 웹 사이트
  • JSON을 사용하는 미들웨어 애플리케이션

문서 저장소는 응용 프로그램에 여러 작업이 포함된 복잡한 트랜잭션이 필요한 경우 적합하지 않습니다.

Ex) MongoDB, Couchbase

 

3. Column family DB

열 패밀리 데이터베이스에서 데이터는 열 패밀리로 그룹화된 열 셀에 저장됩니다. 이러한 데이터베이스는 지도의 다차원 중첩 정렬 맵으로 구현됩니다. 셀은 열에 매핑되고, 열은 다시 열 패밀리에 매핑됩니다. 컬럼 패밀리는 세트는 행 키를 사용하여 식별됩니다. 읽기 및 쓰기는 열 집합에서 행 키를 사용하여 수행됩니다. 이러한 열은 디스크에 연속 항목으로 저장되어 성능을 향상시킵니다.

데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스입니다. 각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있습니다. 하나의 행에 많은 열을 포함할 수 있어서 유연성이 높아 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식입니다.

 

컬럼 패밀리 데이터베이스는 고가용성이 필요한 대량의 데이터를 위해 설계되었으며 다음과 같은 사용 사례에 적합합니다.

고가용성?
서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질
을 말한다. 고(高)가용성이란 "가용성이 높다"는 뜻으로서, "절대 고장 나지 않음"을 의미한다.

 

  • 시계열 데이터
시계열 데이터?
 시계열 데이터란 일정한 시간 동안 수집 된 일련의 순차적으로 정해진 데이터 셋의 집합입니다. 시계열 데이터의 특징으로는 시간에 관해 순서가 매겨져 있다는 점과, 연속한 관측치는 서로 상관관계를 갖고 있습니다.

 즉, 시계열 데이터의 분석 목적은 시계열이 갖고 있는 법칙성을 발견해 이를 모형화하고, 또 추정된 모형을 통하여 미래의 값을 forecasting 하는 것입니다.
  • IoT 애플리케이션
  • 로깅 및 기타 쓰기 무거운 응용 프로그램

Ex) HBase, Cassandra

 

4. Graph DB(속성 그래프)

프로퍼티 그래프는 노드와 노드 간의 관계로 구성됩니다. 노드와 관계 모두 속성이라는 여러 특성을 저장할 수 있습니다. 노드는 그래프의 엔터티이며 노드에 컨텍스트와 메타데이터를 제공하는 데 사용할 수 있는 레이블로 태그를 지정할 수 있습니다. 관계는 두 노드 간에 방향성, 양방향 및 명명된 연결을 제공합니다. 두 노드 사이에는 둘 이상의 관계가 있을 수 있으며 각 관계에는 방향, 유형, 시작 노드 및 끝 노드가 있습니다.

 

그래프 데이터베이스는 엔터티 간의 경로를 트래버스하거나 엔터티와 해당 속성 간의 관계를 쿼리해야 하는 애플리케이션에 적합합니다.

 

  • 위치 및 내비게이션 기반 서비스
  • 네트워크 및 IT 인프라
  • 사기 탐지
  • 메타데이터 관리

Ex) Neo4j, DSE Search/TItanDB

 

 

 

출처

제1장 SQL 소개 (tmaxsoft.com)

DB-Engines Ranking - popularity ranking of database management systems

네트워크와 관계형 데이터 모델의 차이점 - GeeksforGeeks

[IT산업 20년 전] 객체지향 데이터베이스의 몰락 < IT산업20년전 < 기사본문 - 컴퓨터월드 (comworld.co.kr)

지식덤프 (jidum.com)

NoSQL이란 무엇인가? 대량데이터 동시처리위한 DBMS 종류와 특징 | 인사이트리포트 | 삼성SDS (samsungsds.com)

NoSQL 데이터 아키텍처 및 데이터 거버넌스: 알아야 할 모든 것 - DATAVERSITY

 

'이론' 카테고리의 다른 글

2024-07-30  (0) 2024.07.30
2024-07-29  (0) 2024.07.29
Session VS JWT  (1) 2023.11.12
싱글톤(singleton) 패턴  (0) 2023.11.09
스프링(Spring)이란?  (0) 2023.11.09