전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

객체 모델 기반의 DBMS 지원 OODBMS와 ODMG

전문가칼럼
DBMS별 분류
DB일반
작성자
dataonair
작성일
2001-12-31 21:00
조회
7449





객체 모델 기반의 DBMS 지원

OODBMS와 ODMG

배치 전용 시스템과 온라인 전용 시스템이 분리되던 시대가 있었지만, 지금은 많은 시스템들이 온라인 처리와 배치 처리를 동시에 수행하고 있다. 이와 같은 시스템에서 중요한 사항은 무엇인가 배치 작업이 온라인에 영향을 미치지 않으면서 빠르게 수행되어야 하는 것이 중요한 사항일 것이다. 이와 같은 배치 작업을 빠르게 종료하기 위해서는 병렬 프로세싱이 반드시 필요하다. 하지만, 병렬 프로세싱은 자원을 많이 사용할 수 있으므로 해당 시스템의 온라인 처리에 영향을 미칠 수 있다. 따라서 배치 처리를 위한 병렬 프로세싱의 사용은 매우 신중하게 사용해야 한다.

데이터를 표현하고 액세스하기 위한 방법을 나타내기 위해 소프트웨어 공학에서 정의한 데이터 모델을 사용한다. 데이터 모델은 데이터 요소들을 정의하고 관련 있는 데이터 요소들간의 관계를 정의한다. 저장될 데이터에 대한 자세한 내용을 담고 있으며, 애플리케이션을 위한 소프트웨어 소스 코드를 생성하거나 기능적 사양을 준비할 때 사용된다.


0315_01.jpg

다양한 데이터 모델 중에서 CAD/CAM과 CIM, 통신, 지리정보시스템, 멀티미디어와 같은 복잡한 데이터베이스 응용을 설계하고 구현하기 위해 객체 모델이 사용된다. 객체 모델은 <그림 1>에서 나타낸 것과 같다. 이런 객체 모델을 바탕으로 한 OODBMS는 복잡한 객체 데이터 구조, 장기 트랜잭션이라는 특성을 지원하고 이미지, 매우 큰 용량 텍스트 데이터의 저장을 위해 별도의 제안된 타입과 비표준 연산 기능을 지원한다. 따라서 기존의 데이터 타입과 질의어에 제한을 받지 않도록 설계되어 있다.
OODBMS(Object Oriented Database Management System)는 앞서 설명한 객체형 데이터 모델을 사용해 만들어진 DBMS이다. 객체지향 프로그래밍에서 사용하는 객체의 형태를 가지고 정보를 표현하기 때문에 OODBMS는 공간 데이터를 사용하는 애플리케이션을 비롯해 통신 분야, 높은 에너지를 사용하는 물리학 분야 및 생명공학 데이터 이용 애플리케이션에서도 사용될 수 있다. OODBMS가 가지는 객체, 클래스, 상속과 같은 특징은 데이터베이스 스키마를 지원하기 위해 직접적으로 사용될 수 있으며, 주문화된 데이터 타입과 메소드들을 사용하는 데이터 모델 확장을 지원한다. 대부분의 객체 데이터베이스 제품들은 쿼리 언어를 지원하며, ODMG에 의해 OQL(Object Query Language)의 형태로 표준화되어 있다.
OODBMS는 조인(Join)이 필요하지 않기 때문에 데이터에 대한 액세스는 RDBMS보다 빨리 이뤄질 수 있다. 저장하고자 하는 데이터에 대해 클래스 메소드가 정확하게 지원할 수 있기 때문에 멀티미디어 데이터를 다루는 데 관계형 데이터베이스보다 훨씬 더 유리하다.
초기 OODBMS들은 각자의 데이터 모델과 프로그래밍 언어, 질의어를 가지고 있었다. 따라서 각 솔루션들이 가지고 있는 모델이나 언어들은 유사한 면 이외에 다른 점들도 존재하므로, 한 시스템에서 개발된 응용프로그램이 다른 시스템으로 이식되는 것이 거의 불가능했다. 또한, 관계형 데이터베이스 시스템의 SQL과 같은 표준화된 인터페이스가 없으므로 객체지향 데이터베이스 솔루션들은 확산되는 데 문제점들이 발생했다.

따라서 1990년대 초반에 상용 객체지향 데이터베이스 관리시스템들을 제공하는 기업들과 학계가 주축이 되어 객체지향 데이 터베이스의 표준을 제정했고, OMG라는 객체지향 기술의 표준 화 기구에서 제안하는 ODMG93(1.0)이라는 객체지향 데이터베 이스 표준안이 발표됐다. 표준안은 해를 거듭하면서 구체화되어 1997년에 ODMG 2.0이라는 표준안으로 발전했고 그 이후에 3.0까지 나와서 현재는 객체지향 데이터베이스의 표준으로 널리 받아들여지고 있다. ODMG 표준안의 영향으로 객체지향 데이 터베이스 시스템에서의 응용프로그램의 이식성이 높아졌고 서로 다른 제품들 간에 데이터 호환이 가능하게 됐다.


0315_02.jpg

ODMG 표준은 다음과 같은 4개의 주요 컴포넌트들로 이뤄져 있다.

- 객체 모델
- 객체 명세서 언어
- OQL(Object Query Language)
- 프로그래밍 언어 바인딩

그리고 다음과 같은 두 가지 객체 명세서 언어를 정의한다.

- ODL(Object Definition Language)
- OIF(Object Interchange Format)

ODL은 ODMG 객체 모델을 지원하기 위한 객체 타입을 지정 하기 위해 사용된다. OIF는 ODMG와 호환되는 ODMS(Object Data Management Systems)의 현재 상태를 덤프하거나 로드 하기 위해 사용하는 명세서 언어이다. OIF로서 ODMG에서 지 원되는 언어가 사용될 수 있지만, 이러한 언어들 이외에 신속한 데이터 교환을 위해 XML이 제안되기도 한다. 그래서 XML 기 반의 언어인 OIFML에 대해 연구가 진행되고 있다.

ODMG 3.0의 객체 모델은 객체 관리 그룹의 객체 모델에 기 초하며, OMG(Object Management Group) 코어 모델은 객체 요청 브로커, 객체 관리 시스템, 객체 프로그래밍 언어에 대한 공 통적인 분모를 나타내기 위해 설계됐다.


0315_03.jpg

ODMG 3.0 표준은 기본적인 모델링 프리미티브로서 객체 (Object)와 리터럴(Literal)을 사용한다. 객체는 특성 값에 의해 정의되는 상태와 오퍼레이션 세트에 의해 정의되는 동작을 가진 다. 각 객체들은 각자의 생명유지 기간 동안에는 변경되지 않는 유일한 객체 식별자를 가진다. 리터럴은 식별자를 가지지 않지 만, 그 값도 변경되지 않는다. 이러한 객체들은 그들의 타입 형태 에 따라서 카테고리가 구분된다. ODMG 객체 모델에서는 리터럴 타입과 객체 타입을 정의한 다. 원자적인 객체 타입은 사용자 지정 타입이며, 타입 명세서에 의해 정의된다. 타입 명세서는 객체 타입의 추상적인 동작을 정 의하는 인터페이스이거나 객체 타입의 추상적인 동작과 상태 값을 정의하는 클래스가 될 수 있다. 타입 명세서는 인스턴스에 의해 실행되는 오퍼레이션처럼 객 체 타입의 외부 특성을 지정한다. 이를테면 사용자에게 타입이 보이도록 할 것인가 아닌가와 같은 것이다. ODMG의 객체 모델 은 다음과 같은 두 가지 값들을 포함하고 있다.

- 특성(Attribute)
- 관계(Relationship)
그리고 클래스나 인터페이스 명세서에서 특성 선언이 가능하 며, 클래스 특성의 선언은 인스턴스의 추상적인 상태를 정의할 수 있고 인터페이스의 추상적인 동작도 정의할 수 있다. 관계는 두 객체 타입 사이에서 정의된다. 각 타입에서 얼마나 많은 인스 턴스가 관계를 가지고 있는지에 따라서 다음 중 어느 하나가 사 용될 수 있다.

- 대-일 관계
- 대-다수 관계
- 다수-대-다수 관계

ODMG 객체 모델은 다음과 같은 두 가지 상속관계가 지원 된다.

- IS-A
- EXTENDS

IS-A 관계는 객체 타입의 동작이 지원하는 상속에 대해 정의 하며, 타입과 서브타입의 관계를 나타낸다. 단지 인터페이스와 클래스만이 인터페이스로부터 상속이 가능하다. 객체 모델은 객 체 동작에서 다수의 상속이 이뤄지는 것을 지원한다.
EXTENDS 관계는 클래스 사이의 상태와 동작의 상속을 지원하 는데, 여기서는 단일 상속만이 지원된다. 또한 상속기반의 타입- 서브타입 관계는 그래프로 표현될 수 있고 각 노드는 타입이 되 며 타입을 연결하는 각 원호는 슈퍼타입이라고 한다.

<리스트1> ODMG 상속예제

interface Employee {...};
interface Professor : Employee {...};
interface Associate_Professor : Professor {...};

Associate_Professor는 Professor의 서브타입이며, Professor 는 Employee의 서브타입이다. 서브타입의 인스턴스는 슈퍼타입 의 인스턴스가 된다. 따라서 Associate_Professor의 인스턴스는 Professor의 인스턴스가 된다.


0315_04.jpg

ODMG의 OQL는 질의와 업데이트를 위해 사용된다. 이는 여 러 가지 OODBMS 솔루션들이 각자 자기의 인터페이스를 사용 함으로써 다수의 상위 개발자들이 혼돈을 겪는 것을 방지하기 위 해 도입된 것으로, 이를 통해 단일화된 인터페이스가 제공될 수 있다. OQL은 SQL과 유사하지만 ODMG의 개념을 지원하므로 다음과 같은 개념들을 포함하고 있다.

- 객체 식별
- 복합 객체
- 연산자
- 상속
- 다형성
- 관계

ODMG의 OQL은 ANSI SQL92의 대부분을 지원하기 위한 확장 기능을 제공한다. 다음은 간단한 ODMG OQL 쿼리들의 예 제들을 나타낸 것이다.


0315_05.jpg

(리스트 2) Germany에서 생산되는 모든 car를 찾는 예제

SELECT car
FROM car IN Cars
WHERE car.car_manufacturer.country = "Germany">

(리스트 3)메르세데츠 500 엔진의 모든“Air*”컴포넌트를 찾는 예제

SELECT component
FROM car_manufacturer IN CarManufacturers,
car IN car_manufacturer.cars,
principal_characteristic IN car.characteristics,
component IN principal_characteristic.components
WHERE car_manufacturer.name == "Mercedes"
AND car.name == "500"
AND principal_characteristic.name = "Engine"
AND component.name like "Air*"

(리스트 4)50세 이상의 종업원들의 이름을 찾는 예제

SELECT distinct struct( n: p.name )
FROM p IN Employees
WHERE p.age > 50

또한 ODMG 3.0에서는 언어에 대한 바인딩을 지원함으로써 각 언어의 문법을 사용해 다양한 OQL 동작을 실행시킬 수 있다. 다음은 C++ & Java 언어 바인딩에 대한 예이다.

(리스트 5)C++ 언어 바인딩 예

d_Database db;
d_Transaction txn;try {
db.open("addressDB");
txn.begin(); // 쿼리 수행
d_OQL_Query query(
"select x from Person x where x.name = \Doug
Barry\""""");
d_Bag > allDougBarrys;
d_oql_execute(query

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""