Skip to main content

기술사 - 데이터베이스

· 19 min read

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
    • 트랜잭션 실행 중 현재 페이지 테이블과 그림자 페이지 테이블을 이용
    • 현재 페이지 테이블은 메인메모리, 그림자 페이지 테이블은 하드디스크에 저장
    • 트랜잭션 변경 연산이 수행되면 현재 페이지의 테이블 내용만 변경하고 그림자 페이지 테이블의 내용은 변경하지 않음
    • 트랜잭션이 성공적으로 완료될 경우, 현재 페이지 테이블의 내용을 그림자 페이지 테이블의 내용으로 저장
    • 데이터 단편화 및 그림자 페이지 테이블 복사, 쓰기에 오버헤드 발생

참조