loading
본문 바로가기
BACK-END/SQL, DB

데이터베이스의 흐름, DBMS의 종류와 형태에 관하여

by pikiforyou 2024. 1. 11.

 

 

 

데이터베이스란?

 

데이터베이스는 저장된 데이터를 체계적으로 모은 것이라고 정의할 수 있다. 즉, 논리적으로 모델링된 정보 클러스터를 데이터라고 한다면, 모든 데이터 모음은 저장 방법이나 위치에 관계없이 데이터베이스라고 할 수 있다.

문서에 종이를 보관해놓는것도 데이터베이스고, 컴퓨터에 저장한 데이터도 데이터베이스이다. 하지만 컴퓨터가 발전하고 이 안에 논리적으로 저장하고 효율적으로 사용하기 위한 방법의 고민이 관계형모델부터 NoSQL을 시작하게 했다고 볼 수 있다. 

 

초기 방안중 '계층적 모델'이 있었는데, 현대 파일시스템과 유사한 트리구조를 가지고 있다.

다만, 이 계층적모델은 부모(상위)와 자식(하위)간의 관계의 유연성이 떨어지는 문제가 있었는데, 

하나의 부모는 하나의 자식을 가질수도 있고, 여러명의 자식을 가질수도 있지만 하나의 자식은 여러개의 부모를 가질수가 없는 구조였다. 즉, 1:1(일대일)이나, 1:N(일대다) 구조는 가능하지만, N:N(다대다) 구조가 어렵다는 소리이다.

 

아래 표를 들어 쉽게 설명하자면, [animals]에는 [birds], [fish]등 여러개가 있지만, [birds]는 [animals]하나에만 종속되어 있다. [birds]가 [animals]이 아닌 [생명체]라는 상위를 가지고 싶을때 문제가 발생할 수 있다.

 

 

이후 제시된 것이 관계형 모델이며, SQL(Structured Query Language,구조화된 쿼리언어) 로 관리되고 테이블과 테이블간의 관계를 통해 가장 많이 사용되는 데이터베이스 모델이다. 물론 완벽한 것은 없어 SQL에도 한계가 있는데 이를 보완하기 위해 생겨난 noSQL 데이터베이스 모델도 있다. 이 모든 시스템들은 서로 대체되는 개념보다는, 단점을 보완하는 장점이 있고, 그 장점만큼 각각의 단점 또한 존재하기에 개발을 할 때 필요한 모델을 선택하는 개념에 가깝다고 생각하면 좋다. 

 

 

 

 

파일 시스템과 데이터베이스의 차이점 ?

 

파일 시스템은 이름으로도 알 수 있듯, 기본적으로 저장 매체에 파일을 배열하는 논리적인 방법이다. 가장 많이 쓰이는 NTFS(신기술 파일 시스템)외에도 FAT(파일 할당 테이블), EXT(확장 파일 시스템), HFS(Macintosh 계층적 파일 시스템)등이 있다.
파일 생성, 삭제, 변경등의 기본작업과 일반적으로 상위와 하위로 나누는 수직적인 계층 구조로 저장된다. 간단하고 효율적이지만, 트리구조의 특성상 N:N 등의 복잡한 관계를 관리하고 일관성을 보장하기엔 부족하다. 즉 소량의 비정형 데이터를 관리하기엔 적합하지만, 대량의 정형 데이터를 관리하기엔 어렵다.

특히 파일 시스템은 초기에 사용된 만큼 데이터를 접근하고 조작하는 것 외에는 별도의 제어를 할 수가 없으며, 운영체제의 일부로 제공되고 여기에서 여러 단점이 파생된다.

 

1. 여러명의 사용자가 동시에 한 파일에 접근할 수 없다(동시성 사용 불가)

2. 보안수준이 낮고, 권한에 따른 접근 제어도 어려우며 데이터 백업 및 복구등의 기능이 없다.

3. 덜 복잡하지만, 질의어(쿼리처리)가 없어 효율적으로 내용을 찾기 어렵다

4. 일관성이 떨어지며, 데이터 독립성이 없다.

5. 여러 파일에 데이터가 분산될 수 있고, 데이터를 공유하기가 어려우며, 따라서 일부만 데이터가 변경된다면 데이터간 불일치가 발생해 중복된다.

 

이러한 단점을 극복하고자 만들어진것이 데이터베이스 시스템이다. 앞서말한 파일 시스템을 반대로 생각해보면 데이터베이스 시스템의 특징이 될 것 같다.

1. 여러명의 사용자가 동시에 데이터에 엑세스할 수 있다.

2. 보안 매커니즘과, 데이터 백업 및 복구기능이 있다.

3. 질의어를 통해 효과적으로 접근가능하며, 무결성 제약조건 및 데이터간에 관계를 알기 쉽다

4. 중앙 집중식으로 관리되어 데이터를 공유하며, 논리적/물리적 데이터 독립성을 가진다.

5. 중복성이 최소화되며, 정규화로 데이터 일관성이 향상되었다.

 

 

 

DBMS(데이터베이스 관리시스템)

데이터베이스 관리 시스템(DBMS)은 데이터베이스를 관리하는 데 사용되는 소프트웨어라고 생각하면 된다.

사용자의 입장에서는 데이터베이스의 구조를 정의하고, 계정을 만들고, 성능을 모니터링하며 백업/복원등을 조작할 수 있고, 

데이터베이스 관리자는 사용자의 권한을 제어하는 등 다양한 관리시스템을 제공한다. 

 

 

여러가지 DBMS의 유형에 대해 알아보자.

분산형 (Distributed)

분산 DBMS를 사용하면 분산 데이터베이스를 관리할 수 있다. 여러 데이터베이스가 단일 데이터베이스로 표시되고 작동하도록 만드는데, 즉 분산되어 있지만 하나로 인식되게 만드는 구조이다. 분산 데이터베이스에 관하여 궁금하여 여러가지를 찾아보았는데, 아래의 두개의 글이 흥미롭다. 분산형에 대한 글을 보다보니 AWS가 생각났는데, 분산 관계형이라고 하니 그렇구나 싶었달까.

분산 데이터베이스와 성능 >> https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=336

 

분산 데이터베이스와 성능

1. 분산 데이터베이스의 개요 1990년대에는 데이터베이스를 분산하여 저장하고 그것을 하나의 데이터베이스로 인식하여 사용하는 기술은 아주 난이도가 높은 고급기술로 인식되었다. 2000년도에

dataonair.or.kr

분산 관계형 데이터베이스 >> https://www.itworld.co.kr/news/125987

 

RDBMS·NoSQL 장점만 모았다··· '분산 관계형' 데이터베이스 5종

1980년대부터 써온 관계형 SQL 데이터베이스는 흔히 중앙 처리 장치나 단일 서버에서 실행됐다. 그것밖에 없었기 때문이다.  ⓒ

www.itworld.co.kr

 

계층형 (HDBMS, Hierarchical)

계층적 데이터베이스는 트리와 같은 구조 또는 부모-자식 구조로 데이터를 저장한다. 데이터는 링크를 통해 연결된 레코드나 노드로 저장되며, 처음 구성을 완료한 후에 이를 변경하기가 상당히 까다롭다.

 

망형 (NDBMS, Network)

네트워크 DBMS는 레코드를 여러 기본 및 보조 레코드에 연결할 수 있는 모델이다. 네트워크 모델 내에서 상호 연결된 데이터 포인트를 통해 계층형과는 달리 일대다 및 다대다 관계를 지원할 수 있다. 하위에 있는 레코드끼리도 연결되어 유연하지만, 모든 구조를 이해해야지만 잘 활용할 수 있다.

 

관계형 (RDBMS, Relation)

관계형 데이터베이스 관리 시스템(RDBMS)은 가장 보편화되어있고, 관계를 가지고 데이터를 저장, 관리 및 검색할 수 있다. 질의어를 통해(query language) 편리하게 사용할 수 있고, 데이터의 무결성/트랜잭션 처리등으로 기본적으로 안정적이지만 확장하기가 까다롭고, 최근에 요구되는 비정형 데이터를 수용하기가 어렵다

 

객체지향 (Object-Oriented)

객체지향 DBMS는 데이터를 객체 형태로 저장한다. 관계형을 사용하면서 생겨난 여러 요구사항들을 만족하기 위해 객체지향 프로그래밍 기술을 접목하려는 시도였는데, 사용자가 정의한 정의타입, 비정형 모델링 가능을 제공하며 객체들 간의 참조구조(reference)를 통해 접근이 가능하다. 하지만 기본적인 안정성은 관계형보다 떨어진다

 

객체관계형 (Object-Relation)

기존의 관계형 모델에, 객체지향 모델의 장점을 추가한 모델이다. 즉, 사용자 정의 타입을 지원하고, 참조타입을 지원하며 중첩 테이블을 지원한다. 대단위 객체의 저장(LOB, Large Object)타입을 기본으로 지원하며, 오라클의 경우 object타입을 지원하면서 상속기능도 구현한다고 한다.

 
 

 

여러가지 데이터베이스들에 관하여

여기 2022년 기준 인기있는 DBMS(DataBase Management System) 랭크 목록이 있다. 위에서도 얘기했듯 많이 쓰인다고 완벽한 DB가 아니라, 데이터의 저장 목적과 유형, 개발의도에 맞게 선택되는 DB가 가장 좋은 DBMS이다.  

나는 Oracle, MySQL, MongoDB 를 써보았고, 사용해보고 싶었던 시스템은 PostgreSQL, Redis이다.

참조사이트에 설명이 잘되어있어 참고해서 가지고 와보았다

 

1. 오라클 데이터베이스

Oracle Corporation에서 개발하고 운영하는 관계형 데이터베이스 관리 시스템이다. SQL을 제공하며, 전통적으로 RDBMS 을 제공했다. 찾아보면서 알게되었는데, 워낙 유명해서 SQL을 대표하는 줄 알았는데, NoSQL 클라우드 데이터 솔루션도 제공한다고 한다.

 

장점

  • 고성능: RAC(Real Application Clusters)와 같은 기능을 통해 사용자는 여러 서버에서 데이터베이스 성능을 확장하고 데이터 가용성을 높일 수 있다.
  • 유연성: 유연한 배포 옵션으로 온프레미스 또는 클라우드에 배포할 수 있다.

단점

  • 높은 비용: 비용 측면에서 고급형이므로 소규모 조직에서는 솔루션을 구입하기가 더 어렵다. 확실히 꽤 비싸다고 들었다.
  • 학습 곡선: 러닝커브가 높다고 한다. 데이터베이스를 설정하고 구성하려면 인증된 엔지니어를 고용해야 할 수도 있다.

사용 사례

Oracle Database는 온라인 트랜잭션 처리(OLTP) 및 데이터 웨어하우징을 위한 훌륭한 솔루션을 제공한다.

 

 

 

2. MySQL

MySQL역시 널리 사용되는 RDBMS이다. Sun Microsystems(현재 Oracle Corporation)에 인수되기 전에 처음에는 MySQL AB에서 만들고 개발했다. MySQL은 오픈 소스임에도 불구하고 계속해서 보안 및 기능 업데이트가 자주 제공되는 편이다. 원래 오픈소스에서 시작했다보니, 인수된 후 개발자가 오픈소스로 다시 배포하기도 했는데 그게 MariaDB이다. 사실상 자매격 

 

장점

  • 무료 설치: Community Edition은 무료로 다운로드할 수 있으며 대규모 개발자 커뮤니티에서 지원한다. 사실상 많은 스타트업과 기업에서 옵션으로 두는 데이터베이스 시스템이라고 생각한다. (개인적인 오류일수도 있지만) 내가 일했던 업체들은 다 mySql을 사용했다.
  • 클라우드 호환성: MySQL은 Amazon Web Services(AWS)와 같은 널리 사용되는 클라우드 제공업체에서 지원한다. Google Cloud Platform(GCP) 및 Microsoft Azure 데이터베이스를 클라우드로 가져오려는 기업에게 매력적인 옵션. 

단점

  • 부분 지원: 커뮤니티 에디션으로 대부분의 기능을 쓸수는 있지만, 기술 지원 자체는 MySQL 유료 버전에서만 제공된다. 즉, Community Edition을 사용하는 경우 문제를 직접 해결해야 한다. 
  • 제한된 기능:증분 및 차등 백업 기능과 같은 특정 기능은 MySQL 유료 버전에서만 사용할 수 있다.

다음에 이상적입니다.

MySQL은 소규모 웹 기반 애플리케이션을 구축하는 데 이상적이다.

 

 

 

3. 마이크로소프트 SQL 서버

Microsoft SQL Server(또는 SQL Server)는 Microsoft에서 설계하고 개발한 상용 RDBMS이다. 온프레미스 또는 클라우드에 배포할 수 있다. 개발자는 T-SQL(Transact-SQL) 언어를 사용하여 SQL Server 데이터베이스와 상호 작용하고 해당 데이터를 관리하거나 쿼리해야한다.

 

장점

  • 다양한 버전: 비즈니스 요구에 맞게 다양한 기능을 사용할 수 있는 다섯 가지 버전의 서버가 있다. Standard 버전은 기본적인 데이터 관리를 제공하는 반면 Express 버전을 사용하면 소규모 데이터 기반 애플리케이션을 구축할 수 있는등 특색이 있다.
  • 훌륭한 지원: Microsoft Premier 지원을 통해 모든 문제를 해결하는 데 도움을 줄 수 있는 전문가 팀이 있다.

단점

  • 높은 비용: 가장 비싼 DBMS 솔루션 중 하나이다. Enterprise 버전의 가격은 $13,748이며 2코어 팩으로 판매된다고..(약 1800만원..) 오라클도 몇천만원이랬는데...
  • 복잡한 라이센스:Microsoft SQL Server 라이센스는 이해하기 어려울 수 있는데, 더욱 복잡한 문제는 라이센스가 서로 바뀌는 경향이 있다고 한다. 사실 이부분은 직접 겪어본 부분은 아니다. 

다음에 이상적입니다.

엔터프라이즈 수준의 기능을 찾고 있다면 Microsoft SQL Server는 좋은 옵션

 

 

 

4. 포스트그레SQL

 

PostgreSQL은 관계형 및 비관계형 데이터 형식을 모두 지원하는 강력한 오픈 소스 DBMS이다. 즉 sql, nosql을 전부 지원한다. Linux를 포함한 대부분의 운영 체제와 호환되며, 온프레미스와 클라우드 기반 서버 모두에서 작동한다. 대규모 커뮤니티를 통해 PostgreSQL은 정기적인 업데이트와 새로운 기능을 계속해서 받고 있다.

 

장점

  • 다양한 데이터 유형 지원: 기본적으로 배열, JSON, XML, H-Store 등과 같은 다양한 데이터 유형을 지원한다.
  • ACID 규격 준수: PostgreSQL은 MySQL보다 뛰어난 ACID 규격 데이터베이스 중 하나로 평가된다.

단점

  • 문서 부족: 대규모 커뮤니티의 지원을 받지만 해당 문서는 다른 데이터베이스 엔진만큼 광범위하지 않다. 문제가 발생시 찾기 어려울 수 도 있다.
  • 낮은 읽기 속도: 데이터베이스 크기에 따라 PostgreSQL을 사용할 때 읽기 전용 작업 시 약간의 속도 저하가 발생할 수 있다.

다음에 이상적입니다.

PostgreSQL은 강력한 분석 기능과 높은 ACID 규정 준수로 인해 OLTP(온라인 트랜잭션 처리)에 탁월한 선택이다.

 

 

 

 

5. 몽고DB

MongoDB는 비정형 데이터를 사용하는 애플리케이션용으로 설계된 오픈 소스 문서 기반 DBMS이다. 즉 noSql을 지원하는데, 놀랍게도 구조화된 데이터에서도 작동할 수 있다(물론 이 목적으로 만들어지진 않음). MongoDB는 데이터베이스 드라이버를 통해 데이터베이스를 애플리케이션과 연결한다.

 

장점

  • 높은 확장성: MongoDB는 수평적 확장 기능이 내장되어 있어 대용량 데이터 저장이 가능한 확장 가능한 DBMS이다.
  • NoSQL 지원: 기본적으로 JSON과 NoSQL 데이터를 모두 지원한다. 유연한 데이터 체계를 이용할 수 있다.

단점

  • 보안 부족: MongoDB의 일부 설정은 안전하지 않다. 예를 들어 사용자 인증은 기본적으로 활성화되어 있지 않고, 일부 보안 기능은 Enterprise 버전에서만 사용할 수 있다.
  • 느린 성능: MongoDB는 처음에는 관계형 데이터용으로 설계되지 않았으므로 이러한 데이터 모델 즉, SQL(RDBMS)로 사용하고자할때는 성능이 저하될 수 있다.

다음에 이상적입니다.

엄격한 구조가 필요하지 않은 애플리케이션을 위한 NoSQL 문서 데이터베이스가 필요한 경우 훌륭한 옵션이다.

 

 

DBMS를 선택할 때는 아래와 같은 다양한 옵션들을 고려하게 되는데, 참고하면 좋을 것 같다.

  • 데이터 유형: 구조화되지 않은 데이터 또는 구조화된 데이터를 저장해야 하는가?
  • 확장성: 얼마나 많은 데이터를 저장해야 하는가?
  • 배포: 데이터베이스를 온프레미스에 배포하는가, 아니면 클라우드에 배포하는가?
  • 통합: 시스템이 애플리케이션과 통합되는가?
  • 보안: 데이터를 보호하기 위해 어떤 조치가 마련되어 있는가?
  • 하드웨어 호환성: DBMS가 설정에서 작동하는가?
  • 기술 지원: 어떤 종류의 지원이 필요한가, 전문적인 기술지원이 필요한가?
  • 비용: 지출할 수 있는 비용은 얼마인가?

 

 

 

ACID 규격의 데이터베이스 

 

ACID 규격을 준수했다는 말이 있길래 이게 어떤 규정인가 하고 찾아봤더니, 관계형 데이터베이스에서 가장 중요시하는 트랜잭션에 관한 4가지의 원칙을 축약한 용어였다. 관계형데이터베이스의 장점중 하나가 바로 트랜잭션이라, 거의 모든 RDBMS가 트랜잭션을 지원한다. 트랜잭션은 단일 작업 단위로 수행되는 하나 이상의 개별 SQL문으로 구성되며, [전부] 아니면 [전부 아님]방식이다. (all-or-nothing)

즉, 모든 SQL문이 유효해야만 실행되고 아니면 실패하기때문에 데이터의 무결성을 보장한다.

 

 

순서대로 원자성, 일관성, 고립성, 지속성을 뜻하는 ACID 원칙이고 간단하게 정리하면 이렇다.

 

Atomic (원자성)

여러개의 작업을 하나의 원자적 단위로 묶어 처리할 수 있는가?

예를 들어 하나의 상품 주문이 있다. 이 이벤트가 발생했을 때 주문, 결제, 포인트적립등의 과정이 발생해야 한다면,  이 세가지가 모두 성공하던가, 아니면 전부 실패를 해야한다. 즉 주문과 결제가 되었어도 포인트 적립과정에서 문제가 발생되었는데 주문이 성공해버리면 사용자는 당황하지 않겠는가? 즉, 하나의 원자적 단위가 전부 성공한게 아니라면, 주문 실패로 처리하고 다시 주문과정을 시작하도록 해야한다. 트랜잭션 처리에서 많이 들어본 커밋(commit)과 롤백(rollback) 이라고 생각하면 쉬울 듯 하다.

 

Consistent (일관성)

트랜잭션이 수행되기 전과 수행된 후, 항상 일관된 데이터구조와 제약조건이어야한다.

예를 들어 마이너스가 되면 안되는 계좌 잔액 제약조건이 있는데, 트랜잭션 실행 후 금액이 0보다 작아지게 된다면 일관성이 맞지 않기때문에 트랜잭션이 중단된다.

 

Isolated (고립성)

트랜잭션끼리 서로 간섭할 수 없고, 독립된 상태이다. 즉 트랜잭션이 동시에 실행된다 해도 서로간에 영향을 줄 수 없다. 즉, 하나의 트랜잭션이 수행중이라면 완료되기 전까지 이 결과를 다른 트랜잭션에서는 참조 할 수 없다.

 

Durable (지속성)

트랜잭션이 성공한다면, 데이터베이스에 영구적으로 반영되어야 한다. 한번 커밋되었다면, 무조건 반영되는 것이다.

 

 

 

 

참고한 사이트

https://www.fivetran.com/blog/what-is-a-database

https://www.digitalocean.com/community/tutorials/understanding-relational-databases

 

What is a database? Definition, types and examples | Blog | Fivetran

Databases are important for every organization. Learn more about what databases are and the different types available.

www.fivetran.com


- 궁금한 점 / 수정 요청사항 등은 언제든 댓글 달아주세요 :)

- 도움이 되셨다면 ❤️ 하트 한 번 눌러주세요! 감사합니다 ! 

'BACK-END > SQL, DB' 카테고리의 다른 글

JDBC - ORACLE #2  (0) 2020.10.16
PL/SQL - 내장함수  (0) 2020.09.24
JOIN  (0) 2020.09.21
SQL, SELECT문, 쿼리순서 및 자료형  (0) 2020.09.18

댓글