물리적 분류에서 논리적 분류로
분류는 물리적(직접적) 분류와 논리적(간접적) 분류로 나눌 수 있다. 불과 몇 십 년 전까지는 물리적 분류가 대부분이었다. 물리적 분류는 시각적 분류이기도 하다. 20세기 이전에는 물리적 분류만으로도 충분할 만큼 세상은 복잡하지 않았다. 하지만 정보화 시대에 접어 들면서 세상은 복잡해지고 분류할 정보는 점점 늘어났다. 또한 분류의 규칙과 요구 사항은 점점 다원화됐다. 컴퓨터가 사용되면서 대량의 정보에 대한 분류에도 새로운 방법 적용이 시도됐다. 물리적 분류만으로는 더 이상 이 복잡한 세상을 분류하거나 이해하기 어렵다. 이를 해결 할 수 있는 방법이 논리적 분류이다. 먼저 물리적 분류에 대해 살펴 보자.
물리적 분류: 우리 집 거실의 책장
1년 전 지금 살고 있는 집에 이사 오면서 방에 있는 책장을 거실로 빼고 TV는 안방으로 옮겼다. 가족들이 주로 생활하는 거실을 책 읽는 공간으로 꾸미고 싶었기 때문이다. 처음엔 책장을 분류하면서 자주 보거나 아직 읽지 않은 책들은 책장 1단에, 더 이상 보지 않을 책들은 책장 4단에 꽂아 두었다. 얼마 지나지 않아 이 방법이 옳지 않음을 깨달았다. 키가 작은 둘째가 4단 높이에 있는 책을 보기 위해서 1단 혹은 2단을 딛고서 책을 꺼내는걸 보았다. 책장이 넘어질 것 같아 마음이 조마조마 했다. 결국 지금은 가족들의 키 순으로 책을 다시 분류했다. 둘째가 사용하는 책장 1단은 늘 어지럽다. 책을 읽고 난 후 아무렇게나 두기 때문이다. 분류는 인류의 역사와 함께 시작되었으므로 DNA에 내재되어 있을 법한데, 우리 둘째는 그렇지 않은가 보다. 그렇다면 분류는 후천적인 교육의 산물인지 궁금해진다.
위의 <그림 1>처럼 책을 보관할 실제 공간(책장)에 직접 분류하는 것을 물리적(직접적) 분류라 한다. 기존 분류가 마음에 들지 않으면, 다른 분류 방법으로 재분류하면 된다. 그리고 원하는 책을 빠르게 찾기 위해서는 평소에 늘 분류하고 유지하는 노력이 필요하다. 세상에 공짜로 얻어지는 것은 없다.
물리적 분류의 한계: 방송국 음반 자료실
여러분들이 지금까지 경험하고 인지하는 대부분의 분류는 물리적 분류였다. 만약 라디오 방송국에서 다음과 같은 기준으로 음반을 분류한다고 가정하자(물론 요즘은 디지털화해 파일로 관리하겠지만). 여러분들은 어떻게 분류할 것인가? 현실적으로 분류가 가능한가?
1. 가수를 기준으로 해당 가수의 초창기부터 지금까지 년도별로 분류한다(가수별-년도별).
2. 팝송, 재즈, 클래식, 블루스, 교향곡, 트로트 등 장르를 기준으로 가수별로 분류한다(장르별-가수별).
3. 연도를 기준으로 해당 시기의 가수별로 분류한다(연도별-가수별).
4. 연도를 기준으로 인기가요 순으로 분류한다(연도별-가요 순위별).
5. 국가를 기준으로 가수별-연도별로 세부적으로 분류한다(국가별-가수별-연도별).
방송국의 음악 담당 PD들은 이외에도 더 다양한 분류를 원할 것이다. 이 모든 분류를 동시에 충족할 수 있는 물리적 분류는 존재할까? 단언컨대 없다. 만약 획기적인 물리적 분류 방법이 있다면 알려 주기 바란다
동일한 공간과 동일한 시간에서는 오로지 하나의 물리적 분류만 가능하다. <그림 2>처럼 여러 분류 방법을 동시에 만족하는 물리적 분류는 존재하지 않는다. 만약 동일한 공간이 아니라면, 가능할 수도 있다.
그 대신 분류의 종류만큼 저장 공간이나 음반 수는 배수가 되어야 한다. 또한 동일한 시간이 아니라면 가능할 수? 따라야 한다.
현실적으로 자원(보관 공간, 음반, 시간)이 무한정 제공될 수 없으므로, 결국 동일한 시공간에서 물리적 분류는 한 가지만 존재한다. 그렇다면 동시에 여러 분류를 가능케 하는 해결 방안은 없을까?
분류 대상과 분류 정보를 분리하자
우리가 일상 생활에서 경험한 대부분의 분류는 물리적 분류였다고 이미 말했다. 물리적 분류는 분류 대상과 분류 정보가 1:1의 관계에 있고 일체형이다. 그런데 라디오 방송국 음악 담당 PD들이 원하는 음반 분류는 다양하다. 분류 대상(음반)과 분류 정보(색인)의 관계는 1:1 관계가 아니라 1:n의 관계다. 음반을 나라별, 가수별, 연도별, 장르별, 인기순위별 등 여러 분류로 나눌 수 있어야 한다. 이러한 다양한 분류를 동시에 가능하게 하는 유일한 방법은 분류 대상(음반)과 분류 정보(색인)를 분리하는 것이다. 이것이 논리적 분류다. 정보화 세계에서 대량의 복잡한 자료를 다양하게 분류하는 데 적합한 분류다.
<그림 3>의 음반 자료실에는 분류 대상(음반)이 실제로 보관되어 있는 물리적인 장소로서 음반이 순차적으로 보관되어 있다. 또한 주변에 있는 분류 정보(색인)에는 각각의 분류 특성에 맞는 정보가 구성돼 있으며, 실제 음반에 대한 물리적 위치 정보도 갖고 있다. 이와 같이 분류 대상(음반)과 분류 정보(색인)을 분리함으로써 다양한 분류가 동시에 가능하게 됐다. 논리적 분류는 컴퓨터 대중화와 함께 현재 널리 이용되고 있다. DB의 많은 부분에서도 논리적 분류가 활용되고 있다. 인류의 역사에서 직립 보행의 의미만큼이나, 논리적 분류는 분류의 역사에서 중요한 의미를 갖고 있지 않을까? 부연하자면 인류는 직립 보행을 하기 전에는 4개의 다리로서 걷고, 뛰고, 사냥했다. 그 후 2개의 다리와 2개의 손으로 분리되면서 손은 자유로워졌다. 걷고, 뛰고, 사냥하는 데 있어서 약간의 불편함은 있었지만, 물건을 잡고-던지고-만들고-(열매를) 따는 등의 다양한 역할을 할 수 있게 된 것이다. 인류는 직립 보행을 해서 획기적으로 발전했다기보다는 손이 자유로워져서 발전하게 된 것이라고 한다. 손이 다리에서 분리되어 새로운 역할을 맡았기 때문이다. 마찬가지로 분류 대상과 분류 정보를 분리함으로써, 그동안 (물리적 분류에서) 할 수 없었던 다양한 분류가 동시에 가능하게 되었다. 이러한 논리적 분류는 컴퓨터를 사용하는 정보화 세계에서 중요한 의미를 지닌다.
물리적 분류와 논리적 분류
앞서 소개했듯이, 물리적 분류는 인류 역사와 함께 시작되었던 분류 방식이다. 동일한 시공간에서 유일하게 한 가지 분류만 가능하다고 했다. 반면 논리적 분류는 컴퓨터 사용과 더블어 대량의 정보로 넘쳐나는 정보화 시대에 적합한 분류 방식이다. 분류 대상과 분류 정보를 분리함으로써 동일한 시공간에서 다양한 분류가 가능해졌다. 물리적 분류와 논리적 분류에 대해서 아래와 같이 비교-요약할 수 있다.
인덱스는 논리적 분류
필자가 왜 분류에 대해 이렇게 강조하는지를 여러분은 이미 눈치를 챘을 것이다. 그렇다. DB에서 인덱스는 논리적 분류의 특성을 갖고 있기 때문이다. DB에서 인덱스는 중요한 요소이며, 차지하는 의미는 크다. DBA보다는 특히 개발자에게 아주 중요한 의미를 가진다. DBA에게 인덱스는 DB에서 관리되어야 할 여러 요소 중에서 하나지만, 개발자에게 인덱스는 빈번하게 사용하는 DB의 핵심 요소이기 때문이다.
<표 1>의 논리적 분류의 특성에서 ‘분류 대상과 분류 정보가 분리(종속적)’라고 했다. 여기에서 분류 대상은 테이블과 동일한 의미고, 분류 정보는 인덱스와 동일한 의미다. 또한 종속적 이라는 말은 테이블과 인덱스의 관계가 종속적임을 의미한다. DB에서 테이블을 삭제하면, 인덱스는 자동으로 함께 삭제됨을 우리는 안다. 그래서 테이블과 인덱스의 관계는 종속적인 관계다.
참고적으로 테이블을 삭제할 때 뷰는 자동으로 삭제되지 않는다. 그래서 테이블과 뷰의 관계는 종속적인 관계가 아니다. 뷰는 테이블의 객체 정보를 갖고 있으므로 굳이 함께 삭제할 이유는 없다. 하지만 인덱스(분류 정보)는 테이블(분류 대상)의 위치 정보를 갖고 있으므로, 테이블 삭제 시 자동으로 삭제돼야 이치에 맞다.
<표 1>의 논리적 분류의 특성에서 ‘동일한 시공간에 동시에 다양한 분류 가능’이라고 했다. 이 말은 하나의 테이블에 여러 개의 인덱스가 종속적으로 연결돼 있다는 것으로 이해해도 좋다.
테이블에는 분류 대상이 있고, 인덱스에는 분류 정보가 있다. 테이블은 분류 정보를 갖고 있지 않다. 만약 갖고 있다면, 어떤 문제가 있을까? 분류 대상과 분류 정보가 분리되지 않았다면, 어떤 문제가 발생할까?
1. 저장 공간을 분류의 특성에 맞게 미리 할당해야 한다.
2. 상시적으로 공간 이동을 하여야 하고, 분류를 유지 하는 데 많은 비용이 든다.
3. 오직 하나의 분류만 가능하다.
1번과 2번에서 많은 유지 비용이 필요한 것도 문제지만, 특히 3번에 대한 제약은 심각하다. 데이터에 대한 다양한 분류를 원하는 정보화 세계에서는 치명적인 약점이다. 이러한 이유 때문에 DB를 처음 만든 사람이 테이블과 인덱스를 분리했을 것이다. 그래서 테이블은 분류 대상만을 가지게 되었고, 인덱스는 분류 정보를 갖게 됐다.
분류 대상(테이블)과 분류 정보(인덱스)가 분리되었으므로, 하나의 테이블에 대하여 다양한 분류와 접근이 가능하게 됐다. 약간의 단점도 있겠지만 유리한 점이 훨씬 더 많다.
지식은 그것을 필요로 하는 사람의 몫
DB의 인덱스에 대해서 네이버에서 검색하면 다음과 같은 내용이 조회된다. 또한 DB 관련 도서들을 찾아봐도 아래의 내용과 크게 다르지 않다.
- 인덱스는 책의 목차와 같다.
- 인덱스는 테이블의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조다.
- 인덱스는 SQL 명령문의 처리 속도를 향상시키기 위해서 컬럼에 대해 생성하는 객체다.
- 오라클의 인덱스 내부 구조는 B-tree 구조다.
- 인덱스를 생성하는 구문에 대한 내용… Create Index.........
위는 틀림이 없이 인덱스에 대해 잘 설명했다. 하지만 개발자에게 중요한 것은 인덱스의 목적이나 기능이 아니다. 인덱스 생성 구문도 아니다. 또한 개발자에게 인덱스가 B-tree 구조인지, 그 어떤 구조인지는 그리 중요하지 않다. 인덱스 목적-기능-구조-생성 구문을 몰라도 된다는 것이 아니라, 중요하지 않다는 말을 하고 싶다. 인덱스를 만들고 관리하는 것은 DBA다. 개발자는 인덱스를 어떻게 잘 만들 것인지가 중요하다. 어떻게 잘 분류할 것인지를 고민하는 게 중요하다.
'오라클 > 참고' 카테고리의 다른 글
오라클 ADG 설치 (0) | 2023.01.04 |
---|---|
오라클 SID, Service Name (0) | 2022.11.16 |
오라클 19c RAC 패치 적용 (0) | 2022.11.10 |
오라클 DB character set (0) | 2022.11.06 |
오라클 데이터 이관 (EXP / IMP) (0) | 2022.10.27 |