태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
페이지를 읽고 있습니다. ( 아쿠아바다's Blog )
분류 전체보기 (769)
쉐어포인트 (24)
Exchange (12)
SQL (121)
XML (36)
WEB (294)
O / S (97)
삶의향기 (162)
기획 (19)
RSS 피드(IE 7.0부터 기본 지원됩니다. 이전 버전 사용자는 접합한 툴을 사용하세요!!)

서버측 XSL을 사용한 사전 렌더링

XML 2007/06/07 13:47 by 아쿠아바다

서버측 XSL을 사용한 사전 렌더링: 자주 액세스되는 데이터 사용 웹 페이지 미리 생성

 

이 기사는 독자가 HTML, ASP, XML, XSL을 잘 알고 있다는 전제 하에 작성되었습니다.

난이도 수준    1   2   3 

요약: 동적 데이터를 사용하는 페이지가 최신 기술을 사용하는 여러 웹 사이트의 기초가 되고 있습니다. 사전 렌더링 시스템은 비휘발성 정보가 포함된, 자주 액세스되는 페이지를 미리 생성함으로써 데이터를 사용하는 웹 사이트의 성능과 관리 효율성을 향상시킬 수 있습니다.
여기서는 XSL(Extensible Stylesheet Language)을 사용하여 데이터와 레이아웃 정보를 모든 웹 브라우저와 호환 가능한 HTML로 병합하는 서버측 솔루션의 예를 보여 드리겠습니다. 이와 같이 웹 페이지를 미리 렌더링하는 기술을 사용하면 데이터베이스 백엔드의 로드를 줄이고 사용자의 성능을 향상시킬 수 있습니다.


웹 컨텐트는 정적인 정보에서 시작하여 데이터 사용 페이지를 거쳐 지금은 동적 데이터를 사용하는 컨텐트로 발전해 왔습니다. 하지만 웹 개발자들의 공통된 신념은 컨텐트가 데이터 사용 방식일 경우 동적으로 표시되어야 한다는 것입니다. 이 경우 Microsoft® 도구를 사용하여 웹 컨텐트를 개발하려면 사이트에 ASP를 사용해야만 할 것으로 생각하기 쉽지만 다른 방법으로도 데이터 사용 사이트를 구축할 수 있습니다. 사전 렌더링 시스템은 자주 액세스되는 데이터 사용 페이지를 미리 표시할 수 있으므로 더 나은 성능과 관리 효율성, 브라우저 간 호환성을 제공합니다.

사전 렌더링 시스템이란?
사전 렌더링 시스템은 사용자의 요청이 있기 전에 단계적으로 웹 컨텐트를 작성하는 프로세스입니다. 즉, ASP에서처럼 동적 페이지가 즉석에서 처음부터 표시되는 것이 아니라, 처음 페이지에 대한 요청이 있기 전에 페이지의 일부가 미리 작성됩니다. 여기에는 데이터를 정적 컨텐트와 병합하거나 특정 조건에 따라 ASP 스크립트 구역을 작성하는 것 등이 포함될 수 있습니다.
이러한 기능을 처음으로 활용한 사이트에 대한 설명이 Microsoft Internet Developer의 1999년 11월호에 실린 Wayne Berry의 기사, "Architecting the 15Seconds.com Site"(http://www.microsoft.com/mind/1199/fifteen/fifteen.htm)에 나와 있습니다. Wayne은 자신의 사이트(http://www.15Seconds.com)에서 XBuilder(http://www.xbuilder.net)라는 응용 프로그램을 사용하여 기사를 처리하고 컨텐트를 단계적으로 작성했습니다. Wayne은 이러한 시스템을 구현함으로써 성능 및 관리 효율성 향상이라는 두 가지 혜택을 얻을 수 있었습니다.
이 방법을 사용하면 요청 시 전체 페이지를 작성할 필요가 없으므로 페이지 만드는 작업을 일부 오프로드할 수 있습니다. 대부분의 사이트가 데이터 사용 페이지를 즉석에서 만들어 수많은 사용자에게 같은 페이지를 제공하고 있는 상황에서 이러한 페이지를 미리 만들면 안되는 이유가 있을까요? 같은 페이지를 매번 작성하는 대신에 분석을 통해 미리 표시할 수 있는 페이지나 영역을 결정한 다음, 이러한 페이지를 단계적으로 작성하면 됩니다. 특정 페이지에서의 데이터 액세스를 없애고 ASP 및 ADO(ActiveX® Data Objects)에 의해 표시되는 페이지에서 정적인 HTML 페이지로 이동함으로써 성능을 10~20배 가량 향상시킬 수 있습니다.
또한 주의 깊게 아키텍처를 구축함으로써 컨텐트와 데이터를 분리할 수도 있습니다. 이렇게 되면 컨텐트 작성자는 오로지 컨텐트에만 전념하고, 웹 개발자는 개발에만 전념할 수 있습니다.

컨텐트 이해
사전 렌더링 시스템을 이해하는 핵심은 컨텐트에 대해 잘 아는 것입니다. 즉, 어떤 영역이 동적인 부분이고, 어떤 영역은 정적이며, 데이터를 사용하는 부분과 휘발성 데이터를 알아야 합니다.
이 점을 설명하기 위해 데이터 휘발성 개념을 잠시 소개하겠습니다. 컨텐트를 드라이브하는 데 사용되는 데이터는 휘발성이 높은 데이터로부터 정적인 데이터가 있습니다. 휘발성이 높은 데이터의 예로는 예금 잔고가 있습니다. 이러한 데이터는 자주 변경되고 현재 상태에서 액세스할 수 있어야 합니다. 정적 데이터는 이름이나 생년 월일과 같이 변경되지 않는 데이터입니다.
휘발성이 높은 데이터는 단계별 작성 프로세스로 쉽게 통합되지 않으므로 사전 렌더링 시스템과 잘 호환이 되지 않습니다. 휘발성이 높은 데이터가 완전히 호환이 불가능한 것은 아니지만 대부분의 경우 ADO와 같은 기존 방법을 통해 액세스해야 합니다. 반면, 완전히 정적인 데이터는 사전 렌더링 시스템과 쉽게 호환이 가능합니다. 이러한 데이터는 일정 주기마다 컨텐트와 병합되고 데이터가 변경되지 않는 한 그 상태로 유지됩니다. 정적인 데이터가 변경될 경우에는 다음에 컨텐트를 작성할 때 쉽게 통합할 수 있습니다.
데이터의 휘발성이 높을 수록 사전 렌더링 시스템을 통해 컨텐트를 자주 실행해야 합니다. 이것은 작업 수행 빈도에 따라 매우 비용이 많이 드는 작업이 되거나 간단한 프로세스가 될 수 있습니다. 데이터 변화량을 실행하여 처리될 컨텐트를 매우 작은 하위 집합으로 축소할 수 있습니다. 축소된 데이터 집합을 사용하면 시기 적절하게 데이터를 제공하는 등 단계별 작성 프로세스가 크게 간소화됩니다.

가능한 구현
지금까지 이론을 소개했으므로 사전 렌더링 시스템이 실제 경우에 어떻게 적용될 수 있는지 살펴봅시다. 제품 카탈로그가 포함된 일반적인 B2C(비즈니스 대 고객 간) 전자 상거래 사이트의 경우를 생각해 봅시다. 제품 카탈로그는 대개 데이터베이스 백엔드에 저장되며 제품 데이터가 매우 정적이기 때문에 사전 렌더링 시스템의 적절한 대상이 됩니다.
Microsoft에서 구축한 많은 전자 상거래 솔루션은 ASP 및 ADO를 통해 즉시 제품 데이터를 액세스하고 페이지를 작성합니다. 사전 렌더링 시스템은 해당 데이터의 휘발성에 따라 단계적으로 데이터를 표시합니다. 각 제품의 최신 수정 날짜와 사이트의 최신 작성 날짜를 비교하여 변화량에 따라 제품 페이지를 다시 만들어야 합니다.

렌더링 솔루션으로서의 XSL
XSL(Extensible Stylesheet Language)은 데이터와 레이아웃을 병합하여 컨텐트를 제공하는 훌륭한 솔루션입니다. XSL은 XML의 특성을 통해 데이터를 레이아웃과 분리할 수 있습니다. 데이터를 XML 형식으로 제공할 수 있으면 XSL을 사용하여 컨텐트를 제공할 수 있습니다.
XSL의 또 다른 장점은 서로 다른 브라우저 간 호환이 가능한 HTML을 작성할 수 있다는 것입니다. 페이지가 전달되기 전에 미리 작성되므로 브라우저 간에 호환이 가능한 HTML을 만들 수 있습니다. 또한 XML/XSL 병합 결과는 텍스트이기 때문에 XSL을 사용하여 ASP 페이지와 작성 스크립트 자체를 모두 만들 수도 있습니다.
이 글에서 XSL은 서버측 솔루션으로 사용됩니다. 즉, XML/XSL의 병합이나 HTML 또는 ASP로의 변환이 서버에서만 발생합니다. 이와 달리, Microsoft Internet Explorer 5.0에서 XML 문서 개체 모델(DOM)을 기반으로 클라이언트측 솔루션을 만들 수도 있습니다. 이 방법을 사용하면 레이아웃에 XSL을 사용하여 XML 데이터를 통해 웹 사이트 컨텐트를 별도로 제공할 수 있습니다. 그러나 여기서는 브라우저 간 호환성 지원을 위해 서버측 솔루션에 대해서만 설명하겠습니다.
XSL은 형식이 정확한 XML을 처리하므로 XSL을 사용하려면 데이터를 XML 형식으로 제공해야만 합니다. 그림 1에 표시된 간략한 제품 카탈로그 데이터를 살펴봅시다. 이해를 돕기 위해 이 예제에서는 이 데이터를 정적인 형식으로 사용하겠습니다. 실제 환경에서는 원하는 백엔드를 사용하여 데이터를 제공할 수 있습니다. 또 다른 방법으로는 ASP를 통해 XML을 작성하거나 SQL Server용 XML ISAPI 필터를 사용할 수 있습니다(http://msdn.microsoft.com/xml/articles/xmlsql/default.asp 참조).
사전 렌더링 시스템의 장점 중 하나는 데이터를 여러 가지 방법으로 제공할 수 있는 융통성입니다. 위에서 설명한 방법을 통해 데이터를 작성 즉시 라이브로 제공하거나 정적 데이터 파일을 통해 제공할 수 있습니다. 또한 라이브 데이터의 성능은 별로 중요하지 않습니다. 모든 데이터 요청은 연속적으로 발생하므로 데이터 제공자에게 발생할 수 있는 동시 요청 수에 대해 걱정할 필요가 없습니다.

컨텐트 작성
작성 프로세스에는 최종 컨텐트를 만들기 위해 XSL 스타일시트 집합과 XML 데이터를 병합하는 것이 포함됩니다. 이 목적을 달성하기 위해 Matt Oshry가 MSDN 온라인(http://msdn.microsoft.com/xml/articles/codetour_xml.asp)을 위해 작성한 코드의 일부를 사용했습니다. Matt는 XML 및 XSL 파일을 출력 파일로 병합하는 인터페이스를 제공하는 응용 프로그램을 Visual Basic으로 만들었습니다. 저는 사용자 인터페이스 없이 커맨드 라인 인수를 취하도록 그의 코드를 수정하고 이름을 xml2xml.exe로 지정했습니다. 원본 파일 인수는 실제 파일 경로와 URL을 취합니다. 이 유틸리티를 사용하면 데이터와 XSL을 제공하여 컨텐트를 만드는 배치 파일을 작성할 수 있습니다. XML2XML은 다음 커맨드 라인 구문을 사용합니다.

XML2XML /sSourceFile /tTemplateFile /oOutputFile

마스터 빌드 배치 파일에는 다음이 포함됩니다.

Build.cmd XML2XML /sProducts.xml /tBuild.xsl /oBuildScript.cmd Call BuildScript.cmd

컨텐트를 작성하는 첫 번째 단계는 배치 파일을 만드는 것입니다. XML 카탈로그 데이터와 내부에 포함된 SKU 번호, 그림 2에 표시된 XSL 템플릿을 사용하여 Windows NT 명령 파일을 만들 수 있습니다.
템플릿이 수행하는 첫 번째 작업은 제품 목록을 작성하여 Default.htm에 표시하는 명령을 만드는 것입니다. 그림 3에 표시된 Products.xsl은 각 제품 설명 페이지로 연결되는 하이퍼링크가 포함된 기본 제품 테이블을 만듭니다. 이러한 기본 제품 목록 페이지는 그림 4와 같이 표시됩니다. 이것은 간단한 페이지이며 전체 페이지로 이동하는 것도 매우 쉽습니다.

Figure 4 A Basic Product Listing

그림 4 기본 제품 목록

다음으로, 작성 스크립트는 각 제품 설명 페이지의 작성 명령을 만듭니다. 출력 파일 이름은 Overviewxx.htm이며, xx는 제품의 SKU 번호입니다. 이 프로세스는 XML 데이터에 동일한 XSL 템플릿을 반복적으로 적용합니다. XSL은 정적이므로 각 페이지를 만들 때마다 제공되는 XML 데이터가 변경되어야 합니다. 이를 위해 저는 ASP를 사용했습니다. 이것은 XML preview for SQL Server(http://msdn.microsoft.com/workshop/ xml/articles/xmlsql/sqlxml_prev.asp)와 같은 기술이 적합한 경우입니다.
이 예제를 위해, GetProduct.asp에는 데이터베이스 백엔드(그림 5 참조)와 독립적으로 작동되도록 하는 부울 스위치가 포함됩니다. 데이터베이스에서 데이터를 가져오는 정확한 논리는 사용 중인 데이터베이스 스키마에 따라 달라져야 합니다.

Figure 6 A Sample Product Overview

그림 6 예제 제품 개요

그림 6에는 예제 제품 개요 페이지가 표시되어 있습니다. Add To Basket 링크는 쇼핑 바구니에 항목 추가를 처리하는 ASP 페이지로 이동합니다. 이것은 ASP 쇼핑 바구니 처리기에서 사용할 수 있도록 URL에 SKU를 전달합니다. 쇼핑 바구니를 처리하는 ASP는 SKU와 수량을 쿠키에 저장하거나 고유 키를 쿠키에 저장하여 쇼핑 바구니 항목을 데이터베이스 백엔드에 저장할 수 있습니다. 고유 키는 나중에 데이터베이스에서 쇼핑 바구니를 가져올 때 사용됩니다. 이 솔루션의 좋은 점은 웹 그룹 호환성으로서 제품 카탈로그의 정적 HTML 구현의 확장성을 보완합니다.

향후 필요한 작업
첫 번째로 필요한 단계는 XML/XSL 병합을 수행할 수 있는 유틸리티를 얻는 것입니다. Matt Oshry의 예를 사용하면 언어 선택에 관계 없이 실행이 가능한 좋은 알고리즘이 제공됩니다. 프로젝트를 향상시키기 위해 그림 7에 표시된 것처럼 XML2XML을 개체로 만들 수 있습니다. 이렇게 하면 Windows 스크립트 호스트 파일에서 개체를 한 번 인스턴스화하고 계속 재사용할 수 있습니다. 또한 여러 스크립트를 동시에 실행하여 생성 프로세스를 빠르게 수행할 수 있도록 향상된 스레딩 지원을 추가할 수 있습니다.
이 솔루션은 ASP나 HTML 컨텐트를 제공하는 방법을 보여 줍니다. 그러나 XML 및 XSL의 동적인 서버측 병합에 대한 필요는 처리하지 않습니다. Internet Explorer 5.0은 클라이언트측 XML/XSL 병합을 처리할 수 있지만 서버측 병합은 ISAPI나 ASP에서 구현해야 합니다. 위에서 설명한 것처럼, Wayne Berry의 XBuilder는 서버측 병합을 수행할 수 있으며 XSL의 발전이 가속화됨에 따라 멀지 않아 다른 솔루션도 제공되리라고 생각합니다. 보다 완벽한 XML 솔루션을 사용하려면 다음과 같은 방법이 있습니다.
XML/XSL 병합 결과 XML이 만들어지므로 다중 패스 생성 프로세스를 설계할 수 있는 기회가 있습니다. 이렇게 되면 사이트 템플릿을 만들고, 페이지 컨텐트를 별도로 만들고, 기록 없이 재사용할 수 있는 구성 요소를 분리할 수 있습니다.
생성 프로세스는 기본적으로 전처리 환경이므로 실제로 전처리 지향적인 태그와 특성을 정의할 수 있습니다. 따라서 디버그를 작성하거나, 사이트 버전을 릴리스하거나, 출력 결과를 특정 브라우저로 보낼 수 있습니다. 대상 브라우저는 Internet Explorer 5.0의 XSL 지원을 활용하고 브라우저에서 최종 XML/XSL 병합을 수행하여 서버 소통량을 줄일 수 있습니다.



관련 기사:
http://msdn.microsoft.com/downloads/webtechnology/ xml/xslisapi.asp

http://msdn.microsoft.com/xml/articles/xmlsql/default.asp

http://msdn.microsoft.com/xml/articles/codetour_xml.asp

http://msdn.microsoft.com/library/psdk/xmlsdk/xmld9yg5.htm

배경 정보:
http://www.microsoft.com/mind/1199/fifteen/fifteen.htm

http://msdn.microsoft.com/xml/general/


Paul Enfield는 중소기업용 응용 프로그램 서비스의 주요 공급업체인 vJungle.com의 선임 웹 개발자입니다. 그의 전문 분야는 Shop.Microsoft.com 및 다른 전자 상거래 솔루션에 대한 경험을 통해 확장성이 뛰어난 웹 솔루션을 디자인하는 것이며, 가끔 기술 관련 기사를 기고합니다. 전자 메일 주소는 paulen@cnw.com입니다.

'XML' 카테고리의 다른 글

XML 데이터  (0) 2007/06/07
[본문 스크랩] XML 관련 링크  (0) 2007/06/07
서버측 XSL을 사용한 사전 렌더링  (0) 2007/06/07
XML 문법  (0) 2007/06/07
XML의 속성  (0) 2007/06/07
브라우져에서의 XML  (0) 2007/06/07
좀더 흥미로운 내용이 많이 있습니다.. HOME > XML를 확인하세요
TAG ,   
0 Trackback, 0 Comment, :
1  ... 499 500 501 502 503 504 505 506 507  ... 769 
Statistics Graph
Total : 557,403 Today : 33