본문 바로가기
학교/데이터베이스시스템응용

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

by 움바둠바 2024. 9. 27.
728x90

DBMS란 무엇인가

database를 저장하고, 다루기 위해 디자인된 소프트웨어 패키지

 

File vs DBMS

database를 그냥 file로서 관리하면 어떻게 될까..? (== DBMS가 굳이 필요한 이유는?)

1. 메모리 제한과 주소공간 문제

    메인 메모리에 database를 다 올릴수는 없음 (보통 database는 사이즈가 매우매우 크니까..)

    => 즉 그냥 일반 파일시스템으로 관리하면, 매번 I/O 인터럽트를 처리해야 하는데,, 이건 오버헤드가 너무 크다!

    그리고 32비트 시스템에서 주소공간 문제도 있음!

    => 커다란 사이즈의 database 전체를 관리하는 주소체계가 추가로 필요해짐

2. queries를 위한 추가적인 code 필요

    사용자의 요청을 처리하기 위해 추가적인 코드가 필요해진다.

    즉 복잡한 쿼리 프로그램을 굳이굳이 작성해야 하는것!! 이런 프로그램 유지관리 문제도 있음

3. 동시 제어성 (inconsistency due to nultiple concurrent user)

    하나의 database에 여러명의 사용자가 동시에 접근해 수정, 추가, 삭제를 할 수 있다

    => 즉 이런 부분에서 문제가 생기지 않게 데이터를 보호할 방법이 필요함

4. crash recovery 

    시스템이 충돌하거나, 오류가 생겼을 때 데이터를 일관성 있게 유지할 수 있어야함!

    이 때 이런 복구과정을 처리하는 코드를 애플리케이션 수준에서 관리해야 하는데 (파일시스템을 이용하면) 이건 너무 복잡함!

5. security, access control

    파일 시스템에서는 기본적인 비밀번호 보호기능만 제공함

    => 사용자마다 권한을 세세하게 조절하기 힘들다!

    (특정 데이터마다 접근권한을 제어하기 어려움)

 

... 아무튼 이런 문제가 많아서 DBMS가 등장하게 되었다!

DBMS 장점

1. data independence and efficient access

    데이터 독립성 : DBMS가 어플리케이션에게 실제 데이터가 물리적으로 어떻게 저장되는지 숨기는것

        => 어플리케이션 자체는 데이터가 어떻게 저장되는지 (블럭은 몇개구 어쩌구,,) 이런걸 모른채로 작동할 수 있어야함!

              즉 DBMS가 이런 부분을 알아서 감춰준다는것

              - 물리적 데이터 독립성 : 데이터가 실제로 어떻게 저장되는지 (어떤 디스크에 저장되는지, 어떤 파일구조인지 등등) 알필요 없음!!

                                                    실제 물리적인 부분이 바뀌어도 (다른 디스크로 이동 등등) 어플리케이션은 모른채로 잘 동작할 수 있음

              - 논리적 데이터 독립성 : 논리적 구조가 변경되어도 어플리케이션은 영향안받음

                                                    관계형 데이터베이스에서 테이블에 필드가 추가되거나, 제거돼도 어플리케이션이 보는 view는 영향X

    효율적 데이터 접근 : 데이터를 저장하고 검색하는데 DBMS자체가 효율좋은 기법을 적용해줌!

        => 인덱스를 이용한다 (빠른 검색!)

2. reduced application development time

    어플리케이션 개발시간 단축 : 데이터 접근에 대한 기능을 내장하고 있으므로, 개발시간을 단축해줌

        => 데이터 접근과 관련된 코드를 줄일 수 있는것!

        고급기능 제공 : 쿼리 작성, 데이터 무결성 검사, 동시성 제어, 백업 및 복구 기능을 제공함

                                == 개발자가 추가로 구현할 필요가 없음!

        인터페이스 : 데이터 조작 언어 SQL을 제공함

3. data integrity and security

    데이터 무결성 : 데이터가 항상 제약조건을 충족시키도록 유지할 수 있음

        => 새로운 데이터를 추가할 때, 제약조건에 맞는지를 확인하는 등등

        => 데이터의 일관성을 보장하는 데 중요한 역할을 해준다!

        외래 키 제약, 고유 키 제약 등등

    보안 : 사용자별로 접근권한을 세분화 할 수 있음!

        => 특정 그룹에게는 특정 데이터만 보여주도록 강제할 수 있다

        특정 테이블, 특정 column등에 대한 접근권한, 수정권한 등 세분화해서 적용가능

4. uniform data administration

    데이터 관리의 중앙 집중화 : 여러 사용자가 데이터를 공유할 때, 데이터 관리를 중앙 집중화 할 수 있음!

         => 데이터가 중복되는걸 줄일 수 있고, 체계적인 관리가 가능해진다

         => 관리자가 중앙에서 데이터들을 다 관리할 수 있어짐

5. concurrent access, recovery from crashes

    동시성 제어 : 데이터베이스에 여러 사용자가 동시에 접근할 수 있도록 해준다 (DBMS가 적절히 관리해줘서 데이터 충돌 막아줌)

                         lock같은 기법을 사용한다

    장애 복구 : 시스템에 오류가 생겼을 때, 오류가 생기기 전 상태로 복구할 수 있는 기능을 제공함 == 데이터 일관성 유지

                      => DBMS는 모든 변경사항을 로그에 기록한다 (장애복구할 때 중요하게 사용됨!)

=> 위에서 나온 문제들을 다 해결한것!

 

** 특별한 이유가 있으면 오히려 DBMS를 사용하는게 안좋을수도 있음

    1. 실시간 제약이 있는 어플리케이션

    2. 간단한 작업만 하는 경우

    3. DBMS의 기능이 필요없는 경우

 

DBMS에서 데이터를 저장하고, 표현하는 방법

DBMS에 저장되는 데이터 -> 특정 조직의 다양한 측면을 설명하는것

    학교를 예로 들면,,, entity (학생, 교수, 강좌) 와 relation (학생의 강좌등록 등등)이 존재함

 

아무튼 DBMS는 저장하는 데이터의 세세한 부분은 숨기고, 고수준 데이터 설명 구조모음인 데이터 모델을 제공한다

* data model : collection of cocepts for describing data

* schema : description of a particular collection of data, using a given data model.

                    (== column, field 모음)

 

=> 관계형 데이터 모델 (relational data model)을 주로 사용함!!

관계형 데이터 모델

* 관계 (relation) : 테이블로 표현됨. 각 행은 record (tuple), 각 열은 attribute (field)

* 스키마 (schema) : 데이터 모델이 기반한 데이터 설명

           => 즉 어떤 테이블 (관계) 에 있는 attribute에 대한 설명임!

           학생을 예로 들면,,, Student (sid : string, name : string..) 같은 식으로 표현될것

 무결성 제약 (integrity constraints)를 이용해 각 레코드에 조건을 정의할 수 있음

           학생의 고유키 설정또한 이걸로 하는것!

 

DBMS 추상화 수준

총 3가지 추상화 수준으로 설명할 수 있다

1. Physical Schema (물리적 스키마)

    files, index 설명 -> 데이터가 실제로 어떻게 저장되는지를 설명

    (데이터를 디스크에 어떻게 저장할것인지, 어떤 파일구조인지, 인덱스가 뭔지)

    성능 최적화에 영향을 준다!

2. Conceptual Schema (개념적 스키마)

    logical structure 결정 -> 데이터 모델에 따라 데이터를 결정함

    다양한 entity의 관계가 결정된다

3. External Schema (== view, 외부 스키마)

    사용자가 데이터를 어떻게 보는지 설명

    -> 저장된 데이터가 아니라, view형태로 제공 (실제로 저장된건 아니지만, 필요한걸 계산해서 보여줌)

 

Transaction management

트렌잭션 : 데이터베이스에서 한번에 실행되는 작업의 단위 -> 여러 작업을 하나로 묶어서 처리함

=> 데이터베이스의 무결성과 일관성 유지에 매우 중요!!

    은행을 예로 들면,,, 계좌 이체에서,, 출금과 입금은 무조건 같이  (하나의 트랜잭션) 처리되어야함

 

트랜잭션을 통해 데이터의 ACID를 보장함

 

ACID

1. Atomic (원자성) : 트랜잭션의 작업들은 모두 하나의 단위로 처리되면, 트랜잭션의 모든 작업이 성공적으로 완료됐을때만 정상적으로 반영됨

    -> 하나라도 실패면,,, 그냥 실행 안했을때랑 똑같아야함!! (완전성공 vs 완전실패 둘 중 하나만)

2. Consistency (일관성) : 트랜잭션이 완료되면, 데이터베이스는 일관된 상태로 유지되어야함

    성공한 경우, 데이터베이스의 제약조건을 모두 만족시켜야함

                        제약조건을 만족하지 못하면, 실행전으로롤백됨!

3. Isolation (고립성) : 각 트랜잭션은 독립적으로 실행됨

    -> 하나가 완료되기 전에는 다른 하나가 실행되지 못함 (하나씩 차례로 실행된것처럼 보장)

4. Durability (영속성) : 트랜잭션이 성공적으로 완료되면, 이 결과는 시스템 오류, 충돌이 발생해도 영구적으로 유지되어야함!

 

트랜잭션 동시실행

데이터베이스에는 여러 사용자가 동시에 접근해 사용하므로, 여러 트랜잭션이 동시에 실행되면서 서로 간섭하지 않도록 해야함

=> lock 메커니즘 이용!!

 

1. shared lock (공유 잠금) : 데이터를 읽을 때 사용, 여러 트랜잭션이 동시에 동일한 데이터에 걸 수 있음

    -> 걸려있으면, 읽기만 되고 쓰기는 안됨

2. exclusive lock (배타 잠금) : 데이터 수정할 때 사용, 이 잠금이 설정된 데이터에는 다른 트랜잭션 접근XXX

    -> 배타 잠금이 걸려있으면, 해당 트랜잭션이 독점적으로 사용함!!

 

롤백

트랜잭션이 완료되지 못할 수 있음 (시스템 충돌, 전력문제 등등,,,,)

=> 이럴때는 DBMS가 데이터 일관성유지를 위해 트랜잭션 시작되기 전 상태로 데이터를 복구해야함 (== 롤백!)

* WAL (Write-Ahead Logging) : 트랜잭션이 데이터를 변경할때마다 그 변경사항을 데이터베이스에 적용하기 전에 로그에 기록

    -> 선행기록!

    => 트랜잭션이 실패하면 이 로그를 보고 데이터를 복구한다

* checkpoint : 주기적으로 체크포인트를 생성해서 로그를 압축 (데이터와 로그를 디스크에 기록하는것)

    => 복구작업할 때 필요한 시간이 단축된다!

 

DBMS 구조

 

여러 계층으로 이루어져있음! (여러 계층의 소프트웨어!)

 

SQL Interface

사용자가 데이터베이스와 상호작용하는 가장 기본적인 인터페이스 -> SQL 명령어를 이용해 조작함

DDL (데이터정의), DML (데이터 조작), DCL (데이터 제어) 명령어들을 포함한다.

Query Evaluation Engine

SQL인터페이스에서 입력된 SQL 쿼리를 해석하고, 쿼리를 실행하기 위한 최적의 실행계획을 수립

쿼리를 처리하는 다양한 방법 중 가장 효율적인걸 선택 && 데이터 접근에 필요한 논리적 연산들 실행

-> (쿼리최적화를 통해) 데이터를 효율적으로 검색하고 처리하는데 기여함

Buffer Manager

데이터 베이스에 저장된 데이터를 물리적 디스크에서 메모리로 가져오는 작업 담당

(DBMS는 데이터 처리를 메모리로 올려서 처리한다)

-> 버퍼 관리자가 디스크와 메모리 사이의 데이터를 효율적으로 관리하고, 처리속도를 최적화한다

    예를들어,,,, 캐시처럼 자주 사용되는 데이터는 메모리에 계속 올려둔다던지,,,

File and Access Methods Layer

파일 시스템과 상호작용하는 계층 -> 데이터베이스의 데이터를 저장, 인덱스 관리, 데이터를 검색

데이블과 같은 데이트베이스의 개체를 디스크에 물리적으로 저장하고, 인덱스를 관리함

=> 데이터를 어떻게 저장할지에 대한 세부적인 방법을 다룸

Disk Space Manager

데이터를 디스크에 저장하고 읽어오는 작업 담당 -> DBMS가 사용할 디스크 공간을 관리 (할당, 해제)

데이터의 저장 위치를 관리, 파일/페이지 단위로 데이터를 저장하고 검색하도록 해준다

Transaction Manager

각 트랜잭션이 안전하고 일관성 있게 실행되도록 도와줌

Lock Manager

lock을 관리함 -> 앞에서 나온 lock 담당하는 계층인듯!

Recovery Manager

복구 관리자 -> 시스템에 문제가 있을 때 데이터베이스를 복구하는 역할

 

 

각각의 게층은 모듈화 되어있고, SQL 인터페이스가 가장 상위에 있다. 이 계층이 사용자와 상호작용하며 명령을 받아들이고, 하위의 다른 계층에게 전달해준다.

 

[DBMS 데이터 흐름]

1. 사용자가 SQL 쿼리를 입력한다 (SQL 인터페이스)

2. 쿼리 평가 엔진이 쿼리를 분석하고, 실행계획을 수립함

3. 실행계획이 수립되면 버퍼 관리자, 파일 접근방법 계층이 협력해서 디스크에서 데이터를 읽어와 메모리에서 처리

4. 트랜잭션 관리자는 트랜잭션을 관리, 잠금관리자는 Lock 관리

5. 복구 관리자는 시스템 장애 발생 시 복구작업을 실행함

 

 

 

 

728x90