eff3ct's st0rage Dev Blog

[DBMS] 01. 데이터베이스 시스템이란?

  • 한양대학교 컴퓨터소프트웨어학부 정형수 교수님의 2022년도 데이터베이스시스템및응용 강의를 듣고 정리한 내용임을 밝힙니다.
  • 내용에 오류가 있을 수 있으며, 발견 시 댓글로 알려주시면 감사하겠습니다.

1. 데이터베이스 시스템이란?

데이터베이스 (Database / DB)

DBMS를 말하려면 먼저 DB라는 것을 알아야 한다. 간단하게 말하면 데이터베이스(DB)는 ‘데이터’의 집합이다. ‘데이터’는 어떤 의미있는 정보라고 생각할 수 있고, 그런 데이터들이 많이 모여있는 집합이 바로 DB다. DB는 보통 하드디스크와 같은 저장장치에 실제로 기록되고, 구조화되어서 저장된다.

데이터베이스 매니지먼트 시스템
(Database Management System / DBMS)

DBMS는 바로 이런 DB를 관리하고 DB가 필요한 유저들에게 접근 인터페이스를 제공해주는 하나의 시스템이다. 여러 유저들이 한 번에 하나의 DB에 접근하는 경우를 생각해보자. 동시에 똑같은 데이터에 읽고 쓰기를 한다면, 무결성에 문제가 생길 수 있다. 가령, A가 1번 데이터에 쓰고 있는데 B가 1번 데이터를 읽어간다면? 값이 제대로 보장이 안된다. 이런 상황에서 DBMS는 동시성 컨트롤(Concurrency Control)을 보장해주어 한 번에 여러 명이 접근하는 상황도 안전하게 관리해준다.

그렇다면, 운영체제는 DBMS일까? 운영체제는 파일 시스템을 사용해서 파일들을 저장장치에 기록한다. 이때, 이 파일시스템은 일반적으로 동시성 컨트롤을 해주지 않는다. 또한, DBMS에서는 데이터를 작성하다 시스템이 비정상적으로 종료되는 상황에서 복구하는 기능을 보장 하고있지만, 파일시스템은 그렇지 않다. 따라서, DBMS는 운영체제와는 다른 개념이다.

DBMS에는 여러가지 종류가 있다. 그 중에서도 현재 시장을 점령하고 있는 것은 RDBMS이다. Relational DBMS의 약자인데, 말 그대로 데이터 간 관계가 있을 때 사용되는 DBMS이다. RDBMS 이외에도 Key-Value, Document, Graph 등등 다양한 DBMS가 있지만, 이 글에서는 RDBMS에 대해서만 다룬다.

관계가 있는 데이터의 예시를 들어보자. 이를테면, 대학에서 교수가 학생들을 강의하는 상황을 생각해보자. 그럼 ‘교수’, ‘학생’, ‘강의’라는 개체(entity)간 관계가 있다는 것을 알 수 있다. ‘학생’들이 ‘교수’에게 ‘강의’를 듣는다라는 관계가 있다는 것을 알 수 있다. 이런 관계가 있는 데이터들을 저장하고 관리하는 것이 바로 RDBMS이다.

위 예시에서 설명한 것 처럼 어떤 관계형 데이터 모델을 가지고 데이터를 표현할 수 있는 것이다. 이런 모델들은 스키마(Schema)라는 것으로 정의된다. 스키마는 DB의 구조와 데이터들의 제약조건을 말한다. 이 스키마를 통해서 데이터를 표현하고, 관리할 수 있다. 스키마는 관점에 따라 크게 3가지로 볼 수 있다.

  1. 외부 스키마 (External Schema)
  2. 개념 스키마 (Conceptual Schema)
  3. 내부 스키마 (Internal Schema)

말이 너무 어렵다. 어디에 External 한 것이고 어디에 Internal 하다는 얘기일까? 쉽게 말하면, 사용자의 눈에 보이는 것이 External Schema이고, 보이지 않는 부분이 Internal Schema이다. 개념 스키마는 이 둘 사이의 중간 정도로 생각하면 된다. 이제 각각의 스키마에 대해서 알아보자.

외부 스키마 (External Schema)

외부 스키마는 사용자의 입장에서 보이는 스키마이다. 사용자가 DB에 접근할 때, 사용자가 보는 것이 바로 외부 스키마이다. SQL 같은 언어로 조작하는 부분에 해당된다고 생각할 수 있다. DB를 사용하는 유저가 보는 View라고 생각할 수 있다.

개념 스키마 (Conceptual Schema)

개념 스키마는 데이터의 특징, 관계를 기술하는 스키마이다. “이 데이터는 정수여야만 해, 이런 데이터들은 저런 데이터들과 요런 관계를 가지고 있어~” 같은 메타데이터들을 서술하는 스키마라고 생각할 수 있다. 디비 스키마라고 한다면 일반적으로 이쪽을 말하는 것이다.

내부 스키마 (Internal Schema)

디스크와 같은 저장장치에 어떤 형식으로 직접 쓰여지나를 나타내는 스키마이다. 가령, ‘1’이라는 정보를 저장하고 싶은데, 실제로는 어떻게 저장되어야지 시스템이 잘 꺼내쓰고 할 수 있을 지를 나타내어 주는 것이다. 이 스키마는 사용자에게 보이지 않고 DBMS 내부 구조에 해당된다. 시스템 프로그래머가 열심히 고민해야하는 부분이라 일반 사용자는 잘 모르는 부분.

schema-explain

오호~ 이제 스키마가 무엇인지 조금 알겠다.

데이터 독립이란?

우리가 어떤 프로그램이나 서비스를 이용할 때, 데이터가 어떻게 저장되든 상관없이 그 데이터를 사용할 수 있어야 한다. 데이터가 실제로 저장되는 방식이나 조직되는 방식은 사용자가 신경 쓸 부분이 아니다. 그런 부분까지 신경쓰며 서비스를 사용해야 한다면, 인생이 정말 어려울 듯 하다. 즉, 사용자 입장에서는 이 데이터가 디스크 몇 번 트랙에 저장되는 지 어떤 형태로 저장되는 지 이런 세부적인 내용을 신경쓰지 않고 데이터가 있구나~ 하고 사용할 수 있어야 한다. 구체적으로는 데이터의 논리적인 구조의 변화(어떤 속성을 작성한다고 해서 어플리케이션의 구조를 처음부터 싹 엎어야하는게 아닌 것)로 부터 보호하는 것을 Logical Data Independence라고 하고, 데이터의 물리적인 구조의 변화(어느 디스크의 어느 인덱스에 어떻게 저장하는지)로 부터 보호하는 것을 Physical Data Independence라고 한다. DBMS를 사용하는 큰 이유 중 하나가 이런 데이터 독립성을 보장하기 때문이다.

요약

  • DBMS는 데이터를 관리하는 시스템이다.
  • DBMS는 데이터를 저장하고, 관리하고, 조작할 수 있도록 해준다.
  • DBMS는 데이터를 저장하는 방법을 스키마라는 것으로 정의한다.
  • 스키마는 크게 외부 스키마, 개념 스키마, 내부 스키마로 나뉜다.
  • DBMS는 동시성 제어, 데이터 독립성, 장애 발생 시 복구 등을 지원한다.