본문 바로가기
DB

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

by kingyejin 2025. 3. 21.

정보 =X= 데이터
-> 데이터는 프로그램과 질의에 의해 정보로 변환

 


데이터베이스 스키마 (=내포, intension)
: 전체적인 데이터베이스 구조, 자주 변경되지 않으며 데이터베이스의 모든 가능한 상태를 미리 정의
ex) DEPARTMENT(DEPTNO, DEPTNAME, FLOOR)

데이터베이스 상태 (=외연, extension)
: 특정 시점의 데이터베이스의 내용, 시간이 지남에 따라 계속 바뀜
ex) 1 | 영업 | 8

      2 | 기획 | 10


[데이터베이스 시스템(DBS)의 구성요소]

DB(시스템 카탈로그 + 저장된 데이터베이스) + DBMS (소프트웨어) + 사용자 + 하드웨어

 

DBS(데이터베이스 시스템)의 구성요소
1. 데이터베이스(DB)

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

-시스템 카탈로그(or 데이터 사전) & 저장된 데이터베이스로 구분 가능

*시스템 카탈로그 = 저장된 데이터베이스의 스키마 정보 유지
-> 데이터 정의어의 결과로 구성되는 기본 테이블, 뷰, 인덱스, 패키지, 접근 권한 등의 데이터베이스 구조 및 통계 정보를 저장한다.

ex) SYSTABLES : 기본 테이블 및 뷰 테이블의 정보를 저장하는 테이블
      SYSCOLUMNS : 모든 테이블에 대한 정보를 열(속성) 중심으로 저장하는 테이블
      SYSVIEW : 뷰에 대한 정보를 저장하는 테이블
      SYSTABAUTH : 테이블에 설정된 권한 사항들을 저장하는 테이블
      SYSCOLAUTH : 각 속성에 설정된 권한 사항들을 저장하는 테이블


2. 데이터베이스 관리 시스템 (DBMS: Database Management System)
= 사용자가 새로운 데이터베이스를 생성하고, 구조를 명시하고, 질의어를 지원하고, 리포트를 생성하는 등의 작업을 수행하는 소프트웨어 (= 사용자와 DB를 연결시켜주는 소프트웨어)
- 시스템의 고장이나 권한이 없는 사용자로부터 데이터를 안전하게 보호하며, 동시에 여러 사용자가 데이터베이스를 접근하는 것을 제어하는 소프트웨어 패키지
- 데이터베이스 언어(ex) SQL)라고 부르는 특별한 프로그래밍 언어를 한 개 이상 제공


3. 사용자

= 데이터베이스 사용자는 여러 부류로 나눌 수 있음


4. 하드웨어
= 데이터베이스는 디스크와 같은 보조 기억 장치(HDD,SDD)에 저장
- DBMS에서 원하는 정보를 찾기 위해서는 디스크의 블록들을 주기억 장치(RAM)로 읽어들여야 하며, 계산이나 비교 연산들을 수행하기 위해 중앙 처리 장치(CPU)가 사용

* DBMS 자체도 주기억 장치에 적재되어 실행되어야 함

 


주기억장치 (=RAM) , 보조기억장치 (=HDD,SSD)


화일 시스템 
= DBMS가 등장하기 전, 1970년 대부터 사용됨
- 기본적인 구성요소는 순차적인 레코드들로, 한 레코드는 연관된 필드들의 모임

단점
- 데이터가 많은 화일에 중복해서 저장됨 -> 수정하려면 모두 수정해줘야 함
- 화일을 접근하는 방식이 응용 프로그램 내에 상세하게 표현되므로 데이터에 대한 응용 프로그램의 의존도가 높음


(<->DBMS: 프로그램-데이터 독립성(program-data independence))

프로그램-데이터 독립성 X(화일 시스템)/ O(DBMS)


계층 HDBMS (IMS) -> 네트워크 NDBMS (IDS) -> 관계 RDBMS (오라클, MS SQL Server, Sybase, DB2, Informix) -> 객체 지향 OODBMS (ONTOS, OpenODB, GemStone, ObjectStore, Versant, O2) -> 객체 관계 ORDBMS (오라클, Informix Universal Server)

(계네관객)

데이터 모델
= 데이터베이스의 구조를 기술하는데 사용되는 개념들의 집합인 구조 (데이터 타입과 관계)
ex) 이 구조 위에서 동작하는 연산자들, 무결성 제약조건들

- 사용자에게 내부 저장 방식의 세세한 사항은 숨기면서 데이터에 대한 직관적인 뷰를 제공하는 동시에 이들 간의 사상을 제공

데이터 모델의 종류
1. 고수준 또는 개념적 데이터 모델(conceptual data model)
= 사람이 인식하는 것과 유사하게 데이터베이스의 전체적인 논리적 구조를 명시
ex) 엔티티-관계(ER: Entity-Relationship) 데이터 모델, 객체 지향 데이터 모델

2. 표현(구현) 데이터 모델(representation(implementation) data model)
= 최종 사용자가 이해하는 개념이면서 컴퓨터 내에서 데이터가 조직되는 방식과 멀리 떨어져 있지는 않음
ex) 계층 데이터 모델(hierarchical data model), 네트워크 데이터 모델(network data model), 관계 데이터 모델(relational data model)

3. 저수준 또는 물리적인 데이터 모델(physical data model)
= 데이터베이스에 데이터가 어떻게 저장되는가를 기술
ex) Unifying, ISAM, VSAM 등

계층 DBMS
=  트리 구조를 기반으로 하는 계층 데이터 모델을 사용한 DBMS
- 1960년대 후반에 최초의 계층 DBMS가 등장(예: IBM사의 IMS)
- 계층 데이터 모델은 네트워크 데이터 모델의 특별한 사례

But, 부모 - 자식이라는 계층 구조 때문에 many-to-many 관계 처리가 어려움



장점
- 어떤 유형의 응용에 대해서는 빠른 속도와 높은 효율성을 제공
=> 같은 조직체에서도 응용이 여러 개 있을텐데 그중 특정 응용에서만 속도가 빠르고 나머지에서는 속도가 느리다

단점
- 어떻게 데이터를 접근하는가를 미리 응용 프로그램에 정의해야 함  = > 데이터 프로그램의 독립성이 낮음 
- 데이터베이스가 생성될 때 각각의 관계를 명시적으로 정의해야 함
ex) 사원2를 찾아라 -> 위에서부터 쭉 가서 찾으려면 오래 걸림
       조상, 위에 껄 주고 밑에껄 찾아라 -> 금방 찾음

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

네트워크 DBMS
= 레코드들이 노드로, 레코드들 사이의 관계가 간선으로 표현되는 그래프를 기반으로 하는 네트워크 데이터 모델을 사용
- 1960년대 초에 Charles Bachman이 하니웰(Honeywell) 사에서 최초의 네트워크 DBMS인 IDS를 개발
- 네트워크 DBMS에서도 레코드들이 링크로 연결되어 있으므로 레코드 구조를 변경하기 어려움

=> 부모라는 개념이 없어서 many에 제한이 없다 -> many-to-many가 될 수 있다
 But, 링크로 연결되어 있어 레코드 구조 변경이 어렵다

관계 DBMS
- 1970년에 E.F. Codd가 IBM 연구소에서 관계 데이터 모델을 제안
- 미국 IBM 연구소에서 진행된 System R과 캘리포니아 버클리대에서 진행된 Ingres 프로젝트

=> 구조를 바꾸기 어렵다는 문제점을 해결했다
원래는 나열해줬어야 했는데 관계 DBMS는 사용자가 단지 난 무슨 데이터를 원해 what?만 명시해주면 어떻게 찾아가는 (How?) 관계 DBMS가 알아서 해줌



장점
- 모델이 간단하여 이해하기 쉬움
- 사용자는 자신이 원하는 것(what)만 명시하고, 데이터가 어디에 있는지, 어떻게 접근해야 하는지는 DBMS가 결정
ex) 오라클, MS SQL Server, Sybase, DB2, Informix

객체 지향 DBMS (객제 지향 프로그래밍 + 네트워크 DBMS)
= 객체 지향 프로그래밍 패러다임을 기반으로 하는 데이터 모델
- 1980년대 후반 들어 새로운 데이터 모델인 객체 지향 데이터 모델이 등장

장점
- 데이터와 프로그램을 그룹화하고, 복잡한 객체들을 이해하기 쉬우며 유지와 변경이 용이함
=> 데이터 + 프로그램이 하나의 클래스에 들어감 -> 복잡한 객체들을 모델링할 수 있음

예: ONTOS, OpenODB, GemStone, ObjectStore, Versant, O2


객체 관계 DBMS (객체 지향 DBMS + 관계 DBMS)
= 1990년대 후반에 관계 DBMS에 객체 지향 개념을 통합한 객체 관계 데이터 모델이 제안됨
예: 오라클, Informix Universal Server

OODBMS = 왼쪽만 / ORDBMS = 둘 다


객체 관계 DBMS만으로는 처리하기 힘들어서 별도의 전용 DBMS가 필요한 영역들도 존재함 
ex) CAD 데이터베이스, 소프트웨어 공학 데이터베이스(재사용이 가능한 소프트웨어들의 라이브러리), 게놈 데이터베이스, 데이터 웨어하우스, 데이터 마이닝, OLAP, 멀티미디어 데이터베이스, 웹 데이터베이스 등


1) OLTP(On-Line Transactional Processing)
= 기존의 것 -> 처리하는 단위가 transaction

*  트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻, 간단하게 말해서 아래의 질의어(SQL)를 이용하여 데이터베이스를 접근 하는 것을 의미한다.

2) OLAP(On-Line Analytical Processing)
= 새로 등장한 것 -> 처리가 아니라 분석함 (데이터가 있으면 이걸로 통계를 내는 것을 DBMS에서 하는 것)
*기존에 OLTP만 했으면 OLAP까지 하는 걸로 시스템이 확장되고 있음 -> OLAP는 많은 데이터를 리소스에 쓰기 때문에 상대적으로 한 시스템에서 하면 OLTP의 성능이 떨어짐


3) Operational DB vs Data Warehouse
= 운영 데이터에서 나온 것을 분석하기 위해서는 operational DB에 있는 데이터를 쌓아둔다. 그게 바로 Data Warehouse 즉 창고이다. 해당 창고에 있는 데이터로 Operational DB에서 analytatic process를 수행함


4) HTAP(Hybrid Transactional-Analytical Processing)
= 실시간으로 분석할 수 있게 하자 해서 나온 것 -> 하나의 시스템에서 transaction도 하고 analytical도 하는 것


DDL (데이터 정의어), DML (데이터 조작어), DCL(데이터 제어어)

데이터 정의어(DDL: Data Definition Language) [= 테이블 구조 변경]
= 사용자는 데이터 정의어를 사용하여 데이터베이스 스키마를 정의 
- 데이터 정의어로 명시된 문장이 입력되면 DBMS는 사용자가 정의한 스키마에 대한 명세를 시스템 카탈로그(or 데이터 사전)에 저장

데이터 정의어의 기본적인 기능
- 데이터 모델에서 지원하는 데이터 구조를 생성
ex) SQL에서 CREATE TABLE
- 데이터 구조의 변경
ex) SQL에서 ALTER TABLE
- 데이터 구조의 삭제
ex) SQL에서 DROP TABLE
- 데이터 접근을 위해 특정 애트리뷰트 위에 인덱스를 정의
ex) SQL에서 CREATE INDEX
데이터 조작어(DML: Data Manipulation Language) [= 내용 변경]
= 사용자는 데이터 조작어를 사용하여 데이터베이스 내의 원하는 데이터를 검색하고, 수정하고, 삽입하고, 삭제 
- 절차적 언어(procedural language)비절차적 언어( = 선언적 언어(declarative language))
*사용자는 what을 명시, how는 언급 X = 절차는 말하지 않고 원하는 것만 말함

- 관계 DBMS에서 사용되는 SQL은 대표적인 비절차적 언어
- 대부분의 데이터 조작어는 SUM, COUNT, AVG와 같은 내장 함수들을 갖고 있음
- 데이터 조작어는 단말기에서 대화식으로 입력되어 수행되거나 C, 코볼 등의 고급 프로그래밍 언어로 작성된 프로그램에 내포되어 사용됨

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

데이터의 검색

 ex) SQL에서 SELECT

데이터의 수정

 ex) SQL에서 UPDATE

데이터의 삭제

 ex) SQL에서 DELETE

데이터의 삽입

 ex) SQL에서 INSERT

데이터 제어어(DCL: Data Control Language)
사용자는 데이터 제어어를 사용하여 데이터베이스 트랜잭션을 명시하고 권한을 부여하거나 취소

- 데이터의 보안, 무결성, 데이터 회복, 병행 수행 제어 등을 정의하는 데 사용하는 언어

- 데이터베이스 관리자가 데이터 관리를 목적으로 사용함

ex) COMMIT, ROLLBACK, GRANT, REVOKE

 


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

응용 프로그래머
= 데이터베이스 위에서 특정 응용(예, 고객 관리, 인사 관리, 재고 관리 등)이나 인터페이스를 구현하는 사람
- 고급 프로그래밍 언어인 C, 코볼 등으로 응용 프로그램을 개발하며 DB를 접근하는 부분은 내포된 데이터 조작어를 사용
- 이들이 작성한 프로그램은 최종 사용자들이 반복해서 수행하므로 기작성 트랜잭션(canned transaction, 먹기 좋게 따면 바로 먹을 수 있는 것 = 바로 사용하기 좋은 프로그램)이라 부름

최종 사용자(end user)

= 질의하거나 갱신하거나 보고서를 생성하기 위해서 데이터베이스를 사용하는 사람

- 캐주얼 사용자(데이터베이스 질의어를 사용하여 매번 다른 정보를 찾음)초보 사용자(기작성 트랜잭션을 주로 반복해서 수행)로 구분

데이터베이스 설계자(database designer)

= ERWin 등의 CASE 도구들을 이용해서 데이터베이스 설계를 담당

- 데이터베이스의 일관성을 유지하기 위해서 정규화를 수행

오퍼레이터
= DBMS가 운영되고 있는 컴퓨터 시스템과 전산실을 관리하는 사람


ANSI/SPARC 아키텍처
=  현재의 대부분의 상용 DBMS 구현에서 사용되는 일반적인 아키텍처는 1978년에 제안된 ANSI/SPARC 아키텍처
- ANSI/SPARC 아키텍처의 3단계물리적, 개념적, 외부 단계로 이루어짐

- 외부 단계(external level): 각 사용자의 뷰
ex) EMP_NAME, ASSIGNMENT (개념 단계의 애트리뷰트 중 일부 선택)
 -> 여러 부류의 사용자를 위해 동일한 개념 단계로부터 다수의 서로 다른 뷰가 제공될 수 있음


- 개념 단계(conceptual level): 사용자 공동체의 뷰
ex) EMP, PROJ, WORKS

-> 조직체의 정보 모델로서, 물리적인 구현은 고려하지 않으면서 조직체 전체에 관한 스키마를 포함
-> 데이터베이스마다 오직 한 개의 개념 스키마가 존재 
-> DB에 어떤 데이터가 저장되어 있으며, 데이터 간에 어떤 관계가 존재하고, 어떤 무결성 제약조건들이 명시되어 있는가를 기술함

- 내부 단계(internal level): 물리적 또는 저장 뷰
ex) EMP(ENO), PROJ(PNO), WORK(ENO,PNO) 애트리뷰트에 인덱스가 정의되어 있음
-> 인덱스, 해싱 등과 같은 접근 경로, 데이터 압축 등을 기술함

-> DB의 개념 스키마에는 영향을 미치지 않으면서 성능을 향상시키기 위해 내부 스키마를 변경하는 것이 바람직
-> 내부 단계 아래는 물리적 단계 (DBMS의 지시에 따라 운영 체제가 관리함)

 

세 가지 유형의 스키마 간 사상
외부/개념 사상(external/conceptual mapping)
= 외부 단계의 뷰를 사용해서 입력된 사용자의 질의를 개념 단계의 스키마를 사용한 질의로 변환

개념/내부 사상(conceptual/internal mapping)
= 이를 다시 내부 단계의 스키마로 변환하여 디스크의 데이터베이스를 접근

데이터 독립성

= 상위 단계의 스키마 정의에 영향을 주지 않으면서 어떤 단계의 스키마 정의를 변경할 수 있음을 의미
1) 논리적인 데이터 독립성(logical data independence) : 외부 개념 사상에 적용
-> 개념 스키마의 변화로부터 기존의 외부 스키마가 영향을 받지 않음을 의미


2) 물리적인 데이터 독립성(physical data independence) : 내부 개념 사상에 적용
-> 내부 스키마의 변화(화일의 저장 구조를 바꾸거나 인덱스를 생성 및 삭제)가 개념적 스키마에 영향을 미치지 않으며, 따라서 외부 스키마(또는 응용 프로그램)에도 영향을 미치지 않음을 의미


 

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

질의 처리기(query processor) 모듈
= 데이터 조작어를 수행하는 최적의 방법을 찾는 모듈을 통해서 기계어 코드로 번역

런타임 데이터베이스 관리기(run-time database manager) 모듈
= 디스크에 저장된 데이터베이스를 접근

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

데이터베이스 API(Application Program Interface)
- ODBC(Open Database Connectivity)는 마이크로소프트 사가 주도적으로 개발한 데이터베이스 API
- ODBC를 지원하는 DBMS 간에는 서로 상대방의 데이터베이스를 접근할 수 있음
*JDBC java를 사용하여 ODBC를 사용하고 싶다할 때는 JDBC로 연결하여 사용할 수 있음


오라클/엑셀/informix는 ODBC 지원해줌 = 별도로 ODBC API를 지원해주는 라이브러리 드라이버
ex) MS SQL Server를 위한 ODBC API 라이브러리
ex) 오라클 데이터베이스를 위한 ODBC API 라이브러리

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

= 데이터베이스 시스템이 하나의 컴퓨터 시스템에서 운영됨


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

= 네트워크로 연결된 여러 사이트에 데이터베이스 자체가 분산되어 있으며, 데이터베이스 시스템도 여러 컴퓨터 시스템에서 운영됨

- 사용자는 다른 사이트에 저장된 데이터베이스도 접근할 수 있음


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

= PC 또는 워크스테이션처럼 자체 컴퓨팅 능력을 가진 클라이언트를 통해 데이터베이스 서버를 접근

- 데이터베이스가 하나의 데이터베이스 서버에 저장되어 있음

- 데이터베이스 시스템의 기능이 서버와 클라이언트에 분산됨

-> 서버: 데이터베이스를 저장하고 DBMS를 운영하면서 여러 클라이언트에서 온 질의를 최적화하고, 권한 검사를 수행하고, 동시성 제어와 회복 기능을 수행하고, 데이터베이스의 무결성을 유지하고, 데이터베이스 접근을 관리

-> 클라이언트: 사용자 인터페이스를 관리하고 응용들을 수행

1) 2층 모델(2-tier model)

= 클라이언트와 데이터베이스 서버가 직접 연결됨

2) 3층 모델(3-tier model)

= 클라이언트와 데이터베이스 서버 사이에 응용 서버가 추가됨

 

장점

- 데이터베이스를 보다 넓은 지역에서 접근할 수 있음

- 다양한 컴퓨터 시스템을 사용할 수 있음

단점

- 보안이 다소 취약할 수 있음