본문 바로가기

데이터베이스

Chap 1. 데이터 베이스 시스템

1장  데이터베이스 시스템

데이터와 정보는 서로 다름

데이터 : 컴퓨터 디스크와 같은 매체에 저장된 사실

정보 : 데이터를 처리해서 사람이 이해하기에 적합한 형태로 의미있게 만든 것

    => 데이터베이스 시스템은 정보와 데이터 사이의 갭을 줄여야함

 

데이터 베이스의 정의

데이터베이스는 조직체의 응용 시스템들이 공유해서 사용하는 운영 데이터들이 구조적으로 통합된 모임이다. 데이터베이스의 구조는 사용되는 데이터 모델에 의해 결정된다.

 

(여기서 운영이란 끊임없이 업데이트된다는 뜻, 데이터 모델은 주로 관계형 데이터베이스가 많이 쓰임)

 

데이터 베이스의 특징

- 데이터베이스는 데이터의 대규모 저장소

- 여러 부서에 속하는 여러 사용자에 의해 동시에 사용 (데이터 접근, 검색, 갱신)

- 모든 데이터가 중복을 최소화하면서 통합됨

     => 약간의 중복을 허용하는 예외적인 경우도 있다. 중복이 없는 데이터는 무결하다고 표현

- 데이터 베이스는 한 조직체의 운영 데이터와 데이터베이스 스키마(메타 데이터)까지 포함함

     => 데이터베이스 스키마(메타데이터) : 그 데이터에 관한 설명

- 응용 프로그램과 데이터 간의 독립성이 제공됨

     => file system과 다른 점?

파일에서 레코드를 읽어야한다. 파일의 구조, 프로그램 수정시 하드코딩한 내용을 변경하여야함 => 따라서 데이터베이스를 사용하지않고 파일 시스템을 쓰게 되면 독립성이 없음

- 효율적으로 접근이 가능하고 질의를 할수있음

     => index를 사용하여 효율적인 접근이 가능케함

 

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

- 데이터베이스를 정의하고 질의어를 지원하고 질의를 수행하여 결과를 가져오고 리포트를 생성하는 등의 작업을 수행하는 소프트웨어

질의를 지원한다는 것은 질의어(SQL)을 컴파일 할 수 있다는 것!!

 

1.1 데이터 베이스 시스템 개요

데이터 베이스 시스템

: 데이터 베이스, 사용자(응용 프로그램), DBMS, 하드웨어로 구성됨, 데이터의 검색과 변경을 주로 수행

 

데이터 베이스 스키마

- 전체적인 데이터베이스 구조, 자주 변경되지않음

- 데이터베이스의 모든 가능한 상태를 미리 정의

- 내포(intension)이라고 부름

 

데이터 베이스 상태

- 특정 시점의 데이터베이스의 내용을 의미하며, 시간이 지남에 따라 계속해서 바뀜

- 외연(extension)이라고 부름

-> consistancy는 유지함(트랜젝션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것, 데이터 베이스를 구성할 때 정해놓은 규칙들은 트랜젝션이 성공하고 나서도 계속해서 유지되어야 한다는 것이다. => 간단히 말하면 외연이어도 데이터베이스 구성시 만든 규칙이 변경되는 것은 아님!!!)

 

 

여기서 DEPARTMENT와 EMPLOYEE를 테이블(릴레이션), 괄호 속에 있는 이름들은 해당 테이블의 애트리뷰트, 각 표에 있는 값들은 엔티티(Entity)를 의미함

=> ex) 엑셀 시트의 이름은 테이블, 애트리뷰트는 엑셀표에서의 행(속성), 엔티티는 값

 

데이터 베이스의 구성요소

 

데이터 베이스 시스템 카탈로그

- 데이터 베이스는 시스템 카탈로그(또는 데이터 사전)와 저장된 데이터베이스로 구분할 수 있다

- 시스템 카탈로그(system catalog)는 저장된 데이터베이스의 스키마 정보를 유지

=> DBMS는 질의 수행, DB는 실질적으로는 디스크에 저장(디스크와의 I/O 수행) 

 

DBMS

: 사용자가 새로운 데이터베이스를 생성하고, 데이터베이스의 구조를 명시할 수 있게 하고, 사용자가 데이터를 효율적으로 질의하고 수정할 수 있도록 하며, 시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호하며, 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어하는 소프트웨어 패키지 (동시 접근 허용시 많은 문제가 발생한다 -> 이를 제어해야함)

그냥 얘가 데이터베이스 관리 다 함

- 데이터 베이스 언어라고 부르는 특별한 프로그래밍 언어를 한개 이상 제공

- SQL은 여러 DBMS에서 제공되는 사실상의 표준 데이터베이스 언어(질의, 구조명시)

(SQL은 단순히 query만 하는 언어가 아니다. DDL - 데이터 정의(database define), DML - 데이터 생성, 수정, 삭제 , DCL -> 접근 및 권한  =>  모두 합친 개념이 SQL)

 

Dbmscpu가 있는 컴퓨터에서  24시간 동안 쉬지않고 돌아간다.

응용 개발 도구들 -> 벤더별로 (JDBC(JAVA), ODBC(Microsoft) 등등)

Dbms메인메모리, 데이터베이스는 디스크

Dbms의 질의 : DB를 block으로 구획화, 필요할때 메인메모리로 불러와서 검사

- 물리적 설계단에서 설계시 Disk I/O줄여야함

 

DB 시스템의 구성

사용자 : 데이터베이스 사용자는 여러 부류로 나눌 수 있음 추후에 다시 설명
하드웨어 : 데이터베이스는 디스크와 같은 보조 기억 장치에 저장되며, DBMS에서 원하는 정보를 찾기 위해서는 디스크의 블록들을 주기억 장치로 읽어들여야 하며, 계산이나 비교 연산들을 수행하기 위해 CPU가 사용됨

- DBMS 자체도 주기억 장치(메모리)에 적재되어 실행되어야한다.

 

데이터베이스 시스템의 요구사항

- 데이터 독립성

: 응용 프로그램이 데이터 표현의 상세한 내역과 데이터 저장으로부터 독립적이다.

- 인덱스를 활용한 효율적인 데이터 접근

이진탐색일때에 BigO 는 log₂n, n이 너무 많으면 n에 대한 인덱스 파일을 만드는 식으로, 이때 인덱스 파일의 인덱스 파일은 master index file이라고 함(약간 데이터베이스 스키마 같은 느낌?)

- 융통성 

: 기존 응용 프로그램에 영향x, 데이터 구조 변경이 가능하여야함

- 데이터에 대한 동시 접근 허용 (동시성 제어 제공)

동시성 제어 : 각 사용자가 혼자서 데이터베이스를 접근하는 것처럼 인식하도록 데이터베이스에 대한 동시 접근을 동기화

- 시스템 에러로부터의 백업과 회복

=> 시스템 에러시 모든 operation이 완벽히 수행되거나 아예 수행되지않아야함 할꺼면 하고 말꺼면 말라는건가

- 중복 최소화 및 제어하여 일관성(Consistency) 유지

- 데이터 무결성(Integrity)

=> 데이터의 정확성을 보장함, 응용프로그램에서 check하고 dbms에서 보장(제약 조건( constraint ) 정의(FK chap 2.4))

- 권한 없는 접근으로부터 데이터베이스 보호

- 쉬운 질의어 어렵던데

- 다양한 사용자 인터페이스 제공

 

1.2 화일 시스템 vs DBMS

화일 시스템이란?

- 화일의 기본적인 구성요소는 순차적인 레코드들임

- 한 레코드는 연관된 필드들의 모임 (구조체처럼)

- 화일을 접근하는 방식이 응용 프로그램 내에 상세하게 표현되므로 데이터에 대한 응용 프로그램의 의존도가 높음 (응용프로그램에서 하드코딩되어있음)

하나 바꾸려면 그거랑 연관된거 싹 다 바꿔야됨 개귀찮게 진짜

 

화일 시스템의 단점

- 다수 사용자들을 위한 동시성 제어가 제공되지 않음
- 검색하려는 데이터를 쉽게 명시하는 질의어가 제공되지 않음
- 보안 조치가 미흡 (user, group, all 별로 rwx 검색 갱신 실행 권한(리눅스 chmod 명령어))
- 회복 기능이 없음
- 프로그램-데이터 독립성이 없으므로 유지보수 비용이 많이 소요됨
- 화일을 검색하거나 갱신하는 절차가 상대적으로 복잡하기 때문에 프로그래머의 생산성이 낮음

- 데이터의 공유와 융통성이 부족

=> 질의어라는 개념 x, 데이터와 프로그램이 tightly coupled되어있음

 

DBMS를 사용한 데이터베이스 관리
- 여러 사용자와 응용 프로그램들이 데이터베이스를 공유
- 사용자의 질의를 빠르게 수행할 수 있는 인덱스 등의 접근 경로를 DBMS가 자동적으로 선택하여 수행
- 권한이 없는 사용자로부터 데이터베이스를 보호
- 여러 사용자에 적합한 다양한 인터페이스를 제공
- 데이터 간의 복잡한 관계를 표현하며, 무결성 제약조건을 DBMS가 자동적으로 유지
- 시스템이 고장 나면 데이터베이스를 고장 전의 일관된 상태로 회복시킴
- 프로그램에 영향을 주지 않으면서 데이터베이스 구조를 변경할 수 있음
==> 프로그램-데이터 독립성(program-data independence)
 
 

DBMS의 장점

- 중복성과 불일치가 감소됨
- 시스템을 개발하고 유지하는 비용이 감소됨
- 표준화를 시행하기가 용이
- 보안이 향상됨
- 무결성이 향상됨
=> 쿼리의 결과를 빨리 돌려주기위해 중복데이터를 허용하는 경우도 있음
- 다양한 유형의 고장으로부터 데이터베이스를 회복할 수 있음

=> 로깅 사용하여 recovery함

- 데이터베이스의 공유와 동시 접근이 가능함

 

DBMS의 단점

- 소프트웨어의 규모가 크고 복잡해서 화일 시스템 방식보다 많은 하드웨어 자원과 추가적인 소프트웨어(DBMS) 비용을 필요로 함

- 데이터베이스의 일관성을 유지하기 위해 많은 컴퓨터 자원을 필요로 함, 하여 응답시간이 오래 걸림

- 백업과 회복의 복잡도가 높음

- 모든 데이터를 데이터베이스에 중앙 집중화하여 시스템이 고장 났을때 역설적으로 고장에 영향을 더 크게 받을수있음, 정보가 누출될 가능성이 높아질수있음

- DBMS는 다수 사용자, 화일 시스템은 소수 사용자를 위한 접근을 제공

- 사용자 및 데이터에 대한 적절한 제어가 필요

 

 
DBMS 선정시 고려사항
- 기술적 요인
: DBMS에 사용되고 있는 데이터 모델, DBMS가 지원하는 사용자 인터페이스, 프로그래밍 언어, 응용 개발 도구, 저장 구조, 성능, 접근 방법 등등

=> 사실 다들 걍 관계형 데이터베이스 씀

- 경제적 요인
: 소프트웨어와 하드웨어 구입 비용, 유지 보수 비용, 직원들의 교육 지원 등

Dbms 유지 보수 비용이 비싸져가는 추세라고..

 

1.3 DBMS 발전 과정

데이터 모델은 데이터(Entity) 타입과 관계, 연산자들, 무결성 제약조건들로 이루어짐

구조(데이터 타입과 관계) : 데이터 베이스의 구조를 기술하는데 사용되는 개념들의 집합

데이터추상화: 사용자에게 내부 저장 방식의 세세한 사항은 숨기면서 데이터를 잘 이해하는 데 도움이 되는 필수적인 특징을 강조
-> 데이터추상화를 통하여 데이터 타입을 설정

(객체지향 프로그래밍(OOP) : 추상화, 캡슐화, 상속성, 다형성)

 

데이터 모델의 분류

- 고수준 또는 개념적 데이터 모델(conceptual data model)

: 사람이 인식하는 것과 유사하게 데이터베이스의 전체적인 논리적 구조를 명시

EX) 엔티티-관계(ER: Entity-Relationship) 데이터 모델, 객체 지향 데이터 모델

 

- 표현(구현) 데이터 모델(representation(implementation) data model)
최종 사용자가 이해하는 개념이면서 컴퓨터 내에서 데이터가 조직되는 방식과 가까움, 데이터저장구조의 detail은닉하지만 컴퓨터상에서 사용자(DBA)가 직접 구현할 수 있음.

EX) 계층 데이터모델(hierarchical data model), 네트워크 데이터모델(network data model), 관계 데이터모델(relational data model)

 

- 저수준 또는 물리적인 데이터 모델(physical data model)

: 데이터가 어떻게 데이터베이스에 저장되는가를 기술

EX) ISAM(indexed sequential access model, a method for indexing data for fast retrieval), VSAM(Virtual storage access method , disk file storage access method)

 

객체 관계 DBMS로 통합됨

 

 계층 DBMS

- 1960년대 후반 IBM에서 개발

- 트리 구조를 기반으로 하는 계층 데이터 모델을 사용한 DBMS

장점

- 어떤 유형의 응용에 대해서는 빠른 속도와 높은 효율성을 제공한다는 것

=>  데이터가 트리 형태로 모델링될 수 있을때 계층 데이터 모델은 훌륭한 선택이 됨

단점

- 어떻게 데이터를 접근하는가를 미리 응용 프로그램에 정의해야함, 구조 변경시 응요 프로그램을 수정하기 어려움

- 데이터베이스가 생성될 때 각각의 관계가 명시적으로 정의되어야함

- 레코드들이 링크로 연결되어있으므로 레코드 구조 변경하기 어려움

=> 데이터 독립성이 매우 제한됨

- 질의어가 절차적이므로 한번에 한 개의 레코드를 검색할수있음

 

네트워크 DBMS

- 1960년대 초 하니웰사에서 개발, 1960년대 후반에 CODASYL모델 정의(좀 더 표준화된 모델)

- 레코드는 노드로, 레코드들 사이의 관계는 간선으로 표현되는 그래프를 기반으로 하는 네트워크 데이터 모델을 사용한 DBMS

단점
- 레코드들이 링크로 연결되어있으므로 레코드 구조를 변경하기 어려움, 응요프로그램 수정도 어려움

=> 데이터 독립성이 매우 제한됨

- 질의어가 절차적이므로 한번에 한 개의 레코드를 검색할수있음

관계 DBMS

- 1970년에 E.F. Codd가 IBM 연구소에서 관계 데이터 모델을 제안
- 미국 IBM 연구소에서 진행된 System R과 캘리포니아 버클리대에서 진행된 Ingres 프로젝트
장점
모델이 간단하여 이해하기 쉬움
사용자는 자신이 원하는 것(what)만 명시하고, 데이터가 어디에 있는지, 어떻게 접근해야 하는지는 DBMS가 결정
EX) MS SQL Server, Oracle, Sybase, DB2, Informix 등

객체 지향 DBMS

- 1980년 후반 개발

- 객체 지향 프로그래밍(OOP) 패러다임을 기반으로 하는 데이터 모델

장점

- 데이터와 프로그램을 그룹화하고 복잡한 객체들을 이해하기 쉬우며, 유지와 변경이 용이

EX) ONTOS, OpenODB, GemStome, ObjectStore, Versant, O2

 

객체 관계 DBMS

- 1990년대 후반 개발

- 관계 DBMS에 새로운 데이터 타입과 데이터베이스에 대한 연산들을 추가할수있는 기능 제공

- 관계 DBMS와 객체 지향 DBMS의 단점 해결, 그러나 DBMS의 복잡도가 증가하였다

 

새로운 데이터베이스 응용

- CAD 데이터베이스, 소프트웨어 공학 데이터베이스(재사용이 가능한 소프트웨어들의 라이브러리), genome 데이터베이스, 데이터 웨어하우스, 데이터 마이닝, OLAP, 멀티미디어 데이터베이스 등이 있음

- 웹에 저장되어있는 방대한 웹 문서들을 위한 웹 데이터베이스의 중요성 증가

- 반구조적 데이터와 XML 지원하는 데이터베이스, 공간 데이터베이스, 스트림 데이터베이스, 모바일 데이터베이스 등등

-> 점차 DBMS의 크기가 점점 줄어들고 있음

 

1.4 DBMS 언어

데이터 정의어(DDL: Data Definition Language)

- 사용자는 데이터 정의어를 사용하여 데이터베이스 스키마를 정의

- 데이터 정의어로 명시된 문장이 입력되면 DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그 또는 데이터 사전에 저장

 

데이터 정의어의 기본적인 기능

- 데이터 모델에서 지원하는 데이터 구조를 생성

 EX) SQL에서 CREATE TABLE

- 데이터 구조의 변경

 EX)  SQL에서 ALTER TABLE

- 데이터 구조의 삭제

 EX) SQL에서 DROP TABLE

- 데이터 접근을 위해 특정 애트리뷰트 위에 인덱스를 정의

 EX)  SQL에서 CREATE INDEX

 

DDL 구현 -> 데이터 베이스 스키마 정보가 들어가 있는 시스템 카탈로그 (메타데이터, 데이터 딕셔너리)

튜플을 Insert하여 데이터, 스키마 정보를 받아 참조를 하여 검사

검색을 자주 쓰므로 중요함

 

 

데이터 조작어(DML: Data Manipulation Language)
- 사용자는 데이터 조작어를 사용하여 데이터베이스 내의 원하는 데이터를 검색하고, 수정하고, 삽입하고, 삭제
- 절차적 언어(procedural language)와 비절차적 언어(non-procedural language) 로 나뉨
- 관계 DBMS에서 사용되는 SQL은 대표적인 비절차적 언어
- 대부분의 데이터 조작어는 SUM, COUNT, AVG와 같은 내장 함수들을 갖고 있음
- 데이터 조작어는 단말기에서 대화식으로 입력되어 수행되거나 C++, Java의 고급 프로그래밍 언어로 작성된 프로그램에 내포되어 사용됨

EX) Embedded SQL with java(프로그래밍 언어, 호스트 언어에 SQL 임베딩)

 

데이터 조작어의 기본적인 기능

     데이터의 검색

  , SQL에서 SELECT

  데이터의 수정

  , SQL에서 UPDATE

  데이터의 삭제

  , SQL에서 DELETE

  데이터의 삽입

  , SQL에서 INSERT

 

데이터 제어어(DCL : Data Control Language)

- 사용자는 데이터 제어어를 사용하여 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소

- EXEC : 트랜잭션 명시?

- GRANT : 허용하다

 

 

1.5 DBMS 사용자

데이터 베이스 관리자(DBA)

데이터베이스 관리자는 조직의 여러 부분의 상이한 요구를 만족시키기 위해서 일관성 있는 데이터베이스 스키마를 생성하고 유지하는 사람

=>

- 엑서스 권한 부여

- 소프트웨어 및 하드웨어 리소스 확보

- 스키마의 생성과 변경

- 화일의 데이터를 데이터베이스에 적재

- 무결성 제약조건 명시

- 저장 구조와 접근 방법(물리적 스키마) 정의

- 백업과 회복

- 표준화 시행

 

응용프로그래머(Application programmer)

- 고급 프로그래밍 언어로 응용 프로그램 개발, 데이터베이스 접근하는 부분은 데이터 조작어 사용

=> 기작션 트랜젝션 : 응용프로그램은 최종 사용자들이 반복해서 수행하므로 이러한 응용프로그램을 일컫는 

 

최종 사용자(End User)

-  캐쥬얼 사용자 : 다시 데이터베이스 질의어를 사용하여 매번 다른 정보를 찾는 사용자

-  초보 사용자 : 기작성 트랜젝션을 반복해서 수행하는 사용자

 

데이터베이스 설계자(Database Designer)

- 데이터베이스의 일관성 유지, 정규화

- 인덱스 정의

- 데이터베이스 설계에 애한 문서화 작업 수행

 

오퍼레이터(Operator)

- 컴퓨터 시스템과 전산실 관리

 

1.7 데이터베이스 시스템 아키텍처

 

데이터 정의어 컴파일러(DDL compiler) 모듈
- 데이터 정의어를 사용하여 테이블 생성을 요청하면 테이블을 파일 형태로 데이터베이스에 만들고, 이 테이블에 대한 명세를 시스템 카탈로그에 저장

 

질의 처리기(query processor) 모듈
- 데이터 조작어를 수행하는 최적의 방법을 찾는 모듈을 통해서 기계어 코드로 번역
- 질의컴파일러와 질의최적화기
 
-런타임 데이터베이스 관리기/처리기(run-time database manager) 모듈
-디스크에 저장된 데이터베이스를 접근

 

트랜잭션 관리(transaction management) 모듈
-동시성 제어(concurrency control) 모듈
-회복(recovery) 모듈
 

데이터베이스 API(Application Program Interface)

- API란 공통적으로 사용되는 데이터베이스 접근 유형을 위한 라이브러리 함수들의 모임

ODBC

- ODBC(Open Database Connectivity)는 마이크로소프트 사가 주도적으로 개발한 데이터베이스 API
- ODBC를 지원하는 DBMS 간에는 서로 상대방의 데이터베이스를 접근할 수 있음

JDBC

- JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
- JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공
- 썬 마이크로시스템즈는 1997219JDBCJDK 1.1의 일부로 출시
- 버전 3.1을 기점으로 JDBC는 자바 커뮤니티 프로세스를 통해 개발되고 있음
- JDBC 클래스는 자바 패키지 java.sqljavax.sql에 포함되어 있음.

 

중앙 집중식 데이터베이스 시스템(Centralized database system)

- 데이터베이스 시스템이 하나의 컴퓨터 시스템에서 운영됨(다른 컴퓨터 시스템과 상호작용 x)

분산 데이터베이스 시스템(distributed database system)

- 네트워크로 연결된 여러 사이트에 데이터베이스 자체가 분산되어 있으며, 데이터베이스 시스템도 여러 컴퓨터 시스템에서 운영됨
- 사용자는 다른 사이트에 저장된 데이터베이스도 접근할 수 있음

클라이언트-서버 데이터베이스 시스템(client-server database system)

- PC 또는 워크스테이션처럼 자체 컴퓨팅 능력을 가진 클라이언트를 통해 데이터베이스 서버를 접근
- 데이터베이스가 하나의 데이터베이스 서버에 저장되어 있음
- 데이터베이스 시스템의 기능이 서버와 클라이언트에 분산됨
- 서버는 데이터베이스를 저장하고 DBMS를 운영하면서 여러 클라이언트에서 온 질의를 최적화하고, 권한 검사를 수행하고, 동시성 제어와 회복 기능을 수행하고, 데이터베이스의 무결성을 유지하고, 데이터베이스 접근을 관리
- 클라이언트는 사용자 인터페이스를 관리하고 응용들을 수행

2층 모델(2-tier model)

- 클라이언트와 데이터베이스
- 서버가 직접 연결됨
3층 모델(3-tier model)
- 클라이언트와 데이터베이스
- 서버 사이에 응용 서버가 추가됨

 

Business logic

- 보통 시스템의 핵심 서비스 모듈화 해놓은
- 여러 UI 나 어플리케이션 에서 공통으로 사용할 수 있도록 설계되어 있음
- 주로 DB 관련 메소드 및 처리 프로세스 혹은 타 시스템 과의 인터페이스를 담고 있음