교재 : 컴퓨터 과학 총론 (13th Edition)
(배운 내용을 책으로 복습하며 작성한 글입니다. )
1. 데이터베이스 기초
데이터베이스(database)라는 용어는 항목들 사이에 여러 개의 내부 링크가 있어서 여러 관점에서 접근할 수 있다는 점에서 다차원적인 데이터 집합을 지칭한다. 데이터베이스는 정보를 한 가지 관점으로만 제시한다는 점에서 일차원적인 저장 시스템이라고 할 수 있고 때로 단층 파일(flat file)이라 불리는 전통적인 파일 시스템과 대비된다.
1) 데이터베이스 시스템의 중요성
- 데이터베이스의 등장
- 어떤 기관이 필요로 하는 정보의 많은 부분은 기관 내의 여러 곳에 복제된다.
- 서로 연관된 항목들이 별도의 시스템에 저장된다.
- 데이터베이스 시스템은 특정 기관에서 저장하고 유지하는 정보를 통합하는 수단으로 등장하였다.
- 데이터테이브 연구는 데이터베이스상의 정보를 의사결정 과정에 이용할 수 있도록 해주는 기법의 개발에 초점을 맞추게 되었다.
- 오늘날 데이터마이닝과 결합된 데이터베이스 기술은 중요한 경영 도구 중 하나이다.
- 데이터베이스 시스템은 많은 유명 웹사이트들을 지원하는 기초 기술로 이용된다.
2) 스키마의 역할
- 스키마 (schema) : 데이터베이스 소프트웨어가 데이터베이스를 유지하기 위해 사용하는 전체 데이터베이스 구조에 대해 기술한 것
- 서브스키마(subschema) : 특정 사용자가 필요로 하는 데이터베이스 부분에 한정된 기술
- 사용자별로 데이터베이스 안의 정보에 대한 다른 접근 권한을 제공하기 위해, 데이터베이스 시스템은 종종 스키마와 서브스키마를 이용한다.
3) 데이터베이스 관리 시스템
- 전형적인 데이터베이스 응용 시스템은 여러 소프트웨어 계층을 포함하는데, 이들은 응용 계층과 데이터베이스 관리 계층이라는 두 개의 주요 계층으로 분류될 수 있다.
- 응용 소프트웨어는 데이터베이스의 사용자와의 통신을 처리한다.
- 응용 계층은 인터넷 도처에 존재하는 클라이언트들과 이러한 클라이언트들로부터의 요청을 처리하기 위해 데이터베이스를 사용하는 한 개의 서버로 이루어진다.
- 응용 소프트웨어는 데이터베이스를 직접조작하지 않는다. 데이터베이스에 대한 실제 조작은 데이터베이스 관리 시스템(database management system ; DBMS) 에 의해 이루어진다.
- 응용 계층이 사용자가 어떤 행위를 요청하고 있는지 결정한 다음, 결과를 달성하기 위한 추상적 도구로 DBMS 를 사용한다.
- 응용 소프트웨어와 DBMS로 이분화함으로써 생기는 장점
- 소프트웨어 설계를 단순화시키는 데 크게 도움이 되는 추상적도구의 구축과 사용이 가능해진다.
- 데이터베이스에 대한 접근제어가 가능해진다.
- 데이터독립성(data independence)를 달성할 수 있다.
4) 데이터베이스 모델
- 데이버베이스 모델(database model) : 데이터베이스의 개념적 관점
- 데이터베이스 관리 시스템은 데이터베이스의 내적 구조의 복잡성을 숨김으로써 데이터베이스의 사용자가 데이터베이스에 저장된 정보가 보다 유용한 형식으로 배열되어 있는 것으로 간주할 수 있다.
- DBMS는 데이터베이스에 대한 개념적 관점에서 표현된 명령들을 실제 데이터 저장 시스템에서 요구하는 행위로 변환하는 루틴들을 포함하고 있다.
- DBMS가 포함하는 루틴들은 응용 소프트웨어가 데이터베이스에 접근하기 위해 사용하는 추상적 도구를 형성한다.
2. 관계형 모델
1) 관계형 모델의 설계와 관련된 쟁점사항
- 관계형 데이터베이스 모델 : 데이터를 사각형 테이블에 저장되어 있는 것으로 기술
- 관계(relation) : 테이블
- 튜플(tuple) : 관계 안의 한 행
- 속성 (attribute) : 관계에서 열들
- 관계형 데이터베이스를 설계할 때 데이터베이스를 구성하는 관계들을 설계하는 단계가 필요하다.
- 위 단계에서 발생할 있는 문제
- 중복으로 인한 비효율성
- 한 개의 관계 안에 둘 이상의 개념을 조합
- 무손실 분해 (lossless decomposition) : 하나의 관계를 여러 개의 작은 관계로 분해할 때 정보의 손실이 발생하지 않음
2) 관계 연산
- SELECT 연산 : 관계에서 행 추출
- PROJECT 연산 : 관계에서 열 추출
- JOIN 연산 : 여러 관계를 조합해 한 개의 관계를 만듦
3) SQL
- SQL(Structured Query Language ; 구조적 질의 언어) : 대부분의 관계형 데이터베이스 질의 시스템에서 중추적인 역할을 한다.
- SQL 질의는 선언형 문장이다. (수행되어야 할 활동을 나열하는 것이 아니라 어떤 정보를 원하는지에 대한 기술이다.)
- 각 SQL 질의 문장은 select 절, from 절, where 절 등 세 개의 절을 절을 포함할 수 있다.
- SQL에는 질의 수행 외에도 관계의 구조 정의, 관계의 생성, 관계의 내용 수정 등을 위한 문장들을 포함한다.
3. 객체지향 데이터베이스
- 객체지향 데이터베이스 (object-oriented database) : 서로 연결되는 객체로 구성된다.
- 객체지향 데이터베이스에서 객체들 사이의 연결은 대개 DBMS에 의해 유지되며, 따라서 응용 소프트웨어를 작성하는 프로그래머는 이러한 연결들이 어떻게 구현되는지에 대한 세부사항을 고려할 필요는 없다.
- 객체지향 DBMS는 자신에게 맡겨질 객체들을 위한 영구 저장공간을 제공한다.
- 객체지향 데이터베이스에 추가되는 객체들은 지속성(persistent)을 가진다. ; 프로그램이 종료된 후에도 객체들이 저장되어 있다.
- 객체지향 방식의 경우 전체 시스템을 동일한 패러다임에서 설계할 수 있다.
- 객체지향 방식은 멀티미디어 데이터베이스 구축에 보다 편리하다.
- 단순한 데이터가 아닌 지능적 객체를 저장할 수 있다. ; 객체는 메서드를 포함할 수 있다.
4. 데이터베이스 무결성 유지
DBMS의 주된 역할 중 하나는 어떤 이유로 완료되지 못한 작업이나 고의성은 없지만 데이터베이스에 부정확한 정보를 발생시킬 수 있는 작업들로 인한 문제에 대비함으로써 데이터베이스의 무결성을 유지하는 것이다.
1) 커밋/롤백 프로토콜
- 커밋 시점 (commit point) : 트랙진션 안의 모든 단계들이 로그에 기록되는 시점
- 롤백(roll back) : 로그는 트랙잭션에 의해 실제 수행된 행동들을 되물리는 데(==롤백) 사용될 수 있다.
- 과중한 트랙잭션 부하가 걸리는 대규모 데이터베이스의 경우, 임의의 시점에서 잡은 데이터베이스의 상태는 어떤 트랜잭션이 진행되는 도중일 가능성이 높다.
- 데이터베이스가 일관성을 잃은 상태에서 트랜잭션 실행을 위한 요청이나 장비 오동작이 발생할 가능성이 높다.
- DBMS의 목표는 장비 오동작 문제가 데이터베이스를 일관성을 잃은 상태로 고착시키지 않도록 하는 것이다.
- 이를 위해 비휘발성 저장장치에 각 트랜잭션의 활동에 대한 레코드를 포함하는 로그(log)를 유지하는 방법을 사용한다.
- 로그는 각 트랜잭션의 행위에 대한 영구적인 레코드르 포함한다.
- 트랜잭션이 커밋 시점에 이르기 전에 문제가 발생할 경우, DBMS는 완료될 수 없는 부분 실행 트랜잭션을 갖게 될 것이다.
- DBMS는 트랜잭션의 롤백에 로그를 사용할 수 있으며, 미완료 트랜잭션으로 인한 데이터베이스상의 오류를 피할 수 있다.
- 연쇄 롤백 (cascading rollback) : 한 트랜잭션의 롤백이 다른 트랜잭션에 이미 사용된 데이터베이스 항목에 영향을 미치는 경우, 추가적인 트랜잭션도 롤백되어야 하는데, 이로 인해 파생되는 결과
2) 로킹
- 트랜잭션이 진행되는 동안 다른 트랜잭션의 실행으로 인해 발생하는 의도하지 않은 상호작용의 예
- 합산 오류 문제 (incorrect summary problem)
- 갱신 유실 문제 (lost update problem)
- 위의 문제를 피하기 위해 DBMS는 트랜직션을 한 번에 하나씩 완전히 실행되도록 하는 방법을 사용할 수 있다.
- 대부분의 대규모 데이터베이스 관리 시스템은 시분할 운영체제가 프로세스를 교차 실행하는 것과 동일한 방식으로 트랜잭션 사이의 시분할을 조정하기 위한 일정관리자(scheduler)를 포함한다.
- 로킹 프로토콜 (locking protocol) : 어떤 트랜잭션에서 현재 사용하고 있는 데이터베이스 안의 항목을 표시한다.
- 일정관리자들을 로킹 프로토콜을 사용한다.
- 공유 로크(shared lock)와 배타적 로크(exclusive lock)라는 두 가지 유형이 주로 사용된다.
- 트랜잭션이 데이터 항목을 요구하지 않는다면 공유 접근을 요구하는 것이며, 이는 다른 트랜잭션이 그 데이터항목을 읽는 것을 허용한다.
- 트랜잭션이 데이터 항목을 변경할 것이라면 반드시 배타적 접근을 이용해야 하며, 다른 트랜잭션은 해당 데이터 항목에 접근하지 못한다.
- 로크가 걸리지 않았거나 공유 로크가 걸려있는 경우, 트랜잭션의 접근 요청은 허용되고 그 항목에 공유 로크가 표시된다.
- 트랜잭션의 접근 요청이 거부될 경우를 대비하기 위해 요청된 항목을 이용할 수 있을 때까지 트랜잭션을 기다리도록 하는 알고리즘이 있다.
- 위 알고리즘은 교착상태로 이어질 수 있기 때문에 어떤 데이터베이스 관리 시스템은 오래된 트랜잭션에 우선권을 부여한다.
- 부상-대기 프로토콜 (wound-wait protocol) : 오래된 트랜잭션이 덜 오래된 트랜잭션에 부상을 입히고 덜 오래된 트랜잭션이 오래된 트랜잭션을 기다려준다.
5. 전통적인 파일 구조
1) 순차파일 (sequential file)
- 파일 안의 정보가 시작부터 끝까지 하나의 긴 줄로 배열되어 있는 것처럼 차례로 접근할 수 있는 파일
- 순차파일 안의 데이터는 파일의 순차적 성질을 유지하면서 대용량 저장장치에 기록되어야 한다.
- 자기디스크의 경우 파일은 여러 섹터에 분산될 것이며, 다양한 순서로 읽을 수 있다.
- 적절한 순서를 유지하기 위해 대부분의 운영체제, 특히 파일관리자는 파일에 저장되어 있는 섹터들의 리스트를 유지한다.
- 순차파일의 끝은 일반적으로 EOF(end-of-file)로 지칭하고 이를 표시하기 위해 센티널(sentinel)이라 불리는 특별한 레코드를 파일 끝에 둘 수 있다.
- 순차파일 내의 논리적 레코드는 키 필드 값으로 식별될 수 있으며, 파일은 대개 키에 의해 정해지는 순서에 따라 레코드들이 나타나도록 배열된다.
2) 인덱스화 파일 (indexed file)
- 파일을 위한 인덱스는 파일에 저장되어 있는 키들의 리스트와 함꼐 각 키를 포함하는 레코드의 저장 위치를 나타내는 항목들을 포함한다.
- 키를 찾은 다음, 그 키에 연계된 위치에 저장되어 있는 정보를 읽어온다.
- 계층구조를 사용하여 인덱스를 구성함으로써 인덱스가 계층적 구조 또는 트리 구조를 갖게 할 수 있다.
- 위의 예시는 계층적 디렉터리 시스템이다. (디렉터리나 폴더가 인덱스의 역할을 수행하며, 각 인덱스는 그 하위의 인덱스들에 대한 연결 링크를 포함한다.)
3) 해시 파일 (hash file)
- 인덱스의 사용은 인덱스의 유지가 필요하다.
- 해싱(hashing) : 오버헤드 없이 비슷한 정도의 접근을 위한 기법
- 해시 파일 : 대용량 저장장치의 저장 구조에 해싱이 적용될 때, 결과로 만들어지는 파일
- 해시 테이블(hash table) : 주기억장치의 저장 구조에 해싱이 적용될 때, 결과로 만들어지는 구조
- 해싱도 키 값을 사용하여 레코드의 위치를 찾는데, 인덱스에서 키를 찾는 대신, 키에서 직접 해당 레코드의 위치를 찾는다.
- 데이터 저장공간은 버킷(bucket)이라 불리는 여러 개의 구역으로 분할되며, 각 버킷은 여러 개의 레코드를 저장할 수 있다.
- 레코드들은 키 값을 버킷 번호로 변환하는 알고리즘에 따라 여러 버킷들에 분산된다.
- 해시 함수 (hash function) : 키 값을 버킷 번호로 변환하는 함수
- 저장구조 안에 배치된 레코드는 먼저 레코드의 식별키에 해시 함수를 적용하여 해당 버킷을 결정한 다음 버킷의 내용을 읽어오고, 버킷의 내용 중에서 원하는 레코드를 검색하여 읽어올 수 있다.
- 효율적인 해시 시스템이 되기 위해서 레코드들은 버킷에 골고루 분산되어야 한다.
- 클러스터링 (clustering) : 균형을 이루지 못한 채 많은 수의 키가 동일한 버킷으로 해싱되는 현상
- 충돌 (collision) : 파일 구축 과정에서 두 개의 키가 같은 값으로 해싱되는 현상
- 오버플로 : 특정 버킷이 가득 차는 경우
- 클러스터링과 버킷 오버플로의 발생은 해시 파일의 성능을 저하시킨다.
- 적재율 (load factor) : 레코드 수와 파일 총 용량의 비
- 50% 이하 : 해시 파일이 우수한 성능을 보임
- 75% 이상 : 시스템의 성능이 떨어지므로 더 큰 용량을 확보하여 재구성함.
6. 데이터마이닝
- 데이터마이닝의 목적 : 사전에 알려져 있지 않은 패턴을 식별한다.
- 데이터마이닝은 잦은 갱신이 이루어지는 "온라인" 운영 데이터베이스에 대해서가 아니라 데이터웨어하우스(data warehouse)라 불리는 정적인 데이터집합에 대해 수행된다.
- 데이터마이능은 컴퓨터 분야와 통계학에서 많이 사용된다.
- 데이터마이닝의 기법
- 클래스 서술 (class description) : 어떤 데이터 항목을 특징짓는 성질을 식별하는 내용을 다룸.
- 클래스 차별화 (class discrimination) : 두 개의 그룹을 나누는 성질을 식별하는 내용을 다룸.
- 클러스터 분석 (cluster analysis) : 클래스 자체의 발견을 목적으로 함. (그룹화의 발견으로 이어질 데이터 항목들의 특성을 발견하는 것을 목적으로 함.)
- 연계성 분석 (association analysis) : 데이터 그룹 사이의 연결 링크를 찾는 것을 목적으로 함.
- 이상치 분석 (outlier analysis) : 일반 기준을 벗어난 데이터 항목들의 식별을 목적으로 함.
- 순차 패턴 분석 (sequential pattern analysis) : 시간의 경과에 따른 행위 패턴의 식별을 목적으로 함.
- 데이터마이닝의 결과는 향후 행위에 대한 예측에 사용될 수 있다.
- 데이터웨어하우스에 데이터마이닝을 가능하게 만드는 데이터큐브(data cube)의 형태로 데이터를 제시할 수 있는 기능을 갖도록 하기 위해 데이터베이스 기법이 광범위하게 사용된다.
- 데이터마이닝을 통해 유추된 결론의 정확성과 용도, 데이터마이닝 자체의 적절성 등에 관련된 다양한 윤리적 쟁점을 포함한다.
7. 데이터베이스 기술의 사회적 영향
- 기술의 발전으로 방대한 규모의 데이터를 수집하거나 관계를 파악하기 위해 서로 다른 데이터 집합을 비교하거나 병합하는 일이 쉬워졌다.
- 데이터베이스 응용은 데이터의 소유자와 데이터의 대상자 모두에 이익이 될 수 있지만, 모든 경우에서 가볍게 취급되어서는 안 될 프라이버시 손실이 존재한다.
'전공과목 정리 > 컴퓨터과학의이해' 카테고리의 다른 글
[컴퓨터과학의이해🧮] 컴퓨터 그래픽스 (10장) (2) | 2022.09.11 |
---|---|
[컴퓨터과학의이해🧮] 인공지능 (11장) (0) | 2022.09.03 |
[컴퓨터과학의이해🧮] 데이터 추상화 (8장) (0) | 2022.08.31 |
[컴퓨터과학의이해🧮] 소프트웨어 공학 (7장) (0) | 2022.08.30 |
[컴퓨터과학의이해🧮] 프로그래밍 언어 (6장) (0) | 2022.08.30 |