[CS] DB 구조와 유형

말랑이·2025년 2월 20일

CS

목록 보기
9/10

0. 컴퓨터와 데이터베이스

1️⃣ 컴퓨터의 구성

  • 보조기억장치는 영구저장소로써 파일뿐만 아니라 데이터도 저장할 수 있음
  • 파일은 파일시스템에, 데이터는 데이터베이스에 저장됨

2️⃣ 데이터베이스의 이해

구분내용예시
파일시스템- 개별적인 파일들을 보관하고 정리하는데 사용되는 큰 창고와 같음
- 파일들은 여러 폴더에 저장되고, 사용자는 파일을 직접 관리해야 함
- 파일시스템으로 저장된 '카카오톡 실행파일'을 보조기억장치에서 로딩
데이터베이스- 파일시스템과 달리 데이터를 구조화하고 연결시키는 기능을 제공함
- 테이블, 레코드, 필드 등의 개념을 사용해 데이터를 구성하고 효율적으로 관리/검색함
- 데이터의 일관성/무결성/안전성을 유지하며 복잡한 데이터 조작 작업을 간편하게 수행할 수 있음
- 카카오톡 프로그램에서 출력하는 메시지 목록과 같은 정보

1. 데이터베이스

💡 정보 : 여러 종류의 문서로 흩어져있어 조합하기 어려운 단위
💡 데이터 : 정보를 체계적으로 분류하여 조합할 수 있는 단위

  • 데이터의 대규모 저장소로써, 여러 사용자에 의해 동시에 사용됨
  • 모든 데이터가 중복을 최소화하면서 통합됨
  • 운영데이터 뿐 아니라 그 데이터에 대한 설명까지 포함됨
    • 데이터베이스 스키마, 메타데이터 등
  • 프로그램과 데이터 간의 독립성이 제공됨
    • 프로그램 메모리가 아닌 개별적인 저장공간에 저장되기 때문에
  • 효율적으로 접근이 가능하고 질의를 할 수 있음

1️⃣ DB 시스템 개요

📌 데이터베이스 스키마

  • 전체적인 데이터베이스 구조를 뜻하며 자주 변경되지 않음
  • 데이터베이스의 모든 상태를 미리 정의함
  • ex) EMPLOYEE 데이터는 EMPNO, EMPNAME, TITLE, DNO, SALARY 필드를 가진다

📌 데이터베이스 상태

  • 특정시점의 데이터베이스의 내용을 의미함 → 시간이 지남에 따라 계속해서 바뀜
  • 데이터베이스에 update가 있을 때 마다 변경됨

📌 데이터베이스 시스템 (DBS)

  • DB, DBMS, USER를 포함한 가장 큰 범위

📌 데이터베이스

  • 조직체의 응용시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임
  • 시스템 카탈로그(= 데이터 사전 data dictionary)와 저장된 데이터베이스로 구분됨
  • 시스템 카탈로그는 저장된 데이터베이스의 스키마 정보를 유지함

📌 DBMS

  • 데이터베이스 언어라고 부르는 특별한 프로그래밍 언어를 한 개 이상 제공함 (👉🏻 SQL이 사실상 표준)
  • DBMS 기능
    • 사용자가 새로운 데이터베이스 create
    • 데이터베이스의 구조를 명시
    • 사용자가 데이터를 효율적으로 질의하고 update 할 수 있도록 함
    • 시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호함
    • 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어함

📌 하드웨어

  • 데이터베이스는 디스크와 같은 보조기억장치에 저장되며, DBMS에서 원하는 정보를 찾기 위해서는 디스크의 블록들을 주기억장치로 불러와야함
  • 계산이나 조합, 비교연산들을 수행하기위해 CPU가 사용됨
  • DBMS 자체도 주기억장치에 적재되어 실행되어야 함

📌 데이터베이스 시스템의 요구사항

  • 데이터 독립성
  • 효율적인 데이터 접근
  • 데이터에 대한 동시 접근
  • 백업과 회복
  • 중복을 줄이거나 제어하며 일관성 유지
  • 데이터 무결성
  • 데이터 보완
  • 사용자 인터페이스 및 쉬운 질의어

2️⃣ 파일시스템 🆚 DBMS

파일시스템을 사용한 기존의 데이터 관리

  • DBMS가 등장하지 않았을 때인 1960년대부터 사용됨
  • 파일에 접근하는 방식이 응용프로그램 내에 상세하게 표현(구현)됨
    ➡️ 데이터에 대한 응용프로그램의 의존도가 높음!
⚠️ 파일시스템의 단점
  - 다수의 사용자들을 위한 동시성제어가 제공되지 않음
  - 검색하려는 데이터를 쉽게 명시하는 질의어가 제공되지 않음
  - 보안조치 및 회복기능이 없고 미흡함
  - 프로그램 ↔︎ 데이터 간의 독립성이 없어 유지보수 비용이 많이 소모됨
  - 파일 검색 및 갱신 절차가 복잡하여 프로그래머의 생산성이 낮음

DBMS를 사용한 데이터베이스 관리

  • 스키마 정의를 통해
    • 중복성 및 불일치가 감소됨
    • 표준화를 시행하기 용이함
    • 조직체의 요구사항을 식별할 수 있음
  • 관리도구를 통해
    • 시스템을 개발하고 유지하는 비용이 감소됨
    • 보안 및 무결성 향상
    • 데이터 회복성 보장
    • 데이터베이스 공유와 동시접근이 가능함
⚠️ DBMS의 단점
  - 추가적인 하드웨어 구입비용이 들고, DBMS 자체의 구입비용도 상당히 비쌈
  - 직원들의 관리도구 사용법 및 교육 비용이 소요됨
  - 비밀과 프라이버시 노출 등의 단점이 존재할 수 있음

3️⃣ DBMS 발전과정

📌 계층 DBMS 구조

구분내용
특징- 1960년대 후반에 최초의 계층 DBMS가 등장
- 트리구조를 기반으로 하는 계층 데이터 모델을 사용한 DBMS
- 네트워크 데이터 모델의 특별한 사례
장점- 어떤 유형의 응용에 대해서는 빠른 속도와 높은 효율성을 제공
단점- 어떻게 데이터에 접근하는 가를 미리 응용프로그램에 정의해야 함
- 데이터베이스가 생성될 때 각각의 관계를 명시적으로 정의해야 함
- 레코드들이 링크로 연결되어 있으므로 레코드 구조를 변경하기 어려움

📌 네트워크 DBMS 구조

구분내용
특징- 레코드들이 노드로, 레코드들 사이의 관계가 간선으로 표현되는 그래프를 기반으로 하는 네트워크 데이터 모델을 사용
- 네트워크 DBMS도 레코드들이 링크로 연결되어 있기 때문에 레코드 구조를 변경하기는 어려움

📌 관계형 DBMS

구분내용
장점- 현재 가장 대중화 + 상용화
- 모델이 간단해 이해하기 쉬움
- 사용자는 자신이 원하는 것(what)만 명시하고, 데이터가 어디에있는지, 어떻게 접근해야하는지는 DBMS가 결정
예시- MS SQL Server, Oracle, MySQL

📌 객체지향 DBMS

구분내용
특징- 객체지향 프로그래밍 패러다임을 기반으로 하는 데이터 모델
장점- 데이터와 프로그램을 그룹화하고, 복잡한 객체들을 이해하기 쉬우며, 유지와 변경이 용이함
예시- OpenODB, GemStone, O2 등

📌 객체관계 DBMS

구분내용
특징- DBMS에 객체지향 개념을 통합한 객체 관계 데이터 모델
예시- Oracle, Universal Server 등

4️⃣ DBMS 언어

📌 데이터 정의어 (DDL : Data Definition Language)

  • 사용자는 데이터 정의어를 사용해 데이터베이스 스키마를 정의함
  • DBMS는 DDL에 따라 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그에 저장
💡 데이터 정의어의 기본 기능
	CREATE TABLE (데이터 구조 생성)
    ALTER TABLE (데이터 구조 변경)
    DROP TABLE (데이터 구조 삭제)
    CREATE INDEX (데이터 접근을 위한 특정 애트리뷰트에 인덱스 정의)

📌 데이터 조작어 (DML : Data Manipulation Language)

  • 사용자는 DML을 통해 데이터베이스 내 원하는 데이터를 검색/수정/삽입/삭제 함
  • 절차적언어와 비절차적언어
    • SQL은 대표적인 비절차적 언어
  • SUM, COUNT, ROUND, AVG와 같은 내장함수를 갖고 있음
💡 데이터 조작어의 기본 기능
	SELECT (검색)
    INSERT (삽입)
    UPDATE (수정)
    DELETE (삭제)

📌 데이터 제어어 (DCL : Data Control Language)

  • 사용자는 데이터 제어어를 사용해 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소함

5️⃣ DBMS 사용자

사용자 구분역할
응용프로그래머- 데이터베이스 위에서 특정응용(고객/인사/재고 관리 등)이나 인터페이스를 구현하는 사람
- 프로그래밍 언어로 응용프로그램을 개발하면서 데이터베이스를 접근하는 부분은 내포된 데이터 조작어를 사용함
- 이들이 작성한 프로그램은 최종사용자들이 반복해서 수행하므로, 기작성 트랜잭션(canned transaction) 또는 프로그램이라고 부름
데이터베이스 관리자(DBA)- 조직의 여러 부분의 상이한 요구를 만족시키기 위해 일관성 있는 데이터베이스 스키마를 생성하고 유지하는 사람
- 리얼 DB 변경 요청을 받아 반영
오퍼레이터(인프라팀)- DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람
최종사용자(유저)- 질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용하는 사람
- 데이터베이스 질의어를 사용해 매번 다른 정보를 찾는 캐쥬얼 사용자와 기작성 트랜잭션을 주로 반복해서 수행하는 초보 사용자로 구분됨

2. 데이터베이스 유형

1️⃣ 관계형 데이터베이스 (SQL)

  • 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성
  • 선언적인 질의어를 통한 데이터 접근을 제공
  • 응용프로그램은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성됨
  • 사용자는 원하는 데이터(what)만 명시 → 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요 없음
  • 집합 위주로 데이터를 처리

용어정리

구분의미
릴레이션(relation)2차원의 테이블 👉🏻 EMPLOYEE TABLE
레코드(record)릴레이션의 각 행
튜플(tuple)레코드를 공식적으로 부르는 용어 👉🏻 ROW
속성(attribute)릴레이션에서 이름을 가진 하나의 열 👉🏻 COLUMN
💡 파일시스템에는 레코드만 가진 파일형태로 존재하지만, RDBMS에는 속성, 튜플을 가진 테이블형태로 존재함

도메인(Domain)


  • 한 속성에 나타날 수 있는 값들의 집합
  • 각 속성의 도메인의 값들은 원자값
  • 프로그래밍 언어의 데이터 타입과 유사
  • 동일한 도메인이 여러 속성에서 사용될 수 있음
  • 복잡속성이나 다치 애트리뷰트는 허용 X

차수(degree)와 카디날리티(cardinality)

구분의미
차수- 한 릴레이션에 들어있는 속성들의 수 (필드 수 = 컬럼 개수)
- 유효한 릴레이션의 최소 차수는 1
- 변경 빈도수가 낮음
카디날리티- 릴레이션의 튜플(row) 수
- 유효한 릴레이션은 카디날리티 0을 가질 수 있음
- 릴레이션의 카디날리티는 시간이 지남에 따라 계속 변함

2️⃣ 비관계형 데이터베이스 (NoSQL)

기존 관계형 데이터베이스의 한계를 뛰어넘기 위해 만들어진 새로운 형태의 DB
데이터의 저장 및 검색에 특화된 메커니즘을 제공함
분산환경에서의 데이터처리를 더욱 빠르게하기 위해 개발됨

특징

  • 거대한 Map으로써, Key-Value 형식을 지원함
  • 관계형 DB와 달리, PK FK Join 등 관계를 정의하지 않음
  • 스키마에 대한 정의가 없음

종류

📌 문서형(Document) 데이터베이스
	- 데이터를 테이블이 아닌 문서처럼 저장
    - 많은 문서형 데이터베이스는 JSON과 유사한 형식의 데이터를 문서화하여 저장함
    - 각각의 문서는 하나의 속성에 대한 데이터를 가짐
    - 컬렉션이라고 하는 그룹으로 묶어서 관리함
    - MongoDB
📌 Key-Value 타입
	- 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열의 형태로 저장함
    - Key는 속성 이름을, Value는 속성에 연결된 데이터 값을 의미함
    - Redis, Dynamo
📌 Wide-Column Store 데이터베이스
	- Column에 대한 데이터를 집중적으로 관리함
    - 각 열에는 Key-Value 형식으로 데이터가 저장되고, 컬럼 패밀리라고 하는 열의 집합체 단위로 데이터를 처리함
    - 하나의 행에 다수의 열을 포함할 수 있어 유연성이 높음
    - 데이터처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터분석쪽에 주로 사용
    - Cassandra, HBase
📌 그래프(Graph) 데이터베이스
	- 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성
    - 노드에 속성별로 데이터를 저장함
    - 각 노드간 관계는 선으로 표현

장점

  • 대용량 데이터 처리에 효율적
  • 읽기작업보다 쓰기작업이 빠름 (RDBMS에 비해서는 읽기쓰기 모두 빠름)
  • 데이터 모델링이 유연함
  • 뛰어난 확장성으로 검색에 유리
  • 최적화된 키 값 저장기법으로 응답속도나 처리효율등에서 성능이 뛰어남

단점

  • 쿼리 처리 시, 데이터를 파싱 후 연산을 해야해서 큰 크기의 Document를 다룰 땐 성능이 저하됨

3️⃣ SQL 🆚 NoSQL

SQL 사용이 적합한 경우

  • ACID 성질을 준수해야 하는 경우
    Atomicity(원자성) + Consistency(일관성) + Isolation(격리성) + Durability(지속성)
    하나의 트랜젝션에 의한 상태 변화를 수행하는 과정에서, 안정성을 보장하기 위해 필요한 성질들.
    SQL을 사용하면 데이터베이스와 상호작용하는 방식을 명확히 규정할 수 있으므로, 예외적인 상황을 줄이고 데이터베이스의 무결성을 보호할 수 있음.
    전자상거래를 비롯한 모든 금융 소프트웨어 개발에서는 ACID 성질을 준수함.

  • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
    프로젝트의 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우, 관계형 데이터베이스를 사용하는 경우가 많음.
    다양한 데이터 유형과 높은 트래픽을 지원하도록 설계된 NoSQL을 사용해야만 하는 이유가 없음.

NoSQL 사용이 적합한 경우

  • 데이터의 구조가 거의 없는 대용량의 데이터를 저장하는 경우
    필요에 따라 언제든지 데이터의 새 유형을 추가할 수 있기 때문.
    소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우.

  • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
    클라우드 기반으로 저장소를 구축하면 저렴한 비용의 솔루션을 제공받을 수 있음.
    DB 확장성이 중요하다면 별다른 번거로움 없이 확장가능한 NoSQL이 좋음.

  • 빠르게 서비스를 구축하는 과정에서 데이터구조를 자주 업데이트하는 경우
    스키마를 미리 준비할 필요가 없기때문에 시장에 빠르게 프로토타입을 출시해야하는 경우에 매우 유리함.
    소프트웨어 버전별로 많은 다운타임 없이 데이터 구조를 자주 업데이트 해야하는 경우.


출처

profile
🐰 I'm Sunyeon-Jeong, mallang

0개의 댓글