JUINTINATION
데이터베이스 개요 본문
데이터저장소
데이터저장소는 소프트웨어 개발 과정에서 다루어야 할 데이터들을 논리적인 구조로 조직화하거나, 물리적인 공간에 구축한 것을 의미한다.
- 데이터저장소는 논리 데이터저장소와 물리 데이터저장소로 구분된다.
- 논리 데이터저장소는 데이터 및 데이터 간의 연관성, 제약조건을 식별하여 논리적인 구조로 조직화한 것
- 물리 데이터저장소는 논리 데이터저장소에 저장된 데이터와 구조들을 소프트웨어가 운용될 환경의 물리적 특성을 고려하여 하드웨어적인 저장장치에 저장한 것
- 논리 및 물리 데이터저장소를 구축하는 과정과 데이터베이스를 구축하는 과정은 동일
데이터베이스
데이터베이스는 특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임으로 다음과 같이 정의할 수 있다.
- 통합된 데이터(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)
- 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용되는 언어
- 데이터 정의어(Data Define Language)
절차형 SQL
절차형 SQL은 C, JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL을 의미한다.
- 절차형 SQL은 일반적인 프로그래밍 언어에 비해 효율은 떨어지지만 단일 SQL 문장으로 처리하기 어려운 연속적인 작업들을 처리하는데 적합하다.
- 절차형 SQL을 활용하여 다양한 기능을 수행하는 저장 모듈을 생성할 수 있다.
- 절차형 SQL은 DBMS 엔진에서 직접 실행되기 때문에 입출력 패킷이 적은편이다.
- BEGIN ~ END 형식으로 저장되는 블록(Block) 구조로 되어 있기 때문에 기능별 모듈화가 가능하다.
- 절차형 SQL의 종류에는 프로시저, 트리거, 사용자 정의 함수가 있다.
- 프로시저(Procedure)
- 특정 기능을 수행하는 일종의 트랜잭션 언어로 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업을 수행한다.
- 트리거(Trigger)
- 데이터베이스 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트(Event)가 발생할 때마다 관련 작업이 자동으로 수행된다.
- 사용자 정의 함수
- 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하며, 종료 시 예약어 Return을 사용하여 처리 결과를 단일값으로 반환한다.
- 프로시저(Procedure)
데이터 접속(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되는 현상
'정보처리기사 정리' 카테고리의 다른 글
소프트웨어 설치 및 사용자 매뉴얼 (1) | 2024.02.12 |
---|---|
디지털 저작권 관리(DRM) (0) | 2024.02.12 |
소프트웨어 패키징과 릴리즈 노트 (0) | 2024.02.12 |
단위 모듈 구현 (0) | 2024.02.12 |
정보처리기사 필기 1과목 정리 (1) | 2024.02.10 |