저번 글에서는 DBMS가 기존의 어떠한 문제를 해결하기 위해 나타났는지를 설명했다. 이번 글에서는 DBMS의 특장점과 데이터베이스의 구성 요소인 언어, 시스템 아키텍처를 설명하고자 한다. 먼저 관련 용어를 한 번 쭉 정리하고, 시작해보자.
- 데이터: 어떤 사실의 정량적/정성적 특징을 나타낼 수 있는 값과 그 값에 대한 설명(메타 데이터)
- 데이터베이스: 특정 기관의 애플리케이션 시스템에서 사용되는 데이터의 집합
- 스키마(Schema): 데이터베이스에 있는 데이터들의 논리적 구조와 관계를 나타내는 것
- 트랜잭션(Transaction): 데이터베이스의 상태를 바꾸는 작업(논리적 기능을 수행)의 단위, 한꺼번에 수행되어야하는 일련의 연산 묶음
- 데이터베이스 관리시스템(DBMS): 데이터베이스에 저장된 데이터의 구성, 저장, 관리, 사용을 위한 소프트웨어 패키지이다. 대표적으로 Oracle과 MySQL이 있다.
- 데이터베이스 시스템: 정보를 데이터베이스에 저장, 관리하여 사용자에게 요구된 형태의 정보로 제공하는 컴퓨터 기반 시스템
■ 파일 처리 시스템의 단점을 극복한 데이터베이스 관리시스템
기존의 시스템인 파일 처리 시스템은, 데이터의 종속, 중복, 무결성 훼손, 동시접근의 문제를 가지고 있었다. 이러한 단점을 극복하고 나온 것이 바로 데이터베이스 관리 시스템이고, 특징은 아래와 같다.
1. 실시간 접근 가능
데이터베이스는 지속적이고 비정형적인 사용자의 요구 사항을 처리해야하기 때문에 실시간으로 접근이 가능해야하며, 동적인 상태에서 데이터를 처리(삽입, 삭제, 갱신 등)해야 한다.
2. 자기기술성, 내용에 의한 참조
DBMS의 데이터는 데이터 값과 데이터의 부연설명(메타데이터)를 같이 가지고 있다. 데이터들의 관계나 속성, 즉 ‘제약조건’을 정의하는 메타데이터가 있기 때문에 데이터의 구조를 보다 쉽게 변경할 수 있다.
예를 들어 기존에는 ‘주소나 특정 위치’를 찾아 데이터를 변경했다면, 이제는 ‘데이터의 내용’으로 검색할 수 있기 때문에 데이터의 구조를 쉽게 변경할 수 있다.
3. 응용프로그램과 데이터의 독립
DBMS는 3단계 구조로 이뤄져있기 때문에 응용프로그램과 데이터가 논리적으로도, 물리적으로도 분리되어 있다. (저번 글에서 말한 외부–개념 사상의 단계가 논리적 데이터 독립성을 보여주고, 개념–내부 사상의 단계가 물리적 데이터 독립성을 보여준다.)
데이터가 독립적이라는 것은 여러가지 장점이 있는데,
1) 하위 단계의 데이터 구조가 변경되어도 상위 단계에는 영향을 미치지 않는다.
2) 데이터베이스 구조가 바뀌어도, 프로그램에 영향을 미치지 않는다.
3) 데이터의 표현 방법이나 저장 위치가 바뀌어도, 프로그램에 영향을 미치지 않는다.
즉, 유지보수가 쉽고, 데이터의 중복을 최소화하고, 사용자의 요구사항에 보다 빠르게 대응할 수 있다!
4. 다중 뷰 제공
DBMS의 3단계 구조에서 기인한 장점으로, 뷰(외부 스키마)마다 데이터를 다르게 선택하여 보여줄 수 있기 때문에 사용자 입장에서는 복잡한 데이터 구조를 생각하지 않고도 원하는 데이터만 접근하여 업무를 처리할 수 있다.
5. 트랜잭션 처리
파일 처리 시스템에서 다수의 사용자가 동시 접근하면 데이터 관리의 일관성이 떨어진다. 예를 들어 동시간 대에 사용자 A와 사용자 B가 데이터 1에 접근해서 작업을 한다고 하자. 이때 동시 작업한 것이 꼬이지 않고 처리되어 서로 공유가 되어야하는데, 파일 처리 시스템을 이러한 기능을 적절히 제공하지 못한다. 반면에 데이터베이스는 ‘트랜잭션’ 단위로 처리하여 다수의 데이터 조작 요청을 일관되게 처리할 수 있다.
■ 데이터베이스 관리시스템의 단점
이런 DBMS도 단점이 있다. 시스템이 그만큼 복잡해지고, 비용 역시 증가한다. 또한 데이터의 백업과 복원이 어렵기도 하다. 다만 구더기 무섭다고 된장을 안담그랴. 이런 점들을 적절히 보완하기 위해 데이터베이스 모델도 여러가지 발전하게 되었다는 점! 크게 계층형, 네트워크형, 관계형 모델이 있는데 현재 가장 많이 쓰이는 것은 관계형 모델로, 다음에 좀 더 자세히 다루도록 하겠다.
■ 데이터베이스 언어 – SQL과 DDL, DML, DCL
현재 데이터베이스의 언어는 자연어(인간이 쓰는 말과 유사)에 가까운 SQL(Structered Query Language)로 표준화되었다. SQL의 문법은 역할에 따라 크게 3가지로 정의된다.
1. DDL(Data Definition Language, 데이터 정의 언어)
데이터베이스의 객체(구조)를 생성, 수정, 삭제하기 위한 언어이다. 데이터베이스 설계자와 관리자가 사용하는 언어이다. ex) CREATE, ALTER, RENAME, TRUNCATE
2. DML(Data Manipulation Language, 데이터 조작 언어)
사용자가 구조화된 데이터에 접근하여 데이터의 검색, 삽입, 삭제, 수정 등의 조작하는 언어이다. 데이터베이스 사용자가 저장된 데이터를 실질적으로 처리할 때 사용한다. ex) SELECT, UPDATE, DELETE
3. DCL(Data Control Language, 데이터 제어 언어)
데이터베이스의 접근/사용 권한을 주는 언어이다. 데이터의 보안, 무결성 등을 정의할 때 사용한다. ex) GRANT, REVOKE
■ 데이터베이스 관리시스템 운영방식
데이터베이스 시스템의 아키텍처는 크게 3가지로 나누어진다. 이 3가지는 어느 것이 절대적으로 더 우수하다기보다는 상황에 맞춰서 적절하게 선택할 필요가 있다.
1. 중앙 집중식 시스템(Centralized Database System)
단일 서버가 여러 개의 클라이언트를 대신하여 작동하는 방식이다. DBMS 1대가 모든 일처리를 하다보니 과부하가 걸린다는 단점이 있다.
2. 분산 시스템(Distributed Database System)
네트워크로 연결된 여러 컴퓨터에 데이터베이스가 물리적으로 분산되어 있지만, 사용자는 권한만 있다면 하나의 데이터베이스처럼 접근할 수 있다. 중앙 집중식에 비해 대용량 처리가 가능하고, 서버 확장에도 용이하지만 시스템 자체는 더 복잡하여 개발 비용이 증가하고, 통제하기 어렵다는 단점이 있다.
3. 클라이언트-서버 데이터베이스 시스템(Client-Server Database System)
사용자의 요청을 전달하는 클라이언트와 이를 처리하는 서버로 나누어 관리하는 방식을 말한다. 애플리케이션 프로그램의 부하를 분산하기 때문에 유지보수 비용이 낮다는 장점이 있다. 보안에는 다소 취약하다고 한다. 클라이언트-서버가 직접 연결되는 2계층 구조와 그 사이에 응용 서버가 추가된 3계층 구조가 있다.