'Language/XML'에 해당되는 글 3건

  1. XML데이터의 특성과 XML 데이터베이스 분류 2009.06.03

최근 몇 년 사이 XML(eXtensible Markup Language)은 IT시스템의 주요 기반기술로 자리잡았다. 문서관리나 데이터 교환, 애플리케이션 통합 등에 XML이 적절한 포맷이라는데 논란의 여지가 없으며, 이에 따라 도입 여부보다는 XML데이터를 어떻게 효율적으로 관리하는가를 고민해야 할 시점에 와 있다. 이에 XML데이터베이스 분류와 네이티브(Native) XML데이터베이스 현황, 적용사례 등을 3회에 걸쳐 소개한다.
기명신 | 펜타시스템테크놀러지 부장

XML을 신규로 도입하는 기업은 말할 것도 없고, 이미 도입한 기업에서도 시스템을 운영하면서 XML데이터의 관리와 활용에 어려움을 겪어 XML데이터베이스를 재검토하는 사례를 종종 접한다. 
특히 초기에 XML시스템을 구축할 때 시스템에서 관리하게 될 XML데이터의 특성과 종류, 사이즈에 대한 충분한 고려 없이 XML저장소를 선택한 경우에는 XML문서가 급속하게 축적, 증가함에 따라 초기에 예상하지 못했던 성능, 확장성 등의 문제에 직면하게 된다. 
또한 XML데이터의 활용을 고려하지 않고 파일시스템이나 관계형 데이터베이스 내에 BLOB 형식으로 저장한 경우에는 XML데이터에 대한 구조검색이나 XML 일부 노드의 추출 또는 변경이 불가능해 축적된 자료의 활용과 관리에 어려움을 겪게 된다.

XML데이터의 특성
잘못된 XML저장소의 선택은 대부분 관리해야 할 XML데이터의 특성을 제대로 이해하지 못한 데서 비롯된다. XML을 효율적으로 저장하고, 제대로 활용하기 위해서는 먼저 XML데이터의 특성을 알고 있어야 한다. 기본적으로 XML은 기존에 많이 사용하는 테이블과는 구조 자체가 다르다. 
XML은 계층형 데이터 모델이다. 관계형 데이터모델에서 데이터들이 정규화되어 여러 개의 행과 열로 분리되는데 반해 XML은 데이터가 하나의 계층적 구조에 담긴다. 즉, XML은 한개의 루트 노드와 하위 단계의 순서화된 서브트리들의 집합으로 구성되고, 하위 노드는 상위 노드에 종속된다. 또한 XML트리의 노드는 여러 개의 occurrence들로 구성된다. 이러한 XML의 기본적인 특징 외에도 XML데이터는 데이터중심(Data-centric) XML과 문서중심(Document-centric) XML의 두 가지 유형으로 분류될 수 있으며 각 유형별로 특성을 가지고 있다.

▲데이터중심 XML
데이터중심 XML은 정형화된 구조를 갖는다. 엘리먼트나 어트리뷰트의 순서는 중요하지 않으며 독립적인 데이터의 단위는 말단의 엘리먼트·어트리뷰트로서 매우 세분화된 데이터라고 할 수 있다. 제품카탈로그나 구매 주문서 등을 담고 있는 XML이 데이터중심 XML의 좋은 예라고 할 수 있다. 

▲문서중심 XML
문서 중심(Document-centric) XML은 비정형적인 구조를 갖는다. 엘리먼트나 어트리뷰트의 순서가 중요한 의미를 가지며, 독립적인 데이터의 단위는 XML문서 전체이거나, 혼합 콘텐츠(mixed-content)를 갖는 엘리먼트가 될 수 있다. 논문, 책, 제품설명서 등을 담고 있는 문서가 문서중심 XML로 분류될 수 있다.

XML데이터베이스

많은 기업들이 정보관리나 데이터교환, 통합 등을 위해 XML을 도입함에 따라 XML데이터를 효율적으로 저장·질의·검색·조작하는 등의 ‘XML데이터관리’의 문제가 이슈가 되었고, 데이터베이스 벤더들은 이러한 새로운 포맷의 데이터관리라는 요구사항에 각각 다른 방식의 대응책을 내놓았다. 상용관계형 데이터베이스나 객체지향데이터베이스들은 XML데이터를 관리하기 위한 확장기능과 플러그인(plug-in)들을 내놓았고, 기존 DBMS에서 XML을 관리하는 방식 이외에도 새로운 형식의 DBMS인 네이티브(Native) XML데이터베이스가 등장하였다. 
네이티브 XML데이터베이스는 XML을 저장·관리하기 위하여 설계된 것으로 XML데이터의 특성을 잘 활용하고 빠른 성능으로 계층적 구조의 XML데이터를 조작·관리하기 위해 XML을 네이티브 XML 포맷 그대로 저장한다. 
네이티브 XML데이터베이스에 반해 XML을 관계형 데이터베이스나 객체지향데이터베이스의 구조에 맞도록 매핑·변환해 저장하기 위한 확장 기능을 제공하는 데이터베이스는 ‘XML-Enabled database’라고 한다.

네이티브 XML데이터베이스
네이티브 XML데이터베이스는 XML데이터를 XML형식 그대로 저장하고 질의하기 위한 구조화된 모델을 제공한다. 다음의 인용문은 네이티브 XML데이터베이스의 개념을 잘 설명하고 있다. 
‘네이티브 XML데이터베이스는 XML문서를 저장하기 위해서 특별히 설계된 데이터베이스이다. 다른 데이터베이스들과 마찬가지로 트랜잭션, 보안, 다중사용자 접근, 프로그래밍 API, 질의언어 등의 기능을 지원한다. 다른 데이터베이스들과 다른 점은 단지 내부 모델이 관계형 모델과 같은 다른 모델이 아닌 XML 기반으로 되어있다는 것이다.’
네이티브 XML데이터베이스는 데이터중심 XML과 문서중심 XML 모두에 적용 가능하다. 

XML-Enabled 데이터베이스
XML-Enabled 데이터베이스는 XML데이터 포맷과 데이터베이스의 데이터 모델(일반적으로 관계형 모델)간의 매핑(mapping), 변환을 위한 확장기능을 제공한다. XML과 데이터베이스의 데이터 모델이 다르기 때문에 설계단계에서 XML데이터와 데이터베이스 스키마간에 매핑이 이뤄져야 한다. 주로 데이터중심 XML을 처리하는데 이용할 수 있다. 관계형 데이터베이스의 경우는 XML데이터를 정규화하고, 엘리먼트와 어트리뷰트값을 관계형 테이블의 칼럼에 저장하거나 XML문서 전체를 LOB 형태로 저장한다. IBM DB2, 오라클, MS SQL 서버, 사이베이스 등 주요 관계형 데이터베이스들이 XML지원을 위한 확장 기능을 제공하여 XML-Enabled 데이터베이스로 분류된다.

관계형 데이터베이스와 XML의 비적합성
많은 애플리케이션에서 데이터 저장·관리를 위해 관계형 데이터베이스가 훌륭한 역할을 수행하지만 XML 기반의 애플리케이션에 있어서는 관계형 데이터베이스가 적합하지 않을 수도 있다. XML 데이터 저장소로 관계형 데이터베이스를 채택하는 경우 설계단계에서부터 XML을 관계형 테이블 구조로 매핑해야 하고 이에 따라 많은 수의 테이블이 만들어져야 한다. 
XML 데이터가 복잡하고 계층이 깊을수록 많은 수의 테이블을 필요로 한다. 운영 단계에는 저장·질의 과정에서 XML과 관계형 테이블간의 변환처리에 따른 성능의 저하가 있을 수 있다. 유지보수 단계에는 다수의 테이블을 관리해야 하는데 따른 어려움이 있고, XML 데이터의 구조 변경에 유연하게 대처할 수가 없다.
대부분 XML데이터는 데이터중심과 문서중심으로 명확하게 분리되기보다 두 가지 유형의 특성을 혼합하여 가지고 있는 경우가 많다. 데이터중심 XML 저장관리에 적합한 관계형 데이터베이스를 XML데이터 저장소로 채택했다가 문서중심 XML의 특성을 가진 데이터를 저장해야 할 경우 관계형 데이터베이스에서는 이를 수용할 수 없는 경우도 있을 것이다. XML 문서를 데이터베이스로부터 꺼냈을 때 원본 XML문서를 손상 없이 그대로 복원해야 하는 경우에도 관계형 데이터베이스는 적합하지 않다.
이와 같이 관계형 데이터베이스가 수용하지 못하는 XML데이터를 관리해야 하거나 XML 데이터를 다른 구조로 매핑, 변환하는데서 생기는 문제점을 피하기 위해서는 네이티브 XML데이터베이스를 검토할 필요가 있다.

XML데이터의 효율적인 관리와 활용을 위해 XML데이터의 특성에 맞는 새로운 저장소의 필요성이 증가하면서 수많은 네이티브 XML데이터베이스 제품들이 빠른 속도로 시장에 등장했다. 네이티브 XML데이터베이스들은 공통적으로 XML데이터를 본래의 XML 포맷 그대로(native XML) 다루어 데이터의 분해 및 재조합이 필요없으며 XPath, XQuery, XML스키마(Schema) 등 XML표준을 광범위하게 지원한다. 또한 데이터베이스 내부적으로 XML데이터 내의 일부 노드에 대한 부분적 갱신(partial update)을 지원한다.

XML데이터의 저장 시점에 DTD

(Document Type Definition) 또는 XML스키마를 이용한 유효성 검증(validity check)을 할 수 있으나 스키마 없는 잘 정립된 도큐먼트 또한 저장할 수 있어 스키마 변경이 잦거나 스키마를 갖지 않는 임의의 XML문서까지 수용할 수 있는 유연성을 제공한다.


네이티브 XML데이터베이스의 주요 기능

네이티브 XML 데이터베이스에서 제공해주는 많은 기능 중 공통적으로 제공하는 주요 기능들은 다음과 같다.

△도큐먼트 컬렉션(Document Collection): 네이티브 XML데이터베이스는 도큐먼트들을 쿼리 또는 조작할 수 있는 일정단위로 관리한다. 이는 관계형 데이터베이스의 테이블 또는 파일시스템에서 디렉토리와 유사한 개념이다. 예를 들어 구매 주문서를 네이티브 XML데이터베이스에 저장하는 경우 구매 주문 컬렉션을 정의하면 해당 컬렉션(즉 구매주문 컬렉션)내의 도큐먼트로 쿼리를 제한할 수 있다.

△질의 언어(Query Languages): 대부분의 네이티브 XML 데이터베이스는 W3C XQuery 또는 XPath 기반의 쿼리 언어를 지원한다. 쿼리의 범위는 전문 검색·쿼리(full-text search·query)에서부터 다중 도큐먼트로부터 프레그먼트들을 재결합하는 쿼리까지 다양할 수 있다.

△갱신 및 삭제(Updates and Deletes): 네이티브 XML데이터베이스는 도큐먼트를 갱신하고 삭제하는데 대한 다양한 정책을 가지고 있으며 각 제품마다 자체적인 언어를 가지고 있거나 XMLDB 이니셔티브로부터 만들어진 XUpdate 언어를 지원한다.

△트랜잭션, 락킹, 동시성(Transac-tions, Locking, Concurrency): 거의 모든 XML 데이터베이스는 트랜잭션을 지원한다. 락킹은 보통 도큐먼트의 프레그먼트 레벨보다는 전체 도큐먼트 레벨에서 지원되고 있다.

△API(Application Programming Interfaces): 대부분의 네이티브 XML 데이터베이스는 프로그래밍 API를 제공한다. 이러한 API는 데이터베이스에 대한 연결, 메타데이터 탐색, 쿼리 수행, 결과 가져오기 등을 위한 메소드를 갖는다. 일반적으로 XML 문자열, DOM 트리, 또는 리턴된 도큐먼트에 대한 SAX 파서나 XMLReader 등으로 결과셋이 리턴된다. 만약 쿼리가 다중 도큐먼트를 리턴할 수 있다면 결과셋을 통해 반복적으로 작업하기 위한 메소드 역시 사용 가능하다. 대부분의 네이티브 XML데이터베이스에서는 HTTP를 통해서 쿼리를 수행하고 결과를 리턴해 주는 기능 역시 제공해 준다.

△라운드-트리핑(Round-Tripping): 네이티브 XML데이터베이스의 중요한 기능 중 하나는 XML도큐먼트를 라운드-트리핑 할 수 있다는 것이다. 즉, XML 도큐먼트를 네이티브 XML데이터베이스 내에 저장하고 도큐먼트를 저장할 때와 같은 상태로 그대로 복원하여 다시 가져올 수 있다. CDATA 섹션, 엔티티, 주석문, 그리고 프로세싱 명령어 등과 같은 것들이 도큐먼트를 형성하기 때문에 이는 도큐먼트-중심 애플리케이션에서는 중요하다. 또한 도큐먼트의 정확한 복사본을 유지해야 하는 법률 및 의학 또는 EDI 애플리케이션에서는 필수적인 기능이다. 모든 네이티브 XML데이터베이스는 엘리먼트, 어트리뷰트, PCDATA, 그리고 도큐먼트 순서 레벨에서 도큐먼트를 라운드-트립할 수 있다. 얼마나 많이 라운드-트립할 수 있는지는 데이터베이스에 따라 다르다.



<그림1> 타미노 XML 서버 



<그림2> 컬렉션과 doctype, 도큐먼트



△리모트 데이터(Remote Data): 몇몇 네이티브 XML 데이터베이스는 데이터베이스 내에 저장되어 있는 도큐먼트 내에 리모트 데이터를 포함할 수 있다. 일반적으로 ODBC, OLE DB, 또는 JDBC 등을 이용하여 관계형 데이터베이스로부터 가져온 데이터이고 테이블-기반 매핑 또는 객체-관계형 매핑을 이용하여 모델링 된다.

△인덱스(Indexes): 대부분의 네이티브 XML 데이터베이스는 엘리먼트 및 어트리뷰트 값의 인덱싱을 지원한다. XML데이터베이스가 아닌 것처럼 인덱스는 쿼리의 속도를 빠르게 하기 위해 사용된다.


네이티브 XML데이터베이스의 아키텍처

네이티브 XML 데이터베이스 제품들은 데이터의 저장·관리를 위해 각각 다른 접근법을 사용했고, 따라서 다양한 스토리지 아키텍처를 채택하고 있다. 현재 주요 네이티브 XML데이터베이스들의 스토리지 아키텍처는 XML 데이터를 계층적인 트리 구조로 매핑하는 계층형(Hierarchical)과 XML 저장을 위해 OODBMS를 사용한 객체-지향(Object-oriented), 전체 XML 도큐먼트를 텍스트 형태로 저장하는 텍스트기반, 제품별 자신만의 바이너리 형태를 만들어서 사용하는 특정 바이너리(proprietary binary)형 등으로 분류할 수 있다.

네이티브 XML데이터베이스 제품

현재 시장에는 다양한 네이티브 XML데이터베이스 제품들이 나와있으며, 대표적인 네이티브 XML데이터베이스 제품에는 소프트웨어AG사의 Tamino XML Server를 들 수 있다. 또 IXIA의 TEXTML Server, NeoCore의 Neo

Core XMS, Ipedo의 Ipedo XML 데이터베이스, Sonic Software의 Sonic eXtensible Information Server, TeraText Solutions의 TeraText DBS, OpenLink Software의 Virtuoso 등이 시장에 나와 있다. 한편 eXist, Berkeley DB XML 등은 오픈 소스로 제공되는 네이티브 XML데이터베이스이다.


타미노 XML서버

네이티브 XML데이터베이스라는 용어는 1999년 소프트웨어AG사의 타미노(Tamino) XML 데이터베이스 제품 캠페인에서 처음으로 나온 말이다. 이후 네이티브 XML데이터베이스라는 용어가 널리 사용되게 되었으며, 같은 제품을 개발하는 업체들 사이에 공통적인 용어로서 자리잡게 된 것이다. 네이티브 XML데이터베이스에 대한 이해를 돕기 위해 대표적인 네이티브 XML 데이터베이스인 타미노 XML서버의 아키텍처와 저장 방식, 주요 기능을 XML 데이터 관리와 관계되는 기능 위주로 살펴본다. <그림 1>은 타미노 XML서버의 아키텍처를 보여주고 있다.

△네이티브 XML 스토리지: 타미노는 XML데이터를 네이티브 XML 스토리지에 저장한다. XML데이터는 스키마(DTD 또는 XML Schema)를 가지는 데이터와 스키마 없는 잘 정립된 도큐먼트 모두 저장 가능하다. 스키마가 있는 데이터의 경우 데이터가 저장될 때 미리 정의된 스키마에 의해 유효성 검증이 이루어진다. 디스크 공간을 절약하고 I/O를 줄여 성능을 향상하기 위해 데이터 압축(compression)기능을 제공한다.

△컬렉션(collection)과 Doctype, 도큐먼트(document): 타미노 데이터베이스는 여러 개의 컬렉션(collection)들로 이루어진다. 컬렉션은 XML 도큐먼트의 그룹들을 담고 있는 컨테이너이다. 컬렉션 내에는 여러 개의 doctype들이 담길 수 있는데, doctype은 XML데이터의 루트 엘리먼트(root element)로 선언된 엘리먼트로, 각 스키마별로 하나의 doctype이 정의된다. 실제 하나의 XML 도큐먼트는 doctype 내 하나의 인스턴스(instance)로 저장되게 된다. 관계형 데이터베이스의 테이블에 비유하자면 관계형 테이블은 doctype, 열(row)은 XML인스턴스(instance)에 비유될 수 있다. 즉, 데이터들이 테이블 내 열(row)로 저장되듯이 XML 데이터는 doctype 내 XML 인스턴스(instance)로 저장되는 것이다. 스키마의 정의는 GUI로 제공되는 타미노 스키마 편집기에서 DTD 또는 XML 스키마를 읽어들여 인덱스 등의 부가 정보를 입력한 후 정의한다.



<그림3> W3C XQuery기반 질의어


△XML데이터 질의: 계층적 구조의 XML 문서에 대한 질의는 문서의 구조에 따라 조건을 주는 구조적 검색이나 문서 트리의 일부분을 질의하는 등 XML의 특성에 따라 여러 가지 요구사항이 나타난다. RDBMS의 테이블에 대한 질의로 SQL을 사용하듯이 XML 데이터의 구조에 맞는 다양한 질의를 지원하는 강력한 메커니즘이 필요하다. Tamino는 W3C XPath를 확장한 질의 언어인 X-Query와 W3C XQuery 기반 질의어의 두 가지를 제공한다. X-Query는 직관적인 질의어로 하나의 doctype에 대한 질의에 적합하며 XQuery는 join, ordering, 질의 결과문서 재구성(element constructors) 등 보다 강력하며 다양한 기능을 지원한다.

△XML 데이터 갱신 및 삭제: XML 인스턴스 단위의 Insert·Update·Delete뿐 아니라 XQuery 문법과 개념을 차용한 노드단위 갱신(Node Level Update) 문장을 지원한다

△API(Application Programming Interfaces): 타미노에 접근하는 애플리케이션을 위해 Java, C, Jscript, ActiveX 등을 위한 클라이언트 API를 제공한다. DOM, SAX, JDOM, Stream 형태 등을 지원한다.

△X-Node: 관계형 데이터베이스에 저장된 데이터 소스를 타미노와 연계하여 XML형태로 활용하기 위한 기능을 제공한다. 관계형 테이블의 열(column)들은 타미노 스키마의 엘리먼트 또는 어트리뷰트에 매핑된다. X-Node는 클라이언트 애플리케이션에게 분산된 기업 데이터를 마치 하나의 데이터베이스로부터 조회된 정보처럼 보이게 하는 뷰(view)를 제공한다.

△기타 툴(Tool): 네이티브 XML 데이터베이스들은 XML데이터 저장 스토리지와 검색기능과 같은 기본적인 기능 외에도 XML과 관련 표준 기반 애플리케이션 개발과 관리 툴 등 위한 다양한 부가 기능들을 제공한다. 타미노 또한 이러한 부가 기능들을 제공한다. 즉, 타미노에 저장된 XML 자료를 손쉽게 접근하고 질의 등을 수행할 수 있는 윈도 탐색기와 같은 GUI를 제공하는 X-Plorer, W3C XML 스키마 기반의 타미노 스키마를 편집할 수 있는 스키마 편집기, 표준 웹 브라우저에서 사용 가능한 GUI를 통하여 웹 기반에서 데이터베이스 생성·서버의 시작과 종료·백업과 복구 등 시스템 관리의 모든 것을 수행할 수 있도록 하는 타미노 매니저, 웹기반 정보자원 공동저작을 위한 표준인 WebDAV를 구현한 타미노WebDAV Server, 애플리케이션 개발자들이 최소의 노력으로 XML기반 애플리케이션을 개발할 수 있는 X-Application 등이 그것이다


기명신 | 펜타시스템테크놀러지 부장



퍼온글 : 나는 송정헌이다.



'Language > XML' 카테고리의 다른 글

XML Database  (0) 2009.06.01
XML - XQUERY  (0) 2009.05.29
,