DATA/PostgreSQL

[입문] 05. 기본 RDBMS 용어 및 개념 알아보기

블루베리소르베 2023. 2. 13. 10:00
RDBMS란?

우리는 지금까지 PostgreSQL을 설치하고, 접속하는 방법을 알아보았다. 다시 말해 사용할 준비를 마쳤다.

그렇다면 이제 PostgreSQL을 사용하는 방법에 대해 알아보아야 할 것이다. 그러나 그보다 앞서 알아야 할 것들이 있다.

 

PostgreSQL은 RDBMS로 분류된다.

RDBMS(Relational Database Management System)이란, 데이터베이스를 구성하고 있는 내부 요소들(개체)이 서로 관계(Relation)를 가지는 형태로 관리되는 DBMS라는 것을 의미한다.

 

위키백과에서 정의하는 RDBMS는 다음과 같다.

 

관계형 데이터베이스 관리 시스템(relational database management system, RDBMS)은 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템이다. 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스 모델을 기반으로 한다.

"관계형 데이터베이스"라는 용어는 1970년 IBM의 에드거 F. 커드가 발명했다. 커드는 자신의 논문 "A Relational Model of Data for Large Shared Data Banks"에서 처음 이 용어를 소개했다. 그는 이 논문과 이후의 논문에서 그가 말하는 "관계"가 무엇인지 정의했다. 관계형 데이터베이스 시스템 구성에 대한 대표적 정의는 커드의 12 규칙에 나열되어 있다. 그러나 대부분의 초기 구현들은 커드의 규칙들을 모두 준수하지 않았고, 결국 관계형 데이터베이스란 용어는 최소한 다음 두 요건을 만족하는 데이터베이스 시스템이라는 더 광범위한 의미로 사용되었다.

1. 사용자에게 데이터를 관계로서 표현한다. 즉, 행과 열의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 제공한다.
2. 테이블 형식의 데이터를 조작할 수 있는 관계 연산자를 제공한다.

1980년대 이래로 RDBMS는 재무 기록, 제조 및 물류 정보, 인사 데이터 등의 정보를 저장하는데 가장 많이 사용되는 스토리지다. 과거 계층형 데이터베이스나 네트워크 데이터베이스에 비해 사용 및 이해가 쉬워 관계형 데이터베이스가 이들을 많이 대체했다. 하지만 요즘은 XML 데이터베이스나 객체지향적 모델과 관계형 모델의 불일치 문제를 해결하기 위해 대두된 객체 지향 데이터베이스와 같은 새로운 경쟁자들이 대두되고 있다.

<출처>
https://ko.wikipedia.org/wiki/%EA%B4%80%EA%B3%84%ED%98%95_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EA%B4%80%EB%A6%AC_%EC%8B%9C%EC%8A%A4%ED%85%9C

 

위의 정의대로 보았을 때, RDBMS는 사용자에게 데이터를 관계로서 표현하고, 행과 열의 집합으로 구성된 테이블의 묶음 형태로 데이터를 조작할 수 있는 관계 연산자를 제공하는 DBMS라고 할 수 있을 것이다.

 

위키백과의 내용에서처럼, 근래에 들어서는 Key-Value나 객체지향 데이터베이스 등도 활발히 개발되고, 사용되고 있다. 하지만 RDBMS는 소위 말하는 메인 DBMS로서의 입지를 확고히 하고 있는 상황이라 그 흐름이 변화하기 위해서는 기술적 특이점이 반드시 필요해 보인다.

 

 

개체 모델(Object Model)

 

개체 모델은 데이터를 하나의 개체로 취급하는 것을 말한다.

데이터들을 분류할 때, 데이터가 가진 속성에 따라 분류하고, 정리하여 관리하는 것을 의미하는 것으로, 객체지향 프로그래밍(OOP)의 개념과 비슷하게 생각하면 된다.

 

DBMS에서는 보통 테이블, 스키마, 데이터베이스 등으로 구분하여 관리하며, 각각은 더 큰 상위 개체에 포함되게 된다.

 

우리가 어떤 자료를 데이터베이스에 보관하고자 한다고 해 보자.

그렇다면 어떤 자료를 보관하고자 하는지에 따라 고려할 사항들이 달라질 것이다.

 

예를 들어 ㅇㅇ고등학교의 데이터를 자료화 시키고자 한다고 해보자.

우선 학교의 현 상황을 알아야 할 것이다.

 

다음은 간략한 ㅇㅇ고등학교에 대한 설명이다.

 

"ㅇㅇ고등학교에는 300명의 학생이 재학 중이고, 각 반에 20명씩 총 15개 반이 있다. 학년은 1학년부터 3학년까지이며, 음악실, 미술실, 체육 창고, 양호실, 교무실, 급식실 등을 제외한 20개의 교실이 수업을 위해 사용된다. 교직원으로 등록되어 있는 사람의 수는 50명인데, 이중 급식실의 10명은 외부 업체 소속이다. 급식담당 외부업체의 이름은 냠냠컴퍼니이다."

 

위의 내용을 개체를 사용해서 ㅇㅇ고등학교의 데이터를 자료화 시켜보도록 하자

ㅇㅇ 고등학교
학생 수 300명
학급 수 15개
학급별 학생 수 20명
학년 수 3개 학년
교실 수 20개
기타 부대시설 수 6개
교직원 수 50명
외부업체 인원수 10명
외부업체명 냠냠컴퍼니

 

우리는 ㅇㅇ고등학교라는 커다란 개체를 만들고, 그 안에 학생 수, 학급 수, 교실 수 등 ㅇㅇ고등학교에 대한 자료들을 담았다. 물론 실제 세상에 존재하는 ㅇㅇ고등학교는 위에서 우리가 정리한 것보다 더욱 복잡할 것이다. 남학생과 여학생의 비율, 학생별 성적, 교사의 성비, 학교의 운영기금 규모 등 ㅇㅇ고등학교라는 개체에는 다양한 항목들이 끝없이 추가될 수 있다.

 

개체 모델이란 세상에 존재하는 개체(Object/사물, 대상)를 데이터화 시키는 작업을 말한다.

 

ㅇㅇ고등학교라는 개체 안에 그 학교가 가진 특성들을 항목별로 분류하여 실제 세상에 존재하는 ㅇㅇ고등학교를 데이터 세상에 담아내는 것이 바로 개체 모델의 핵심이다.

 

그리고 이러한 개념을 데이터를 관리하는 소프트웨어에 적용한 것이라고 생각하면 된다.

 

위에서 언급했던 사항을 다시 한번 이야기해 보자.

RDMBS에서 가장 큰 개체는 데이터베이스이다.

 

데이터베이스는 스키마라는 개체를 포함한다.(PostgreSQL의 스키마 개념은 나중에 다시 설명하도록 하겠다.) 스키마는 테이블이라는 개체를 논리적으로 포함하고 있다. 이외에도 인덱스(Index), 시퀀스(Sequence) 등도 모두 개체이다.

 

관계 모델(Relational model)

관계 모델이란 데이터 간의 관계를 나타내는 것을 말한다.

우리는 모든 것이 연결되어 있는 세상에 살아간다. 단순히 유비쿼터스나 사물인터넷을 이야기하는 것이 아니라, 각각의 개체들은 상호작용을 하는 연결된 관계 속에 존재한다는 것이다. 작용-반작용, 먹이사슬, 에코시스템 등을 생각해 보면 더 이해하기 쉽다.

 

데이터의 세계에서도 이는 동일하게 존재한다. 어떤 데이터는 그 데이터와 인접한(특성이 비슷하거나 연관된) 데이터들과 관계(Relation)를 가지고 있다. 이를 2차원 평면에 열과 행으로 표현한 것을 테이블(Table)이라고 부른다. PostgreSQL에서는 Table을 Relation과 혼용하여 사용하고 있는 것을 볼 수 있다. 이러한 테이블은 일련의 행과 열로 구성되며, 각 열은 데이터의 속성, 각 행은 데이터의 단일 값을 나타낸다. 테이블 간의 관계는 테이블을 함께 연결하는 키(Key)라고 부르는 공통 열을 사용하여 설정한다.

 

앞서 살펴본 고등학교를 예로 들어보자.

각각의 고등학교 개체는 관계 모델을 만나면 표로 정리가 가능하다.

 

다음은 고등학교 테이블의 예이다.

 

학교명 학생 수 학급 수 학급별 학생 수 학년 수 교실 수 기타 부대시설 수 교직원 수 외부업체 인원 수 외부업체 명
ㅇㅇ 고등학교 300명 15개 20명 3개 학년 20개 6개 50명 10명 냠냠컴퍼니
ㅁㅁ 고등학교 280명 14개 20명 3개 학년 15개 5개 45명 8명 냠냠컴퍼니

 

이처럼 열에는 같은 속성의 데이터를 배치하고, 행에는 각 속성을 가지고 있는 개체를 배치하였다.

이를 통해 개체가 가지고 있는 속성들과의 관계가 표현되었다. 만약 ㅎㅎ고등학교도 데이터로 정리하고 싶다면 아래에 한 행으로 표현하여 덧붙이면 된다.

 

앞으로 우리가 사용하게 될 PostgreSQL의 가장 기본이 되는 데이터 오브젝트가 바로 테이블이다.

 

Table들의 집합 Database

PostgreSQL에서는 Table들을 파일로서 관리한다. 그 파일들은 PostgreSQL의 엔진이 만든 데이터가 저장된 파일로, 엔진에 의해 해석되어야만 우리가 알아볼 수 있는 형태로 표현된다.

이러한 테이블 파일들은 데이터베이스라는 큰 단위의 오브젝트(개체)에 속하게 되는데, 각각의 데이터베이스는 고유의 Object ID를 부여받아 관리된다. 이러한 OID를 활용하여 우리는 실제 데이터베이스가 어떤 형태로 유지관리 되는지 확인할 수 있다. 해당 사항은 입문에서 다룰 내용은 아니기에 우선 이쯤에서 넘어가도록 하겠다.

 

이처럼 테이블은 데이터베이스 오브젝트의 내부에 위치하게 되며, 데이터베이스를 삭제하게 되면 내부의 테이블까지 함께 삭제되게 된다.

 

마치며

지금까지 우리가 PostgreSQL을 사용하기 위해 알고 있어야 할 기본적인 개념을 알아보았다.

사실 당장 사용하는데 필요한 개념은 아니다. 하지만 이러한 개념을 어렴풋이나마 알고 있어야 앞으로 우리가 알아볼 PostgreSQL의 오브젝트들을 쉽게 이해할 수 있다.

 

다음 포스팅에서는 본격적으로 PostgreSQL을 사용해 보며 PostgreSQL의 Data Object들을 알아보도록 하겠다.