JUINTINATION

데이터베이스 개요 본문

정보처리기사 정리

데이터베이스 개요

DEOKJAE KWON 2024. 2. 11. 23:08
반응형

데이터저장소

데이터저장소는 소프트웨어 개발 과정에서 다루어야 할 데이터들을 논리적인 구조로 조직화하거나, 물리적인 공간에 구축한 것을 의미한다.

  • 데이터저장소는 논리 데이터저장소와 물리 데이터저장소로 구분된다.
    • 논리 데이터저장소는 데이터 및 데이터 간의 연관성, 제약조건을 식별하여 논리적인 구조로 조직화한 것
    • 물리 데이터저장소는 논리 데이터저장소에 저장된 데이터와 구조들을 소프트웨어가 운용될 환경의 물리적 특성을 고려하여 하드웨어적인 저장장치에 저장한 것
  • 논리 및 물리 데이터저장소를 구축하는 과정과 데이터베이스를 구축하는 과정은 동일

데이터베이스

데이터베이스는 특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임으로 다음과 같이 정의할 수 있다.

  • 통합된 데이터(Integrated Data) : 자료의 중복을 배제한 데이터의 모임
  • 저장된 데이터(Stored Data) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
  • 운영 데이터(Operational Data) : 조직의 고유한 업무를 수행하기 위해 반드시 필요한 자료
  • 공용 데이터(Shared Data) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료

DBMS(Database Management System; 데이터베이스 관리 시스템)

DBMS란 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해 주는 소프트웨어이다.

  • DBMS는 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템으로, 모든 응용 프로그램들이 데이터베이스를 공용할 수 있도록 관리해준다.
  • DBMS는 데이터베이스의 구성, 접근 방법, 유지관리에 대한 모든 책임을 진다.
  • DBMS의 필수 기능에는 정의(Definition), 조작(Manipulation), 제어(Control) 기능이 있다.
    • 정의 기능
      • 모든 응용 프로그램들이 요구하는 데이터 구조를 지원하기 위해 데이터베이스에 저장될 데이터의 형(Type)과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 기능이다.
    • 조작 기능
      • 데이터 검색, 갱신, 삽입, 삭제 등을 체계적으로 처리하기 위해 사용자와 데이터베이스 사이의 인터페이스 수단을 제공하는 기능이다.
    • 제어 기능
      • 데이터베이스를 접근하는 갱신, 삽입, 삭제 작업이 정확하게 수행되어 데이터의 무결성이 유지되도록 제어해야 한다.
      • 정당한 사용자가 허가된 데이터만 접근할 수 있도록 보안(Security)을 유지하고 권한(Authority)을 검사할 수 있어야 한다.
      • 여러 사용자가 데이터베이스를 동시에 접근하여 데이터를 처리할 때 처리 결과가 항상 정확성을 유지하도록 병행 제어(Concurrency Control)를 할 수 있어야 한다.

DBMS의 장단점

장점 단점
데이터의 논리적, 물리적 독립성이 보장된다.
데이터의 중복을 피할 수 있다.
저장된 자료를 공동으로 이용할 수 있다.
데이터의 보안과 일관성 및 무결성을 유지할 수 있다.
데이터를 표준화할 수 있다.
데이터를 통합하여 관리할 수 있다.
항상 최신의 데이터를 유지하며 실시간 처리가 가능하다.
전산화 비용이 증가한다.
대용량 디스크로의 집중적인 Access로 과부하(Overhead)가 발생한다.
파일의 예비(Backup)와 회복(Recovery)이 어렵다.
시스템이 복잡하다.

스키마

스키마(Schema)는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세(Specification)를 기술(Description)한 메타데이터(Meta-Data)의 집합이다.

  • 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relation) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.
  • 스키마는 사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마로 나누어진다.
    • 외부 스키마
      • 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.
    • 개념 스키마
      • 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.
      • 개체 간의 관계와 제약 조건을 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
    • 내부 스키마
      • 물리적 저장장치의 입장에서 본 데이터베이스 구조로서, 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다.

데이터 입출력의 개요

데이터 입출력은 소프트웨어 기능 구현을 위해 데이터베이스에 데이터를 입력하거나 출력하는 작업을 의미한다.

  • 데이터 입출력은 단순 입력과 출력뿐만 아니라 데이터를 조작하는 모든 행위를 의미하며 이와 같은 작업을 위해 SQL(Structured Query Language)을 사용한다.
  • 데이터 입출력을 소프트웨어에 구현하기 위해 개발 코드 내에 SQL 코드를 삽입하거나 객체와 데이터를 연결하는 것을 데이터 접속(Data Mapping)이라고 한다.
  • SQL을 통한 데이터베이스의 조작을 수행할 때 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 트랜잭션(Transaction)이라고 한다.

SQL(Structured Query Language)

SQL은 국제표준 데이터베이스 언어로 많은 회사에서 관계형 데이터베이스(RDB)를 지원하는 언어로 채택하고 있다.

  • 관계대수와 관계해석을 기초로 한 혼합 데이터 언어이다.
  • 질의어지만 질의 기능만 있는 것이 아니라 데이터 구조의 정의, 조작, 제어 기능을 모두 갖추고 있다.
  • SQL은 데이터 정의어(DLL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분된다.
    • 데이터 정의어(Data Define Language)
      • SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경, 또는 삭제할 때 사용하는 언어
    • 데이터 조작어(Data Manipulation Language)
      • 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용되는 언어
    • 데이터 제어어(Data Control Language)
      • 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어

절차형 SQL

절차형 SQL은 C, JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL을 의미한다.

  • 절차형 SQL은 일반적인 프로그래밍 언어에 비해 효율은 떨어지지만 단일 SQL 문장으로 처리하기 어려운 연속적인 작업들을 처리하는데 적합하다.
  • 절차형 SQL을 활용하여 다양한 기능을 수행하는 저장 모듈을 생성할 수 있다.
  • 절차형 SQL은 DBMS 엔진에서 직접 실행되기 때문에 입출력 패킷이 적은편이다.
  • BEGIN ~ END 형식으로 저장되는 블록(Block) 구조로 되어 있기 때문에 기능별 모듈화가 가능하다.
  • 절차형 SQL의 종류에는 프로시저, 트리거, 사용자 정의 함수가 있다.
    • 프로시저(Procedure)
      • 특정 기능을 수행하는 일종의 트랜잭션 언어로 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업을 수행한다.
    • 트리거(Trigger)
      • 데이터베이스 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트(Event)가 발생할 때마다 관련 작업이 자동으로 수행된다.
    • 사용자 정의 함수
      • 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하며, 종료 시 예약어 Return을 사용하여 처리 결과를 단일값으로 반환한다.

데이터 접속(Data Mapping)

데이터 접속은 소프트웨어의 기능 수현을 위해 프로그래밍 코드와 데이터베이스의 데이터를 연결하는 것을 말하며 관련 기술로 SQL Mapping과 ORM이 있다.

  • SQL Mapping
    • 프로그래밍 코드 내에 SQL을 직접 입력하여 DBMS의 데이터에 접속하는 기술
    • 관련 프레임워크로 JDBC, ODBC, MyBatis 등이 있다.
  • ORM(Object-Relational Mapping)
    • 객체지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 연결하는 기술
    • 관련 프레임워크로 JPA, Hibernate, Django 등이 있다.

트랜잭션(Transaction)

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행돼야 할 일련의 연산들을 의미한다.

트랜잭션 제어를 위한 명령어를 TCL(Transaction Control Language)이라고 하며 TCL의 종류에는 COMMIT, ROLLBACK, SAVEPOINT 가 있다.

  • COMMIT
    • 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영하는 명령어
  • ROLLBACK
    • 하나의 트랜잭션 처리가 비정상으로 종료되어 데이터베이스의 일관성이 깨졌을 때 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 연산
  • SAVEPOINT(=CHECKPOINT)
    • 트랜잭션 내에 ROLLBACK할 위치인 저장점을 지정하는 명령어

회복(Recovery)

회복은 트랜잭션들을 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구하는 작업이다.

장애의 유형

  • 트랜잭션 장애
    • 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상
  • 시스템 장애
    • 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상
  • 미디어 장애
    • 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태

회복 관리기(Recovery Management)

회복 관리기는 DBMS의 구성 요소이다.

  • 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜잭션이 데이터베이스에 생성했던 모든 변화를 최소(Undo)시키고 트랜잭션 수행 이전의 원래 상태로 복구하는 역할을 담당한다.
  • 메모리 덤프, 로그를 이용하여 회복을 수행한다.

회복 기법

  • 연기 갱신 기법(Deferred Update)
    • 트랜잭션이 성공적으로 완료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 방법이다.
    • 트랜잭션이 수행되는 동안 갱신된 내용은 일단 로그에 보관된다.
    • 트랜잭션의 부분 완료 혹은 성공적인 완료 직전 시점에 로그에 보관한 갱신 내용을 실제 데이터베이스에 기록한다.
    • 트랜잭션이 부분 완료되기 전에 장애가 발생하여 트랜잭션이 Rollback되면 트랜잭션이 실제 데이터베이스에 영향을 미치지 않았기 때문에 어떠한 갱신 내용도 Undo시킬 필요 없이 무시하고 Redo한다.
  • 즉각 갱신 기법(Immediate Update)
    • 트랜잭션이 데이터를 갱신하면 트랜잭션이 부분 완료되기 전이라도 즉시 실제 데이터베이스에 반영하는 방법이다.
    • 장애가 발생하여 회복 작업할 경우를 대비하여 갱신된 내용들은 로그에 보관시킨다.
    • 회복 작업을 할 경우에는 Redo와 Undo 모두 사용 가능하다.
  • 그림자 페이지 대체 기법(Shadow Paging)
    • 갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback 시킬 때 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복시키는 기법이다.
    • 로그, Undo 및 Redo 알고리즘이 필요하다.
  • 검사점 기법(Check Point)
    • 트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등에 관한 정보와 함께 검사점을 로그에 보관해두고 장애 발생 시 트랜잭션 전체를 철회하지 않고 검사점부터 회복 작업을 진행하여 시간을 절약하도록 하는 기법이다.

병행제어(Concurrency Control)

병행제어란 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행수행할 때 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호 작용을 제어하는 것으로 데이터베이스의 공유 및 시스템 활용도를 최대화하며, 데이터베이스의 일관성을 유지하고, 사용자에 대한 응답 시간 최소화한다.

병행제어 기법의 종류

  • 로킹(Locking)
    • 주요 데이터의 액세스를 상호 배타적으로 하는 것이다.
    • 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락돼야만 그 로킹 단위를 액세스할 수 있도록 하는 기법이다.
  • 타임 스탬프 순서(Time Stamp Ordering)
    • 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법이다.
    • 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법이다.
    • 교착상태가 발생하지 않는다.
  • 최적 병행수행(검증 기법, 확인 기법, 낙관적 기법)
    • 병행수행하고자 하는 대부분의 트랜잭션이 Read Only 트랜잭션일 경우 트랜잭션 간의 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법이다.
  • 다중 버전 기법
    • 타임 스탬프의 개념을 이용하는 기법으로 갱신될 때마다의 버전을 부여하여 관리한다.

병행수행의 문제점

병행제어 기법에 의한 제어 없이 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우 다음의 문제점이 발생한다.

  • 갱신 분실(Lost Update)
    • 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
  • 비완료 의존성(Uncommitted Dependency)
    • 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상
  • 모순성(Inconsistency)
    • 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문제
    • 불일치 분석(Inconsistent Analysis)이라고도 한다.
  • 연쇄 복귀(Cascading Rollback)
    • 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상
728x90
Comments