본문으로 건너뛰기

기술사 - 데이터베이스

· 약 8분

DB 개요​

데이터/정보/지식/지혜​

Data, Informatino, Knowledge, and Wisdom

  • 지혜: 지식과 경험이 축적된 상태/능력
  • 지식: 의사결정에 이용된 정보, 부가가치 창출, 정보의 추상화, 일반화
  • 정보: 관계에 따라 의미가 부여된 데이터, 구조화된 데이터의 집합
  • 데이터: 그 자체로는 의미가 없음, 식별 및 기록이 가능한 단순한 사실

데이터 --관계의 이해--> 정보 --패턴의 이해--> 지식 --원리의 이해--> 지혜

DB/DB system​

한 조직의 여러 응용시스템이 공유하기 위해 최소의 중복으로 통합, 저장된 운영 데이터의 집합 통저운공

  • 통합 데이터: Integrated Data, 최소 중복, 통제된 중복
  • 저장 데이터: Stored Data, 컴퓨터가 접근 가능한 매체에 저장
  • 운영 데이터: Operational data, 조직의 운영에 꼭 필요한 필수적인 데이터
  • 공유 데이터: Shared Data, 여러 응용 프로그램이 공동으로 접근
  • 실시간 접근, 계속적인 변화, 동시 공유, 내용에 의한 참조

기본 구조​

  • 외부 단계: Exteranl Level, 외부스키마
  • 개념 단계: Coceptual Level, 개념스키마
  • 내부 단계: Internal Level, 내부스키마
  • 데이터베이스

데이터 독립성​

상위 단계의 스키마 정의에 영향을 주지 않으면서 어떤 단계의 스키마를 변경할 수 있는 것

  • 논리적 독립성: 외부 스키마나 응용 프로그램을 변경하지 않으면서 개념 스키마를 변경할 수 있는 성질
  • 물리적 독립성: 개념 스키마를 변경하지 않으면서 내부 스키마를 변경할 수 있는 성질

DBMS​

다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 관리 소프트웨어 도구들의 집합

  • 데이터 저장과 개발 및 유지보수 측면에서 중복성의 통제
  • 사용자 간 데이터 공유
  • 권한 관리
  • 다양한 사용자에게 다양한 형태의 인터페이스 제공
  • 데이터 사양에 존재하는 복잡한 관련성 표현
  • 무결성 보장
  • 백업 복구 기능 제공

DB 언어​

  • DML: Data Manipulation Language,
    • SELECT, INSERT, UPDATE, DELETE
  • DDL: Data Definition Language
    • CREATE, ALTER, DROP
  • DCL: Data Control Language
    • GRANT, REVOKE

품질관리 R&R​

DB 설계​

키​

릴레이션 튜플을 유일하게 식별할 수 있는 속성들의 집합

  • 유일성
  • 최소성
  • 결정자 도출 --유일성 검증--> 슈퍼키선정 --최소성 확인--> 후보키 선정 --엔티티 대표성--> 기본키 결정

데이터 무결성​

  • 개체 무결성: 기본키, 모든 개체는 식별자를 정의하고 식별자 값은 NonNull 및 유일해야함
  • 참조 무결성: 외래키, 외래키 값은 기본키로 사용된 릴레이션의 기본키 값이거나 Null
  • 속성 무결성: 컬럼, 지정된 데이터 형식 만족, CHAR, DATE
  • 사용자 정의: 데이터, 사용자가 Buniness Rule(업무규칙)에 따라 정의, CHECK, DEFAULT, 트리거 등

데이터 모델링​

개논물

  • 개념적 설계
  • 논리적 설계
  • 스키마 정제
  • 물리적 설계
  • 응용 및 보안 설계

이상현상​

릴레이션 데이터의 중복관리로 인해 데이터를 조작할 때 발생하는 사이드이펙트

  • 삽입이상: 릴레이션 내에 하나의 튜플을 삽입하려고 할 때 불필요한 데이터까지 삽입해야하는 현상
  • 삭제이상: 릴레이션 내에 하나의 튜플을 삭제하려고 할 때 유지되어야할 정보까지 삭제되는 연쇄 삭제 현상
  • 갱신이상: 중복된 튜플 중에서 일부 튜플의 속성을 변경시키려고 할 때 정보의 모순성이 발생하는 현상
  • 원인 및 해결방안: 속성들 간의 종속성 분석을 통해 기본적으로 하나의 종속성이 하나의 릴레이션으로 표현되도록 무손실 분해 (Decomposition)

정규화​

이상현상을 야기하는 속성 간의 종속성을 제거하기 위해 릴레이션을 작은 여러 릴레이션으로 무손실 분해하는 과정 데이터 일관성, 중복의 최소화, 구조의 안정성을 최대한 확보하기 위한 방법

각 단계가 끝나면 N차 정규형이 된다.

  • 1차 정규화: 도메인 분해
  • 2차 정규화: 부분함수 종속성 제거
  • 3차 정규화: 이행함수 종속성 제거
  • BCNF 정규화: 나중에 추가됨
  • 4차 정규화: 다치종속성 제거
  • 5차 정규화: 조인종속성 제거

연결함정​

데이터 모델링 시 개체와 개체 사이에 부여하는 관계성 집합의 의미가 모호하여 원하는 결과를 얻을 수 없거나 향후 업무처리에 영향을 미치게 되는 ER모델의 문제점

  • 부채꼴 함정: Fan Trap, 개체집합(Entity Set) 사이에 관계성 집합(Relation Set)이 정의되어 있기는하지만 관계성 예시가 모호한 경우
  • 균열 함정: Chasm Trap, 개체집합 사이에 관계성 집합이 정의되어 있기는 하지만 일부 개체집합과 개체집합 사이에 관계성이 존재하지 않는 경우

반정규화​

정규화된 엔티티 타입, 속성, 관계를 시스템의 성능향상, 개발과 운영의 편의를 위해 데이터 모델을 통합하는 프로세스

DB 운영​

트랜잭션​

데이터의 정확한 일관성과 무결성을 보장하기 위해 완전히 종료해야하는 데이터베이스 처리의 논리적 작업 단위(Logical Unit of Work)

  • 원자성: Atomicity, 분해가 불가능한 수행 단위로 완전히 수행 또는 수행되지 않음
  • 일관성: Consistency, 트랜잭션이 성공적으로 완료되면 언제나 모순이 없는 상태 유지, 무결성 제약 조건
  • 고립성: Isolation, 트랜잭션 실행 중 중간 연산 결과는 다른 트랜잭션 접근 불가
  • 영속성: Durability, 성공적으로 완료된 트래잭션은 어떤 고장에도 손실 되어서는 안됨

트랜잭션 상태 전이​

  • 실행 상태: Active
  • 부분 완료: Partially Committed
  • 완료 상태: Committed
  • 실패 상태: Failed
  • 철회 상태: Aborted

동시성 제어​

다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능

  • 트랜잭션 스케쥴: 각 트랜잭션을 구성하는 연산들이 시스템에서 시간에 따라 실행되는 순서
  • 직렬가능성: Serializability, 트랜잭션들을 병행처리한 결과가 트랜잭션들을 순차적으로 처리한 결과와 같은 것
  • 갱신분실 문제: Lost update problem
    • 트랜잭션이 동일 데이터를 동시에 갱신할 경우 발생하는 문제
    • 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션이 종료하기 전에 이후 트랜잭션이 갱신 값을 덮어 쓰는 경우 오류 발생
  • 불일치 문제: Inconsistency analysis problem
    • 다중 사용자 트랜잭션들이 동시에 실행될 때 DB가 일관성 없는 모순된 상태로 남는 문제
  • 연쇄복귀 문제: Cascading rollback problem
    • 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능

동시성 제어 기법​

  • Locking
    • 트랜잭션이 사용하는 자원에 대해 상호배제(Mutual Exclusive) 기능을 제공하는 기법
    • 상호배제는 특정 트랜잭션이 데이터 항목에 대해 락을 설정하면 잠금을 설정한 트랜잭션이 언락될 때까지 데이터를 독점적으로 사용
  • Time-stamp Ordering
    • 트랜잭션이 시스템에 입력될 때 타임스탬프 부여, 트랝개션의 수행 순서를 제어
    • 타임스탬프 값이 나중인 트랜잭션이 타임스탬프 값이 우선인 트랜잭션에 접근하고 있는 데이터 항목에 대한 접근을 요청하는 경우 롤백 당함
    • 직렬성 보장
    • 데드락 방지
  • 낙관적 기법
    • 트랜잭션이 수행되는 동안 어떠한 검사도 실행하지 않음
    • 트랜잭션 수행 마지막에 갱신 사항들이 직렬가능성을 위반하는 경우가 있는지만 검사하여 이상이 없을 경우 트랜잭션을 확정
  • 낙관적 기법 단계
    • Read Phase: DB를 읽고 개인적인 복사로 갱신, 트랜잭션 갱신은 모두 임시 갱신파일에 기록, 다른 트랜잭션에 의해 접근 불가능
    • Validation Phase: 가해진 변화가 데이터베이스의 무결성과 일관성에 영향을 주지 않을 것이라는 것을 보장하기 위해 검증됨, 이상 있을 경우 트랜잭션 재시작 및 롤백.
    • Write Phase: 변경사항이 영구적으로 DB에 적용됨

Locking 기법​

  • Shared Lock: 공유 잠금한 트랜잭션은 데이터 항목에 대해 읽기만 가능, 다른 트랜잭션도 읽기 만 실행 가능
  • Exclusive Lock: 전용 잠금한 트랜잭션은 데이터 항목에 대해 읽기와 쓰기 모두 가능, 다른 트랜잭션은 읽기/쓰기 불가.
  • DB -> Table -> Row -> Column: Locking overhead 증가, 자료 공유성 높음.

2 Phase Locking​

모든 트랜잭션이 lock과 unlock 연산을 확장단계와 수축단계로 구분하여 수행

  • 확장단계: 트랜잭션은 lock만 수행할 수 있고, unlock은 수행할 수 없는 단계
  • 수축단계: 트랜잭션은 unlock만 수행할 수 있고, lock은 수행할 수 없는 단계
  • 직렬간으성을 보장할 수 있는 규약으로 가장 많이 사용됨.
  • 교착상태 발생될 수 있으나 예방과 탐지로 해결.

2 Phase Commit​

분산 데이터베이스 환경에서 원자성을 보장하기 위해 분산 트랜잭션에 포함하는 메커니즘 Prepare와 Commit 단계를 통해 모든 노드가 커밋하지 않으면 롤백하는 기법

  • Phase 1: 준비 단계
    • 한 지역노드에서 커밋 요구, Global Coordinator가 Commit Point Site 결정
    • Prepare Message 를 전송하고 원격 노드는 Prepare Message Reply
  • Phase 2: 커밋 단계
    • 모든 지역 노드가 커밋 준비되었다는 것을 받은 경우 각 노드에 Commit을 명령함
    • Global Coordinator가다른 지역 노드로부터 에러 보고를 받을 시 롤백 명령

DB 회복​

장애 발생시 데이터베이스를 장애 발생 이전 데이터베이스의 내용에 모순이 없는 일관된 상태로 복원시키는 것을

장애 유형​

  • 트랜잭션: Transation Failure, 잘못된 입력, 데이터를 찾을 수 없는경우, 오버플로우, 가용자원 초과 요청 등으로 트랜잭션 동작 불가
  • 시스템: System Failure, 교착상태로 트랜잭션이 작업 불가, 하드웨어 오작동으로 휘발성 기어장치의 데이터 손실
  • 미디어: Media Failure, 비휘발성 기억장치(하드디슼) 고장으로 디스크 블록이 붕괴

회복 요건​

  • 덤프: 데이터베이스 내용을 일정기간마다 다른 저장소에 저장, 백업정책에 의거하여 다른 디스크 또는 특정 가용 공간에 복사
  • 로그: 데이터베이스 내용이 변경될 때마다 변경 내용을 로그파일에 실시간 저장

회복 기법​

  • 지연갱신
    • 트랜잭션이 부분완료 상태에 이르기 전까지 발생한 모든 변경내용을 로그파일에 기록하고, DB에 저장하는 것을 지연시키는 방법
    • 트랜잭션 실패시 로그파일의 내용만을 폐기하면 되므로 Undo필요없음
  • 즉시갱신
    • 변경내용을 DB와 로그파일에 동시에 저장
    • 트랜잭션 수행 도중 실패한 경우 로그파일의 내용을 참조하여 변경 이전 값으로 수정하는 Undo과정 필요
  • 검사점: Check Point
    • 변경내용을 로그파일에 기록하고, 일정시간마다 체크포인트를 발생시켜 그때까지의 변경사항을 디스크에 저장, 로그파일에는 체크포인트를 기록
    • 장애시 체크포인트 이전 처리된 트랜잭션은 회복작업에서 제외하고, 이후 처리된 트랜잭션에 대해서만 Redo 또는 Undo 수행.
    • Check point interval 관리 필요
  • 그림자페이지: Shadow Page Table
    • 트랜잭션 실행 중 현재 페이지 테이블과 그림자 페이지 테이블을 이용
    • 현재 페이지 테이블은 메인메모리, 그림자 페이지 테이블은 하드디스크에 저장
    • 트랜잭션 변경 연산이 수행되면 현재 페이지의 테이블 내용만 변경하고 그림자 페이지 테이블의 내용은 변경하지 않음
    • 트랜잭션이 성공적으로 완료될 경우, 현재 페이지 테이블의 내용을 그림자 페이지 테이블의 내용으로 저장
    • 데이터 단편화 및 그림자 페이지 테이블 복사, 쓰기에 오버헤드 발생

참조​