데이터베이스 시스템의 정의
데이터베이스 시스템은 데이터베이스에 데이터를 저장하고, 저장된 데이터를 관리하여 조직에 필요한 정보를 생성해주는 시스템이다. 다양한 목적의 정보 처리 시스템을 구축하는데 필수적인 요소이다. 데이터베이스, 데이터베이스 관리 시스템(DBMS), 데이터베이스 시스템(DBS) 개념들을 한 번에 정리해보도록 하겠다.
- 데이터베이스(DB): 데이터를 저장하는 공간
- 데이터베이스 관리 시스템(DBMS): 데이터베이스에 저장된 데이터가 일관되고 무결한 상태로 유지되도록 관리하는 시스템
- 데이터베이스 시스템(DBS): 데이터베이스와 데이터베이스 관리 시스템을 통해 조직에 필요한 정보를 제공하는 전체 시스템
데이터베이스의 구조
데이터베이스에 필수적인 개념인 스키마에 대해 먼저 알아보고 데이터베이스를 3단계로 나누어 구조를 살펴보도록 하겠다. 그리고 데이터 독립성의 개념을 실현하는 방법을 알아보겠다.
스키마 (Schema)
스키마는 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것이다. 정의된 스키마에 따라 데이터베이스에 실제로 저장되는 값이 인스턴스(Instance)이다. 스키마는 한 번 정의되면 자주 변경되지 않으나, 인스턴스는 계속해서 변한다.

3단계 데이터베이스 구조
3단계 데이터베이스 구조는 하나의 데이터베이스를 세 단계로 나누어 이해한다. "외부 단계", "개념 단계", "내부 단계"로 나누고 각 단계별로 다른 추상화를 제공하면 데이터베이스를 효과적으로 관리할 수 있다. 이를 통해 모든 데이터의 저장과 유지와 관련된 복잡한 내용을 숨기고 필요한 데이터만 단순화하여 일반 사용자들에게 제공할 수 있다. 3단계 데이터베이스 구조의 각 단계에 대해 자세히 알아보도록 하겠다.
외부 단계(External Level)
외부 단계에서는 "개별 사용자 관점"에서 데이터베이스를 이해하고 표현한다. 그렇기에 사용자마다 생각하는 데이터베이스의 구조가 다르다. 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것을 "외부 스키마"라 하며, 사용자마다 다르다. 하나의 데이터베이스에는 여러 외부 스키마가 존재할 수 있고 외부 스키마 하나를 사용 목적이 같은 사용자들이 공유할 수 있다.
개념 단계(Conceptual Level)
개념 단계에서는 데이터베이스를 이용하는 사용자들의 관점을 통합하여, 데이터베이스를 "조직 전체의 관점"에서 이해하고 표현한다. 데이터베이스 관리 시스템은 전체 데이터베이스에 관리를 두게 되고, 관리자의 관점에서 모든 사용자에게 필요한 데이터를 통합하여 전체 데이터베이스의 논리적 구조를 정의한다. 이를 "개념 스키마"라고 한다.
모든 개별 사용자가 생각하는 데이터베이스의 모습을 하나로 합친 형태로 하나의 데이터베이스에 하나의 개념 스키마만 존재하며, 각 사용자는 개념 스키마의 일부분만 사용하게 된다. 개념 스키마를 기초로 하여 외부 스키마가 만들어지는 것이다.
내부 단계(Internal Level)
내부 단계에서는 데이터베이스를 "저장 장치의 관점"에서 이해하고 표현한다. 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법을 정의하며 이를 "내부 스키마"라고 한다. 하나의 데이터베이스에 하나의 내부 스키마만 존재하며, 내부 스키마는 데이터베이스의 개념 스키마에 대한 물리적인 저장 구조를 표현한다.
데이터 독립성
하나의 데이터베이스에는 세 가지 유형의 스키마가 존재하나, 이는 모두 같은 데이터베이스를 표현한다. 사용자가 외부 스키마를 통해 원하는 데이터를 얻기 위해서는 내부 스키마에 저장된 데이터베이스에 접근해야 하기에 스키마 사이에는 유기적인 대응 관계가 성립해야 한다. 이때, 스키마 사이의 대응 관계를 "사상(매핑)"이라고 한다.
결국, 데이터베이스를 3단계 구조로 나누고 단계별로 스키마를 유지하며 대응 관계를 정의하는 목적은 "데이터 독립성"을 위함이다. 데이터 독립성이란 하위 스키마를 변경해도 상위 스키마가 영향을 받지 않도록 하는 것이다. 3단계 데이터베이스 구조에는 "논리적 데이터 독립성"과 "물리적 데이터 독립성"이 존재한다.
- 논리적 데이터 독립성: 개념 스키마가 변경되더라도 외부 스키마가 영향을 받지 않는 것으로, 전체 데이터베이스의 논리적 구조가 변경되어도 관련된 "외부/개념 사상 정보(응용 인터페이스)"를 적절히 수정하면 직접적 관련이 없는 사용자를 위한 외부 스키마는 변경할 필요가 없게 된다.
- 물리적 데이터 독립성: 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 것으로, 결과적으로는 외부 스키마도 영향을 받지 않게 되는 것이다. 데이터베이스의 저장 구조가 변경되어도 관련된 "개념/내부 사상 정보(저장 인터페이스)"를 적절히 수정하면 직접적 관련이 없는 데이터 베이스의 논리적 구조는 영향을 받지 않게 된다.
데이터 사전
데이터베이스에 저장된 데이터를 올바르게 사용하기 위해서는 부가적인 정보(Ex 스키마, 사상 정보 등)도 함께 저장해야 한다. 데이터베이스에 저장되는 데이터에 관한 정보를 저장하는 곳을 "데이터 사전(시스템 카탈로그)"라고 한다. 데이터 사전은 데이터베이스 관리 시스템이 스스로 생성하고 유지하기에 주로 데이터베이스 관리 시스템이 접근하지만(내용 추가 및 수정 가능), 일반 사용자도 접근 가능하다(검색만 가능).
데이터 사전에 있는 데이터(메타 데이터)에 실제로 접근하는데 필요한 위치 정보는 "데이터 디렉토리"에서 관리한다.
데이터베이스 사용자
데이터베이스 시스템을 구성하는 중요한 요소 중 하나는 바로 "사용자"이다. 즉, 데이터베이스를 사용하는 모든 사람이다.
데이터베이스를 이용하는 "사용자"는 다양한데, 크게 "데이터베이스 관리자", "최종 사용자", "응용 프로그래머"로 나눌 수 있다.
데이터베이스 관리자
데이터베이스 관리자는 데이터베이스 시스템을 운영 및 관리한다. 직접 활용하는 것보다는 데이터베이스를 설계하고 구축하며 제어하는 역할을 한다. 데이터베이스 관리자의 주요 업무는 다음과 같다.
- 데이터베이스 구성 요소 선정
- 데이터베이스 스키마 정의
- 물리적 저장 구조와 접근 방법 결정
- 무결성 유지를 위한 제약조건 정의
- 보안 및 접근 권한 정책 결정
- 백업 및 회복 기법 정의
- 시스템 데이터베이스 관리
- 시스템 성능 감시 및 성능 분석
- 데이터베이스 재구성
최종 사용자
데이터를 조작하기 위해 데이터베이스에 접근하는 사람들을 일반 사용자 또는 "최종 사용자"라고 한다. 최종 사용자는 "캐주얼 사용자"와 "초보 사용자"로 구분 가능하다.
- 캐주얼 사용자(Casual End User): 데이터베이스에 대한 이론적 지식을 바탕으로, 데이터 조작어를 이용하여 원하는 데이터와 데이터 처리를 데이터베이스 관리 시스템에 직접 설명하는 사용자이다.
- 초보 사용자(Naive End User): 데이터베이스를 초보 수준으로 이용하고 데이터 조작어보다는 GUI 형태 응용 프로그램을 통해 데이터베이스를 사용하는 사용자이다.
응용 프로그래머
응용 프로그래머는 프로그래밍 언어로 응용 프로그램을 작성할 때 데이터베이스에 접근하는 데이터 조작어를 삽입하는 사용자이다. 응용 프로그래머가 작성한 프로그램으로 최종 사용자가 데이터베이스에 접근할 수 있다.
데이터 언어
사용자를 대신해서 데이터베이스 관리 시스템에 데이터베이스 구축, 활용 및 관리를 부탁할 때 사용하는 언어가 바로 "데이터 언어"이다. 데이터 언어는 사용자가 데이터베이스를 구축하고 이에 접근하기 위해 데이터베이스 관리 시스템과 통신하는 수단이다.
데이터 언어는 사용 목적에 따라 "데이터 정의어", "데이터 조작어", "데이터 제어어"로 나뉜다. 독립적인 언어는 아니며 기능에 따라 내부적으로 구분짓는 것일 뿐이다.
데이터 정의어 (Data Definition Language: DDL)
새로운 데이터베이스를 구축하기 위해 스키마를 정의하거나 기존 스키마의 정의를 삭제 또는 수정하기 위해 사용되는 데이터 언어이다.
데이터 조작어 (Data Manipulation Language: DML)
사용자가 데이터의 삽입/삭제/수정/검색 등의 처리를 데이터베이스 관리 시스템에 요구하기 위해 사용되는 데이터 언어이다. 설명 방식에 따라 "절차적 데이터 조작어"와 "비절차적 데이터 조작어"로 나뉜다.
- 절차적 데이터 조작어: 사용자가 어떤 데이터를 원하고 해당 데이터를 얻으려면 어떻게 처리해야 하는지 구체적으로 설명한다.
- 비절차적 데이터 조작어: 사용자가 어떤 데이터를 원하는지만 설명한다.
데이터 제어어 (Data Control Language: DCL)
데이터베이스에 저장된 데이터를 여러 사용자가 무결성과 일관성을 유지하며 문제없이 공유하도록, 내부적으로 필요한 규칙이나 기법을 정의하는데 사용되는 데이터 언어이다. 다음의 특성을 보장하기 위해 데이터 제어어를 사용해 규칙이나 기법을 정의한다.
- 무결성(Integrity): 데이터베이스에 정확하고 유효한 데이터만 유지한다.
- 보안(Security): 허가받지 않는 사용자가 데이터에 접근하는 것을 차단하거나, 허가된 사용자가 접근 권한이 있는 데이터에만 접근할 수 있게 한다.
- 회복(Recovery): 장애가 발생해도 데이터의 일관성을 유지한다.
- 동시성(Concurrency): 여러 사용자가 같은 데이터에 동시에 접근하여 처리할 수 있게 한다.
데이터베이스 관리 시스템의 구성
데이터베이스 관리 시스템은 데이터 베이스의 주요 구성 요소이다. 사용자와 데이터베이스 사이에 위치하며 크게 "질의 처리기"와 "저장 데이터 관리자"로 구분할 수 있다.
질의 처리기
질의 처리기는 사용자의 데이터 처리 요구를 해석하여 처리하는 역할을 담당하고 다음의 구성 요소들을 포함한다.
- DDL 컴파일러: 데이터 정의어로 작성된 스키마의 정의를 해석하고, 새로운 데이터베이스를 구축하며, 스키마의 정의를 데이터 사전에 저장한다.
- DML 프리 컴파일러: 응용 프로그램에 삽입된 데이터 조작어를 추출하여 DML 컴파일러에 저장한다.
- DML 컴파일러: 데이터 조작어로 작성된 데이터의 처리 요구를 분석하여 런타임 데이터베이스 처리기가 이해할 수 있도록 해석한다.
- 런타임 데이터베이스 처리기: 저장 데이터 관리자를 통해 데이터베이스에 접근하고, DML 컴파일러로부터 전달받은 데이터 처리 요구를 데이터베이스에서 실제로 진행한다.
- 트랜잭션 관리자: 데이터베이스에 접근하는 과정에서 사용자의 접근 권한이 유효한지 검사하고, 제약조건 위반 여부를 확인한다.
저장 데이터 관리자
저장 데이터 관리자는 디스크에 저장된 데이터베이스와 데이터 사전을 관리하고 실제로 접근하는 역할을 담당한다.