SSISO Community

시소당

Tip : 애플리케이션간 통신에 XML을 직접 사용하는 방법

Tip : 애플리케이션간 통신에 XML을 직접 사용하는 방법
직접적인 접근방식

Level: Intermediate

Uche Ogbuji
Principal Consultant, Fourthought, Inc.
2004년 1월 15일

SOAP 기술은 일반적으로 HTTP를 통해 XML을 교환하는 것이지만 반론도 있다. 논의의 대부분이 애플리케이션간 통신에 XML을 직접 사용하는 방법에 대한 것이다.

SOAP은 XML로 인코딩 된 메시지를 패키징 및 교환하는 수단을 제공한다. SOAP은 웹 서비스에 필요한 다양한 기능 레이어들 중 기본 레이어로서 설계되었다. 하지만 SOAP은 인터넷 프로토콜을 통해 XML을 교환하는 가장 직접적인 방법은 아니다. 기본적인 웹 아키텍쳐는 HTML 페이지만을 교환할 수 있도록 되어있다. 분명한 아이템들은 이미지와 PDF 같은 대중적인 포맷이다. 다른 시스템은 웹 에서 XML을 직접 저장(grab) 할 수 있다.(RSS, Atom, Creative Commons, XSLT stylesheets, SVG 등). 물론 적당한 XML 파일을 웹 서버에 두어 고유의 서비스를 만들 수 있다. HTTP POST, PUT, DELETE 명령어를 적용하여 쓰기 작동을 지원할 수도 있다. 이 글에서는 WSDL을 사용하여 이러한 간단한 서비스를 설명하는 방법을 소개한다.

몇몇 전문가들은 핵심 웹 아키텍쳐만을 의존하는 서비스를 설명할 때 REpresentational State Transfer (REST)를 사용한다. SOAP을 사용할 때와 REST를 사용할 때의 규칙은 없다. 하지만 웹 서비스 태스크에 SOAP이 아닌 REST를 사용할 것을 고려해보는 것은 중요하다. 웹 프록시, 거미(spider), 크롤러(crawler), 에이전트, 브라우저 등 HTTP를 통해 전달된 XML을 처리할 수 있다.

HTTP, FTP 등을 통해 검색된 XML을 처리할 수 있는 다른 모든 XML 기술을 고려해보는 것도 중요하다. 표준 document() 함수를 사용하여 REST 서비스에서 검색된 XML을 쉽게 결합할 수 있지만 SOAP 리퀘스트를 결합하는 유일한 방법은 제품 확장을 통해서 가능하다. REST 서비스를 통해 사용할 수 있는 XML 문서들은 XInclude를 통해 포함될 수 있거나 XLink나 심지어 기본적인 HTML과 XHTML 링크를 사용하여 링크될 수 있다. 이들 중 어떤 것도 SOAP을 통해서 단순하게 이루어지는 것은 없다.

WSDL의 역할
SOAP 을 사용하지는 않더라도 WSDL은 사용할 수 있다. WSDL은 HTTP를 통해 RPC 스타일의 SOAP 외의 규약을 위한 바인딩을 지원했다. 하지만 이러한 대안 바인딩은 자주 사용되지는 않는다. WSDL의 복잡함이 이유 중 하나이다. 단순한 웹 액세스를 설명하는 경우 과잉처럼 느껴진다. Listing 1은 RSS 서비스의 일반적인 접근방식을 나타내는 WSDL 1.2 예제이다.

Listing 1. WSDL 1.2 예제

<?xml version='1.0' encoding='UTF-8'?>
<definitions name='rss-service'
targetNamespace='http://example.com/rss-service/'
xmlns='http://www.w3.org/2003/06/wsdl'
xmlns:http='http://www.w3.org/2003/06/wsdl/http'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
>

<message name='rss-request'>
<part name='feed' type='xsd:string'/>
</message>

<message name='retrieved-rss'>
<part name='rss-doc' mimeType='application/rss+xml'/>
</message>

<interface name='rss-interface'>
<operation name='retrieve-rss'>
<input name='rss-request'/>
<output name='retrieved-rss'/>
</operation>
</interface>

<binding name='rss-interface-http1' type='rss-interface'>
<http:binding verb='GET'/>

<operation name='retrieve-rss'>
<http:operation location='syndication/{feed}.rss'/>
<input>
<!-- no parameters other than the one already worked
into the URL -->
</input>
<output>
<!-- no parameters because response is explicitly
the HTTP response -->
</output>
</operation>
</binding>

</definitions>

message 엘리먼트는 실제 HTTP 요청과 응답이다. part 엘리먼트는 HTTP 교환을 통해 스팩을 제공하는 정보이다. 요청의 경우 RSS feed filename의 이름을 매개변수화 한다. RSS 0.91 feed와 RSS 1.0 feed를 커버하기 위해 같은 WSDL을 사용할 수 있다. 이 바인딩은 저수준의 HTTP 1.1을 담당하는 디스크립션을 지정하는 것이다. http:operation에 대한 location 애트리뷰트는 feed 매개변수를 이것의 역할로 매핑하여 서버에서 파일 이름을 선택할 때 쓰이도록 한다. 스퀘어 브래킷은 WSDL 1.2 규약이다.

기술자료

775 view

4.0 stars