SQL서버와 이 XML이 과연 무슨 관계가 있는지 알아 보도록 하지요..

 

XML은 보여 드린바와 같이 데이터 입니다. SQL 서버와 비슷한 점이 생각

나시나요? 맞습니다. 둘다 데이터를 다룬다는 것입니다. XML은 데이터로 사용하기

힘들것 같다구요? 아닙니다. SQL서버 이상으로 완벽하게 모든 데이터를 표현할 수 있습니다.

고객ID 고객 이름 전화번호
1001 김대우 123-4567
1002 유병수 119-1234

이렇게 SQL서버에 데이터가 저장 되어 있다고 생각해 보겠습니다.

그렇다면 저런 간단한 데이터는 어떻게 XML로 표현될까요?

 

<Customers>
    <Customer CustID='1001' Name='김대우' Phone='123-4567'/>
    <Customer CustID='1002' Name='유병수' Phone='119-1234'/>
</Customers>

 

이렇게 표현이 가능합니다. - 이런 표현을 속성중심적(Attribute-Centric)표현이라고

하며 또는...

 

<Customers>
    <Customer>
        <CustID>1001</CustID>
        <Name>김대우</Name>
        <Phone>123-4567</Phone>
    </Customer>
    <Customer>
        <CustID>1002</CustID>
        <Name>유병수</Name>
        <Phone>119-1234</Phone>
    </Customer>
</Customers>

 

이렇게 역시 표현 가능하며 이는 요소중심적(Element-Centric) 표현이라고 합니다.

허허.. 단순히 표현 방식이 틀려서.. 속성으로 값을 표현하는 것인가?

아니면 요소로 값을 표현하는 것인가의 차이일 뿐이지요.

하지만 분명히 데이터를 저렇게 표현 가능합니다.

2차원 관계형 데이터 -> XML 계층형 데이터로 변환이 가능한 것이며 물론

XML 계층형 데이터 -> 2차원 관계형 데이터로 변환 역시 가능한 것이지요.

 

"음.. 이렇게 단순히 2차원 데이터를 XML로 표현은 쉬운것 같지만..

SQL에서 대단히 많이 사용하는 JOIN 데이터는 어떻게 XML로 표현 하나요?"

네.. 역시나 불가능하다면 말이 안되며..

Orders 테이블

OrderNo Date Customer
1235 01/01/2001 1001
1236 01/01/2001 1002

Items테이블

ItemNo OrderNo ProductID Price Quantity
1 1235 1432 12.99 2
2 1235 1678 11.49 1
3 1236 1432 12.99 3

이 이렇게 구성되어 있을때.. 양측을 OrderNo로 조인할 수 있겠지요.

이때 XML데이터는?

 

<Orders>

<Order OrderNo=‘1235’ Date=‘01/01/2001’ Customer=‘1001’>

<Item ProductID=‘1432’ Price=‘12.99’ Quantity=‘2’/>

<Item ProductID=‘1678’ Price=‘11.49’ Quantity=‘1’/>

</Order>

<Order OrderNo=‘1236’ Date=‘01/01/2001’ Customer=‘1002’>

<Item ProductID=‘1432’ Price=‘12.99’ Quantity=‘3’/>

</Order>

</Orders>

 

이렇게 표현될 수 있습니다. - 속성 중심적 표현이며 다르게 얼마든지 가능합니다.

못할게 없다는 것이지요..

초점을 맞출 그림을 보여드리면? 바로 이것입니다.

이렇게 보시는 바와 같이..

관계형 데이터 -> XML -> 관계형 데이터로 처리한다는 것이지요.

그리고 이 작업을 수월하게 해주는 것이 바로 SQL2000의 XML 통합 기능입니다.

한발자국 정도 핵심에 다가 섰네요.

"에고고.. 저게 다 인가요?? 너무 단순하네요..?!!?!!"

처음에도 말씀드렸지만 XML은 만만한 녀석이 아닙니다.

이러한 단순함이 실제 비지니스 프로세스와 엮여서 다양한 작업이 일어난다는 것이죠.

예를들면.. 

(출처 - MS의 홍영준님의 PT중 일부 입니다.)

이렇게.. 비지니스 프로세스에서 데이터를 주고 받을 경우 사용이 가능하지요.

조금더 생각해 보면 다양한 비지니스 프로세스로 이용이 가능합니다.

또한 MS의 BizTalk서버는 이를 이용 다양한 데이터 통합을 지원하는

비지니스 프로세스를 구축할 수 있도록 도움을 줍니다. 

비즈톡서버 웹사이트

국내M사 비즈톡 통합 솔루션 구축 사례

특히 국내의 적용 사례는.. 일종의 완전한 Web-EDI솔루션으로 비즈톡과 XML을 이용하는

좋은 사례를 보여주니 많은 도움 되시길 바랍니다.

그뿐아니라.. XML은 순수한 텍스트 형태의 데이터이기 때문에 얼마든지 Firewall을 넘어

데이터를 주고 받을 수 있습니다.

모든 데이터의 XML처리를 위해서..

SOAP(Simple Object Access Protocol)

UDDI(Universal Description, Discovery and Integration)

WSDL(Web Services Description Language)

을 이용해 기존의 시스템을 뭉개고 새로 구축할 필요가 없는 

완전한 데이터 통합을 얻어낼 수 있지요. 이 데이터 통합이라는 것이 바로

XML의 큰 매력이라는 것입니다. - 위의 세가지는 .NET에서 사용될 녀석들입니다.

 

여러가지 XML과 관련된 이야기를 들었으며.. 그외 SQL서버의 XML통합기능에서

사용되는 몇몇 키워드를 조금더 알아 보면...

 

SELECT ... FOR ... XML

간단히 일반 SQL의 SELECT구문 뒤에 FOR XML 이라고 붙이면? XML 형식의

데이터가 리턴 됩니다. - SQL서버 엔진 자체에 XML처리 기능이 붙어 있는

것이지요.

 

ADO에서 XML데이터 접근

XML역시 데이터입니다. - 누누히 말씀 드렸지요. 어플리케이션에서 생성된..

또는 이미 존재하는 XML데이터에 연결후 이 데이터를 적절히 처리하는 부분도 

있습니다. ^_^

 

IIS에 SQLXML 지원 구성

많은 분들이 알고 계실 것입니다. IIS에 가상 디렉토리를 하나 구성해..

이 가상디렉토리에서 SQL서버의 데이터를 쉽게 XML로 처리하거나.. 등등의

여러 작업을 하는 것이지요.

 

XML 템플릿(Template)

사실 가장 많이 사용되는 부분으로.. IIS에 SQLXML지원 구성에.. Template을 생성하고

이곳에 XML화일을 두는 것입니다. XML 화일 내부에는 SQL쿼리가 들어가며..

ASP나 PHP처럼 원본 쿼리를 숨길 수 있지요. 아마도.. 개발하시는 분들은 많이 

이부분을 사용하게 될 것입니다. ^_^

정보문화사에서 제공해 주신 SQLXML의 템플릿 

 

XSD(XML Schema Definition)

이녀석은 2001년 5월 표준안이 지정된 것으로.. 그전까지는 DTD / XDR으로 사용

되었습니다. 간단히 XML데이터에 제약을 가하여 정확한 데이터를 항상 유지하게

도움을 주는 녀석이라고 보시면 좋습니다. 기존에 사용하던 DTD는 XML과 DTD문법을

모두 알아야 한다는 단점이 있었지요.. XDR은 MS에서 제안한 것으로 XML문법으로

XML데이터를 정의하는 방식이었으며 이 XDR과 XSD는 대단히 유사합니다.-

W3C가 MS의 XDR을 많이 참고해 생성했기 때문입니다...

뭐 이제는 XSD가 확실하니 이녀석을 많이 공부하시길 바랍니다.

아.. 참고로..이미 XDR을 사용하신 분들이 XSD로 변환을 위해서.....

XDR스키마를 XSD스키마로변환문서(MS링크)

또한 XSD는 MSXML4.0버젼부터 완벽하게 지원합니다.

MSXML4.0(MS링크) MSXML은 IE에 포함되는 XML파서로 XML구문 규칙을 판별하게

되는 녀석이며.. 2002년 1월 현재 4.0버젼이 릴리즈 되어 있습니다.

 

OpenXML

이녀석도.. 주요한 SQL2000의 XML지원 기능의 일부로..

데이터 수정에 가끔 사용됩니다. - XML데이터 수정에 사용되는 것으로..

이는 또한 Updategram이라고 하는 녀석으로 많이 옮겨가는 상황이니..

Updategram을 주로 참고해 보시길 바랍니다.

 

Updategram

데이터 삽입 / 수정 / 삭제시 사용하게 되며..

Before와 After라는 태그 이미지를 이용해.. 이 변경 작업을 수행합니다.

참고로 이 updategram은.. SQLXML이라고 하며

SQLServer2000 Web Release2 For XML(MS링크) 또는 웹릴리즈 1 이상을 

설치해야만 사용이 가능 하며

SQL2000의 버젼에 따라 한글 / 영문 릴리즈를 정확히 설치 하셔야 합니다.

(제가 이전에 영문만 나온걸 보고 영문 설치했다가 SQL서버를 다시 밀었습니다. T.T)

2002년 1월 현재 SQLXML은 릴리즈 버젼2 까지 나와 있으며 3는 베타 중입니다.

 

간단한 updategram의 샘플을 보여 드리면?

 

<?xml version="1.0”?>

<employeeupdate xmlns:updg="urn:schemas-microsoft-com:xml-updategram">

<updg:sync>

<updg:before>

<Employees EmployeeID="1"/>

</updg:before>

<updg:after>

<Employees HomePhone="555-112233"/>

</updg:after>

</updg:sync>

</employeeupdate>

 

이렇게 사용이 됩니다.

Before이미지에 조건을 주고.. After이미지에 변환할 값을 지정하면 되는 것이지요.

 

Bulk XML 컴퍼넌트

SQL서버에는 Bulk Insert나 BCP가 있는 것처럼... 대용량의 XML데이터를 다루기 위한

Bulk XML역시 있습니다. - DTS강좌를 참고하시길 바랍니다.

updategram이 대단히 많은 데이터를 처리하기에는 부적적하기 때문입니다. ^_^

이 Bulk XML은 컴퍼넌트로 VB등에서 호출해 사용하셔야만 합니다.

사용되는 예제는

 

Set objBulkLoad = CreateObject(“SQLXMLBulkLoad.SQLXMLBulkLoad”)

objBulkLoad.ConnectionString = _

provider=SQLOLEDB;data source=DBServer1;database=Northwind;” & _

Integrated Security=SSPI;"

objBulkLoad.Execute c:\CatalogSchema.xml, c:\CatalogData.xml

Set objBulkLoad = Nothing

 

식으로 사용이 되며 자세한 샘플은 다른 책이나 MS사이트를 참고 하시면

도움 되실 겁니다. ^_^

 

Biztalk Server

으음..  2002년 1월 현재 Biztalk에 대한 정보는 많지 않습니다만.. 제가 몰라서... -_-;;

제가 알고있는 지식한도 내에서 약간 적어 보겠습니다.

비즈톡의 서비스는 크게 두가지로 나뉘어집니다.

1. 오케스트레이션

2. 메세징

오케스트레이션은 구성요소 / 비즈톡 시스템의 통합을 구성하는 그림을 말하며

비지오라는 툴로 이 구성도를 작성할 수 있습니다.

비즈톡 오케스트레이션 디자이너로 구성된 승인 화면

출처 : Microsoft - MSDN

또한 메세징 서비스로.. 일종의 큐시스템처럼.. 들어오는 데이터 조절 / 들어온 데이터

(EDI문서)를 XML데이터로 변환 / 여러가지 처리 작업 / 적절한 문서로 변환후 / 문서 전송

이러한 작업이 가능합니다.

중요한것은.. 비즈톡은 현존하는 모든 문서를 다룰 수 있으며 내부적으로 이 현존하는 모든

문서들을 XML로 변환후 다양한 매핑 / 전처리 / 후처리를 해서.. 목표 문서(EDI)로 생성후

필요한 장소에 전송할 수 있다는 점이지요.

자세한 사항은 MS의 비즈톡 사이트를 참고해 보시길 바랍니다.

 

자.. 뭐 이렇게 여러가지 키워드 들에 대해서.. 간단간단하게 알아는 보았습니다.

대충 느낌이 오실 겁니다...

XML.. 쉽지 않습니다. 계속 준비하시고 공부하셔야 합니다.

자.. 이정도로 맛보기를 그치도록 하구요.. 실제 SQL서버에 이를 구축하고 사용하는 여러

예제들을 조금더 살펴 보도록 하겠습니다. ^_^

 

 


13. XML과 SQLServer2000의 통합 - 3. SQL서버와 XML문서





profile

부족하지만, SQLER의 누군가와 함께한 나눔을 통해 제가 더 많이 즐거웠습니다.
SQLER와 함께 즐거워 할수록, 그 나눔을 통해 더 많은 기회와 가치를 발견하게 되었습니다.
나눔의 생각이 앞으로도 계속, SQLER를 움직일 것입니다.

코난, 김대우 / SQLER 운영자 / 골라먹는 SQLER RSS 정보 구독 / 실시간 SQLER 소식 uxkorea 트위터