DataBase

정보 vs 데이터

데이터: 원시 사실 또는 관찰 결과물

정보: 데이터를 가공하고 해석하여 의미를 부여

데이터베이스

데이터 베이스 개요

데이터베이스 정의

  • 조직체의 응용 시스템들이 공유하고 사용하는 운영 데이터들이 구조적으로 통합된 것

  • 데이터베이스의 구조는 사용되는 데이터 모델에 의해 결정

데이터베이스 특징

  • 대규모 데이터 저장

  • 여러 사용자에 의해 동시 사용

  • 중복 최소화

  • 데이터에 대한 설명을 설명 -> 데이터베이스 스키마 / 메타데이터

  • 프로그램과 데이터 간 독립성 제공

  • 효율적으로 접근하고 질의

DBMS란

  • 데이터베이스를 정의하고, 질의어를 지원하고, 리포트를 생성하는 등의 작업을 수행하는 소프트웨어

DBMS 개요

데이터베이스 스키마

  • 데이터베이스 구조를 정의하고 설명

  • 데이터베이스의 모든 가능한 상태를 미리 정의

데이터베이스 상태

  • 특정 시점의 데이터베이스 내용

  • 시간이 지남에 따라 바뀜

  • 데이터베이스 수정에 따라 바뀜

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

  • DB부터 DBMS, 사용자 및 관련 프로세스를 포함하는 전체 시스템

데이터베이스

  • 조직체의 응용 시스템들이 공유하고 사용하는 운영 데이터들이 구조적으로 통합된 모임

  • 시스템 카탈로그와 저장된 데이터베이스로 구성

  • 시스템 카탈로그: 데이터베이스에 저장된 도든 개체에 대한 정의나 명세를 수록

DBMS

  • 사용자가 새로운 데이터베이스를 생성

  • 데이터베이스의 구조를 명시

  • 사용자가 데이터를 효율적으로 질의하고 수정할 수 있도록 함

  • 시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호

  • 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어

DBMS 요구사항

  • 데이터 독립성

  • 효율적인 데이터 접근

  • 데이터에 대한 동시 접근

  • 백업과 회복

  • 중복을 줄이거나 제어하며 일관성 유지

  • 데이터 무결성

  • 데이터 보완

  • 쉬운 질의어

  • 다양한 사용자 인터페이스

하드웨어

  • 보조기억장치에 데이터를 저장하고 연산을 위해 CPU를 사용.

  • 주기억장치에 적재되어 실행

파일 시스템 vs DBMS

파일 시스템

  • 파일시스템은 1960년대에 DBMS보다 먼저 등장

  • 데이터에 대한 응용 프로그램의 의존도가 높음

파일 시스템 단점

  • 데이터의 잦은 중복

  • 다수의 사용자들을 위한 동시성 제어가 제공되지 않음

  • 검색하려는 데이터를 쉽게 명시하려는 질의어가 제공되지 않음.

  • 보안 조치가 미흡

  • 회복 기능이 없음.

  • 프로그램-데이터 독립성이 없어 높은 유지보수 비용

  • 파일을 검색하거나 갱신하는 절차가 상대적으로 복잡하기 때문에 프로그래머의 생산성이 낮음.

DBMS 장점

  • 스키마 정의를 통한 중복, 불일치 감소 / 표준화 / 조직체의 요구사항 식별

  • 관리도구를 통한 유지보수 비용 감소 / 보안성 / 무결성 / 회복기능 / 공유와 동시 접근 가능

DBMS 단점

  • 추가적인 하드웨어 비용, DBMS 비용

  • 관리도구 사용법 교육 비용

  • 비밀, 프라이버시 노출 우려

DBMS 도입이 적절하지 않은 경우

  • 초기 투자 비용이 너무 클 때

  • 오버헤드가 너무 클 때

  • 응용이 단순하고 잘 정의되어있고 잘 변경되지 않을 것 같을 때

  • 엄격한 실시간 처리 요구사항이 있을 때

  • 데이터에 대한 다수 사용자의 접근이 필요 없을 때

DBMS 구조의 종류

계층 DBMS 구조

  • 1960년대에 등장한 최초의 계층 DBMS 등장

  • 트리 구조 기반

  • 특정 유형의 응용에 대해서는 빠른 속도와 높은 효율성을 제공

  • 단점

    • 어떻게 데이터에 접근하는 가를 미리 응용 프로그램에서 정의 필요

    • 데이터베이스가 생성될 때 각각의 관계를 정의 필요

    • 레코드들이 링크로 연결되어 구조를 변경하기 어려움

네트워크 DBMS 구조

  • 레코드들을 노드로, 레코드들 관계를 간선으로 표현하는 그래프 기반 모델

  • 링크로 연결되어 레코드 구조를 변경하기 어려움

관계 DBMS

  • 모델이 간단하여 이해하기 쉬움

  • 사용자는 원하는 것만 명시하고 나머지는 DBMS가 결정

객체 지향 DBMS

  • 객체지향 프로그래밍 패러다임 기반 모델

  • 데이터와 프로그램을 그룹화

  • 복잡한 객체를 이해하기 쉬움

  • 유지와 변경 용이

객체 관계 DBMS

  • DBMS에 객체 지향 개념을 통합

DBMS 언어

DDL(데이터 정의어)

  • Data Definition Language

  • 데이터베이스 스키마를 정의

  • 데이터 구조 생성(CREATE) / 변경(ALTER) / 삭제(DROP) / 인덱스 생성(CREATE INDEX)

  • 정의어 입력 시 DBMS는 스키마에 대한 명세를 시스템 카탈로그에 저장

DML(데이터 조작어)

  • 데이터 검색(SELECT) / 수정(UPDATE) / 삽입(INSERT) / 삭제(DELETE)

DCL(데이터 제어어)

  • 사용자 권한 부여 (GRANT) / 권한 취소 (REVOKE)

DBMS 사용자

  • 응용 프로그래머

    • 데이터 베이스에서 특정 응용이나 인터페이스를 구현

    • 프로그래밍 언어로 응용 프로그램을 개발하면서, 데이터 조작어를 사용해 데이터베이스 접근

    • 이들이 만든 기작성 프랜잭션을 사용하여 사용자들은 쿼리하고 업데이트

  • 데이터베이스 관리자

    • 조직의 여러 부분의 상이한 요구를 만족시키기 위해서 일관성 있는 데이터베이스 스키마를 생성하고 유지

    • 실제 DB 변경이 필요할때 DBA에게 요청하여 처리

    • 데이터 베이스 스키마를 생성하고 변경

    • 무결성 제약조건을 명시

    • 사용자의 권한을 허용하거나 취소하고, 사용자의 역할을 관리

    • 저장 구조와 접근 방법(물리적 스키마) 정의

    • 백업과 회복

    • 표준화 시행

  • 오퍼레이터

    • DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리

  • 최종 사용자

    • 질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용

관계형 데이터베이스(SQL)

  • 릴레이션에 대해서 모든 레코드가 같은 구조를 가짐

  • 선언적 질의어를 통해 데이터 접근

  • 레코드의 순서와 무관하게 응용 프로그램 작성

  • 사용자는 원하는 것만 명시 -> 어떻게 데이터를 찾을지는 명시하지 않음

  • 가장 개념이 단순한 데이터 모델

  • 테이블 구조를 사용

  • 중첩과 같은 복잡한 구조가 없음

  • 집합 위주의 데이터 처리

  • 숙련되지 않은 사용자도 쉽게 이해할 수 있음

  • 표준 데이터베이스 응용에서 좋은 성능

용어

  • Relation: 2차원 테이블 = SQL의 Table

  • Tuple: 릴레이션의 각 행 = Record, Row

  • Attribute: 릴레이션의 이름을 가진 각 열 = Column

도메인(Domain)

  • 한 속성에 나타낼 수 있는 값들의 집합

  • 각 속성의 도메인의 값은 원자값

  • 데이터 타입과 유사

  • 동일한 도메인이 여러 속성에서 사용될 수 있음

  • 복잡 속성, 다치 애트리뷰트 불가

Degree / Cadinality

  • Degree: 한 릴레이션의 속성들의 수(Column 수)

    • 자주 변경되지 않음

  • Cardinality: 릴레이션의 튜플 수(Row 수)

    • 시간에 따라 계속 변함

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

  • Not Only SQL

  • key-value 형식

  • 스키마 정의 관점에서 관계형 데이터베이스보다 유연한 데이터 구조

  • 데이터 저장과 검색에 특화

  • 분산 환경의 데이터 처리 특화

  • 대용량 데이터 처리 효율적

  • SQL에 비해 읽기, 쓰기 성능이 좋음

  • PK, FK 등을 정의하지 않음

  • 수평적 확장

  • 복잡한 데이터 구조 표현 가능

  • 문서의 크기가 너무 크면 성능 저하 발생

Document DB

  • 문서처럼 데이터를 저장

  • 일반적으로 JSON과 유사한 형식으로 데이터를 저장

  • 컬렉션의 하위에 문서가 존재하는 방식

  • MongoDB

Key-Value 타입 DB

  • Key-Value 쌍의 데이터를 배열 형태로 저장

  • Redis, Dynamo

Wide-Column Store DB

  • 데이터베이스 열에 대한 데이터를 집중 관리

  • 각 열에는 key-value 형식으로 데이터 저장

  • Column Families라는 열의 집합체 단위로 데이터 처리

  • 하나의 행에 많은 열을 포함할 수 있어 유연성이 좋음

  • 규모가 큰 데이터 분석에 주로 사용

  • Cassandra, HBase

Graph DB

  • 자료구조의 그래프와 비슷한 형식

  • nodes에 entities별로 데이터를 저장

  • 각 node 간의 관계는 edge로 표현

  • Neo4J, InfiniteGraph

SQL NoSQL 선택

SQL이 적합한 경우

  • DB의 ACID 성질을 준수하는 경우

  • 데이터베이스의 상호작용 방식을 명확히 규정하여 예외를 줄이고 무결성을 보호할 때

  • 일반적으로 금융 서비스는 ACID를 준수

NoSQL이 적합한 경우

  • 정형화되지 않은 데이터 구조가 필요할 때

  • 클라우드 기반 또는 확장성 중시

  • 데이터 구조를 자주 변경해야 하는 경우

DBMS

DBMS 용어

Relation

  • SQL에서정보를 구분하여 저장하는 단위, 테이블

Tuple

  • 테이블의 행, Record, Row

  • 릴레이션 내에서 중복되는 값을 가질 수 없음

  • 튜플의 수 -> Cardinality(기수)

Attribute

  • 테이블의 열, Column

  • 어트리뷰트의 수 -> Degree(차수)

Key

  • 테이블에서 행의 식별자로 이용되는 테이블의 열

  • Identifier

    • 여러개의 집합을 가진 하나의 테이블에서 각각을 구분할 수 있는 논리적인 이름

  • PK(Primary Key): 현재테이블에서 행을 식별하는 식별자

  • FK(Foreign Key): 현재 테이블과 연관 있는 외부 테이블의 행을 식별

DBMS 요구사항

  • DB를 효율적이고 안전하게 사용

  • 성능 관리: 데이터 분산, 캐시, 인텍싱

  • 동시성: 트랜잭션, Lock, MVCC

  • 보안: 접근 제어

  • 무결성: 정규화, Sequence, FK

  • 일관성: 중복 제어

  • 장애 대응: 데이터 백업, 복구

  • 서로 다른 데이터 간의 관계를 표현하는 관계 표현

  • 편리한 인터페이스 제공

트랜잭션

  • 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하는 작업 단위

  • DBMS에서 병행 제어와 회복 작업 시 처리되는 작업 논리적 단위로 사용

ACID 특성

  • 원자성(Atomicity): 트랜잭션의 연산은 모두 반영되거나 전혀 반영되지 않아야 한다

  • 일관성(Consistency): 트랜잭션이 성공적으로 완료되면 일관성 있게 상태가 바뀌어야 한다

  • 독립성(Isolation): 둘 이상의 트랜잭션이 동시에 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.

  • 영속성, 지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장이 나더라도 영구적으로 반영되어야 한다.

데이터 관리의 원칙

  • 안전하게 / 접근이 용이하게 / 다수가 공유 가능하게 / 최소한의 비용으로 / 일관성을 가지고 / 손상되지 않게

Last updated