1 DBS (Database System)
- 데이터베이스에 데이터를 저장하고, 저장된 데이터를 관리하여 조직에 필요한 정보를 생성해주는 시스템이다. 따라서 다양한 목적의 정보 처리 시스템을 구축하는 데 필요한 핵심 요소이다.
- 데이터는 사실을 나타내는 수치라면, 정보란 사용자의 의사결정에 도움을 주는 가공된 데이터들의 집합이다.
- 조직 내에서 여러 응용시스템과 다수의 사용자들이 공동으로 사용하기 위하여 중복을 배제하고 통합된 환경으로 저장한 데이터의 집합이다.
- 실시간 접근성 (Real-time Accessibility)
s 사용자나 프로그램의 데이터 요구에 실시간으로 처리하고 응답한다.
- 계속적인 변화 (Continuous Evolution)
s 삽입 또는 삭제, 갱신을 통해 데이터의 내용이 계속적으로 변화한다.
- 동시 공유 (Concurrent Sharing)
s 목적이 다른 사용자나 프로그램이 동시에 동일한 데이터를 이용 가능하다.
- 내용에 의한 참조 (Content Reference)
s 데이터의 탐색 시 주소나 저장 위치가 아닌 내용에 의해 참조가 가능하다.
1.1.4 데이터베이스의 4가지 만족 조건
- 통합된 데이터 (Integrated Data)
s 동일한 데이터가 중복되지 않게 구성한다.
s 검색의 효율을 고려하여 최소한의 중복 또는 통제된 중복을 허용해야 한다.
- 저장 데이터 (Stored Data)
s 자기테이프나 디스크와 같은 저장 매체에 저장 가능해야 한다.
- 운영 데이터 (Operational Data)
s 조직의 존재 목적이나 기능을 수행하는데 꼭 필요한 데이터의 집합이다.
- 공용 데이터 (Shared Data)
s 한 조직의 여러 응용 프로그램들이 공동으로 소유하고 유지하며, 이용하는 데이터이다.
1.2 구성요소
- 데이터베이스, 사용자, 데이터베이스 관리 시스템(DBMS), 관리자, 하드웨어로 구성된다.
1.2.1 데이터베이스
- 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임이다.
- 데이터베이스는 시스템 카탈로그[1](또는 데이터 사전)와 저장된 데이터베이스로 구분할 수 있다.
- 사용자가 새로운 테이블을 만들거나 기존의 테이블에 새로운 애트리뷰트를 추가하는 작업 들을 수행하면 시스템 카탈로그에 이를 반영하는 스키마 정보가 삽입된다.
- 사용자가 새로운 데이터베이스를 생성하고, 데이터베이스의 구조를 명시할 수 있게 하고, 사용자가 데이터를 효율적으로 질의하고 수정할 수 있도록 하며, 시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호하며, 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어하는 소프트웨어 패키지이다.
- 다양한 부류의 사용자들에게 여러 가지 기능을 제공하기 위해서 DBMS는 데이터베이스 언어라고 부르는 특별한 프로그래밍 언어를 한 개 이상 제공한다.
- 한 DBMS에서 여러 데이터베이스를 관리할 수 있다.
- 사용자 역할에 따라 몇 가지 유형으로 구분할 수 있다.
1) 데이터베이스 사용자(DBA)
s 조직의 여러 부분의 상이한 요구를 만족시키기 위해서 일관성 있는 데이터베이스 스키마를 생성하고 유지하는 사람을 말한다.
s DBA의 역할은 관리적인 역할부터 기술적인 역할까지 다양하게 역할을 수행한다.
s 데이터 정의어의 주요 사용자라고 할 수 있다.
2) 응용 프로그래머(Application Programmer)
s 데이터베이스 위에서 특정 응용이나 인터페이스를 구현하는 사람으로서 데이터 조작어의 주요 사용자이다.
3) 최종 사용자(End User)
s 질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용하는 사람으로서 데이터 정의어나 데이터 조작어를 직접 사용하는 경우는 드물다.
4) 데이터베이스 설계자(Database Designer)
s CASE[2] 도구들을 이용해서 데이터베이스 설계를 책임진다.
s 데이터베이스의 일관성을 유지하기 위해서 정규화를 수행하고, 효율적으로 접근할 수 있도록 인덱스 등을 정의한다.
5) 오퍼레이터(Operator)
s DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람이다.
- 데이터베이스는 디스크와 같은 보조 기억 장치에 저장되며, DBMS에서 원하는 정보를 찾기 위해서는 디스크의 블록들을 주기억 장치로 읽어 들여야 한다.
- DBMS 자체도 주기억 장치에 적재되어 실행되어야 하므로 하드웨어 자원들을 필요로 한다.
1.2.5 색인(Index)
- 테이블에 잇는 데이터를 검색할 때, 데이터의 양이 많을수록 모든 레코드를 검색하는데 시간이 오래 걸리므로 테이블에 색인을 설정하고, 검색할 때에는 테이블이 아닌 색인을 이용하면 검색시간을 단축시킬 수 있다.
사용 예 |
CREATE INDEX 색인_이름 ON 테이블_이름(컬럼_이름) ; |
- 데이터베이스의 구조와 제약 조건에 대한 명세를 기술한 것이다.
- 데이터베이스 내에 저장된 모든 데이터들의 논리적 구조 및 관계를 기술한 것이다.
- 데이터베이스 내의 개체, 속성, 관계와 이들 간의 제약조건이 기술되어야 한다.
- 외부, 내부, 개념 스키마로 나누어진다.
스키마 |
내용 |
|
외부 스키마 |
= 서브 스키마 = 뷰(View) |
s 사용자나 응용프로그래머의 관점에서 바라본 데이터베이스의 구조 |
내부 스키마 |
= 저장 스키마 |
s 데이터베이스의 저장 위치나 물리적인 구성, 접근방법 등의 하부 구조를 정의하는 스키마 s 시스템 프로그래머나 설계자의 관점에서 바라본 스키마 구조 |
개념 스키마 |
= 스키마 |
s 논리적 관점에서 바라본 데이터베이스의 전체 구조에 대한 정의를 기술한 스키마 s 조직이나 기관, 시스템 전체의 관점에서 바라본 스키마 |
- 릴레이션에 어느 시점에 들어 있는 튜플들의 집합이다.
- 인스턴스는 정적이지 않고 시간의 흐름에 따라 계속 변한다. 이러한 변화는 데이터 조작어를 통해서 이루어진다.
1.5 (MySQL이 지원하는) Storage Engine
1.5.1 MyISAM
- 기존 ISAM을 대치하는 새로운 Storage Engine으로 static, dynamic과 compressed(read-only) row 포맷을 지원한다. 그러나 트랜잭션은 지원하지 않는다. Text와 Compressed Index를 지원 Data와 Index의 파일이 분리되어 있다. 매우 빠른 읽기/쓰기 성능을 가지고 있으나 낮은 읽기/쓰기 동기성(Concurrency)을 갖는다. Log와 같은 Select와 Insert에서는 매우 훌륭한 동기화를 갖는다. 체크 및 복구 프로그램으로 MyISAMCHK가 있다. 특히 웹사이트와 Logging처리에 우수하다.
1.5.2 InnoDB
- InnoBase Oy로부터 활발하게 개발된 코드이다. row level locking과 함께 완벽한 트랜잭션(ACID) 처리가 된다. 같은 테이블에서 읽기/쓰기에 대해 MyISAM보다 좋은 동기화(concurrency) 처리를 한다.
- 무결성(consistency) 읽기를 수행한다(Oracle-style MVCC). 개개의 파일에 적재되는 것이 아니라 tablespace를 사용한다. MySQL AB가 제작자/개발자로서 계약을 통해 지원을 제공한다. MySQL 4와 MySQL Max에 포함되어 있다. 과부하 상태에서도 안정적인 동작을 수행한다.
1.5.3 Merge
- MySQL AB가 개발한 하나의 테이블처럼 사용되는 MyISAM 같은 테이블 모음(collection)이다. 어떤 테이블들은 압축(compressed) 되어 사용할 수 있다. ALTER TABLE로 테이블의 설정을 변경할 수 있으며, Insert/Delete/Update/Select 가 사용 가능하다. Logging 시스템 제작에 매우 유용하다.
1.5.4 In-Memory Hash Tables
- 메모리에서 동작하는 Hash 기반의 인덱싱 테이블이다. Insert/Delete/Update/Select가 사용 가능하며, Temporary table이나 Lookup table에 유용하다. 제한적이며 특수화되었다.
1.5.5 BerkeleyDB
- Sleepycat Software Inc에서 개발되고 지원된다. Page level locking으로 완벽한 트랜잭션(ACID)을 지원한다. 같은 테이블에 읽기/쓰기를 할 경우에 MyISAM보다 좋은 동기화(concurrency)를 지원한다. Primary key 찾는데 MyISAM 보다 빠르다. 테이블당 하나의 파일에 데이터와 인덱스가 저장된다. 바이너리로 제공되는 MySQL Max에 포함되어 있다. 보다 낮은 레벨에서 MySQL과 독립적으로 동작한다.
1.6 Transaction
- 하나의 논리적 단위를 구성하는 데이터베이스 연산의 모임이다.
- 데이터 객체(튜플, 릴레이션)들을 접근하고, 갱신도 하는 프로그램 수행의 단위이다.
- 동시에 여러 트랜잭션이 수행되지 위해서 데이터베이스의 일관성이 보장되어야 하며 이를 위해 동시성 제어[3](Concurrency Control)와 회복 제어[4](Recovery Control)을 위한 모듈이 있다 이 둘을 합쳐 트랜잭션 관리 모듈 관리(Transaction Management Module)라고 한다.
1.6.1 트랜잭션의 특징
- ACID 규칙을 만족해야 한다.
1) 원자성 (Atomicity)
- 한 트랜잭션의 모든 작업이 수행되든지, 아니면 하나도 수행되지 않음(All or Nothing)을 의미한다.
- 시스템이 다운되는 경우에 DBMS의 회복 모듈은 부분적으로 데이터베이스를 갱신한 트랜잭션의 영향을 취소(Roll Back)하고, 완료된 트랜잭션이 갱신한 사항은 트랜잭션의 영향을 재 수행함으로써 트랜잭션의 원자성을 보장한다.
2) 일관성 (Consistency)
- 한 트랜잭션을 정확하게 수행하고 나면 데이터베이스가 하나의 일관된 상태에서 다른 상태로 바뀐다. 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 일관된 상태를 갖는다.
- 트랜잭션이 수행되는 도중에는 데이터베이스가 일시적으로 일관된 상태를 갖지 않을 수 있다.
- 일관성은 트랜잭션을 작성하는 사용자(응용 프로그래머)와 무결성 제약조건을 유지하는 DBMS의 일부 모듈이 유지한다.
3) 고립성 (Isolation)
- 두 개의 트랜잭션이 서로에게 영향을 미칠 수 없다. 트랜잭션이 실행되는 동안의 값은 다른 트랜잭션이 접근할 수 없어야 한다.
- 각 트랜잭션은 시스템 내에서 동시에 수행되고 잇는 다른 트랜잭션들을 알지 못한다.
- 다수의 트랜잭션들이 동시에 수행되더라도 그 결과는 어떤 순서에 따라 트랜잭션들을 하나씩 차례대로 수행한 결과와 같아야 한다.
- DBMS의 동시성 제어 모듈이 트랜잭션의 고립성을 보장한다. 또한, DBMS는 응용들의 요구사항에 따라 다양한 고립 수준(Isolation Level)을 제공한다.
4) 지속성(Durability)
- 일단 한 트랜잭션이 완료되면 이 트랜잭션이 갱신한 것은 그 후에 시스템에 고장이 발생하더라도 손실되지 않는다.
- 완료된 트랜잭션의 효과는 시스템이 고장 난 경우에도 데이터베이스에 반영된다. DBMS의 회복 모듈은 시스템이 다운되는 경우에도 트랜잭션의 지속성을 보장한다.
1.6.2 Commit과 Rollback의 비교
연산 |
COMMIT |
ROLLBACK |
의미 |
완료 (성공적인 종료) |
철회 (비성공적인 종료) |
DBMS의 트랜잭션 관리 모듈에게 알리는 사항 |
s 트랜잭션이 성공적으로 끝났음 s 데이터베이스는 새로운 일관된 상태 s 트랜잭션이 수행한 갱신을 데이터베이스에 반영해야 함 |
s 트랜잭션의 일부를 성공적으로 끝내지 못했음 s 데이터베이스가 불일치 상태를 가질 수 있음 s 트랜잭션이 수행한 갱신이 데이터베이스에 일부 반영되었다면 취소해야 함 |
-
[1] System Catalog: 저장된 데이터베이스의 스키마 정보를 유지함.
[2] Computer-Aided Software Engineering: 컴퓨터 지원 시스템 공학. 시스템 개발 방법론들의 자동화를 지원하는 소프트웨어 도구를 제공해 개발자의 반복적인 작업량을 줄이도록 하는 것.
[3] 데이터베이스를 일관성 있게 유지하기 위하여 동시에 수행되는 트랜젝션들 사이의 상호작용을 제어함.
[4] 데이터베이스를 일관성 있게 유지하기 위하여 업데이트를 하는 동안 시스템 장애에도 데이터베이스의 기존 상태가 유지됨.
'와사비크래커 IT Tip > DB' 카테고리의 다른 글
[DB] Data Model (0) | 2020.08.21 |
---|---|
[DB] DBMS (Database Management System) (0) | 2020.08.20 |
mariadb utf8 변경 (0) | 2017.11.21 |
Oracle 11g 기본적인 사용 방법 (0) | 2017.11.21 |
MySQL / MariaDB 쿼리 패킷 사이즈 변경 (0) | 2017.11.20 |