웹 서비스 정책
본 장에서는 웹 서비스의 정책 설정에 대한 기본적인 개념과 함께 간단한 시나리오에 대해 설명한다. 각각의 세부적인 웹 서비스 정책 설정에 관한 내용은 이후 각 장에서 자세히 설명한다.
1. 개요
JEUS 웹 서비스는 웹 서비스 정책(WS-Policy)을 지원한다. 웹 서비스 정책이란 어떤 웹 서비스가 가지고 있는 여러 가지 기능들(JEUS 웹 서비스에서는 WS-Addressing, WS-RM, WS-TX, WS-Security)의 정책을 노출시키기 위한 표준 명세이다.
JEUS 웹 서비스에서의 웹 서비스 정책 시나리오는 크게 서버 정책과 클라이언트 정책으로 구분할 수 있다. 서버는 WSDL을 통해 웹 서비스정책을 노출시킬 수 있고, 클라이언트는 웹 서비스의 정책에 맞는 기능을 자동으로 구성한다.
웹 서비스의 각각 정책 설정은 웹 서비스 Addressing, 신뢰성 메시징 기술, 웹 서비스 트랜잭션, 웹 서비스 보안의 내용을 참고한다.
2. 웹 서비스의 정책(WS-Policy)
본 절에서는 일반적인 웹 서비스의 정책(WS-Policy)에 대해 설명한다.
일반적인 웹 서비스 정책의 특징은 다음과 같다.
-
웹 서비스 정책 명세는 표현하기가 매우 유연하고 확장성이 있도록 설계되어 있다.
-
웹 서비스 정책은 하나 이상의 정책 전제(policy assertion)를 통해 표현된다.
자세한 표준 웹 서비스의 정책에 관한 스키마의 내용은 http://schemas.xmlsoap.org/ws/2004/09/policy/ws-policy.xsd를 참고한다. |
-
웹 서비스 정책 프레임워크(Framework)*
다음은 웹 서비스 정책 프레임워크에 대한 설명이다.
-
정책 컨테이너(Policy Container)
웹 서비스 정책 프레임워크에서 가장 핵심이 되는 주요 컴퍼넌트는 "Policy"라는 element로 표현된 정책 컨테이너이다. 이 element는 ID 값을 부여받을 수 있어 다른 곳에서 이를 참조하거나 재사용할 수 있다. 또한 이 element는 전제(assertion) 또는 전제들의 조합들로 구성된다. 이러한 전제들은 정책 연산자(Operator)들로 이루어진다.
-
정책 연산자(Operator)
웹 서비스 정책 명세는 2개의 연산자와 하나의 속성을 정의하고 있다.
-
ExactlyOne Operator
하위 element에 전체 또는 연산자들이 여러 개인 경우 이 중 어느 하나만을 선택하여 정책으로 가지고 있겠다는 것을 나타내기 위한 연산자이다.
다음은 연산자 사용에 대한 예이다.
<wsp:Policy> <wsp:ExactlyOne> <wsse:SecurityToken> <wsse:Token ... <wsse: ... </wsp:Policy>
-
All Operator
하위 element에 전체 또는 연산자들이 어러 개인 경우 이 중 모든 것을 취합하여 정책으로 가지고 있겠다는 것을 나타내기 위한 연산자이다.
다음은 연산자 사용에 대한 예이다.
<wsp:Policy> <wsp:All> <wsse:SecurityToken> <wsse:Token ... </wsp:Policy>
-
Optional Operator
하위 element에 전제 또는 연산자들이 이 속성으로 선언되어 있을 때 선택적으로 취할 수 있음을 나타내기 위한 연산자이다.
다음은 연산자 사용에 대한 예이다.
<wsp:Policy> <wsse:Integrity wsp:optional="true"> ... </wsp:Policy>
-
3. 서버 정책 설정
서버의 웹 서비스 정책 설정 시나리오는 WSDL로부터 웹 서비스를 구성하는 시나리오와 Java 클래스로부터 웹 서비스를 구성하는 시나리오로 나눌 수 있다.
3.1. WSDL로부터 웹 서비스 구성
WSDL 문서로부터 웹 서비스 정책 설정이 적용된 웹 서비스를 구성하는 시나리오는 다음과 같다.
-
WSDL 문서를 작성한다.
-
WSDL 문서에 웹 서비스 정책 설정을 한다.
-
wsimport 툴을 통해 Java Bean 객체들을 생성한다.
-
서비스 구현 클래스를 작성한다.
-
패키지된 서비스를 JEUS 서버에 deploy한다.
디렉터리 구조
WSDL 문서로부터 웹 서비스 정책 설정이 적용된 JEUS 웹 서비스를 패키징한다. 서버에 해당하는 웹 서비스를 WSDL 문서로부터 구성할 때의 디렉터리는 다음과 같다.
war_root |- WEB-INF |- classes | |- ... (SEI, JAX-WS artifacts, Handler, Validator) |- wsdl |- addnumbers.wsdl
3.2. Java 클래스로부터 웹 서비스 구성
Java 클래스로부터 웹 서비스의 정책이 적용된 웹 서비스를 생성하기 위해서는 다음과 같이 wsgen 툴에 추가적으로 -policy 기능을 이용하여 wsit-endpoint.xml 파일을 생성해야 한다.
$ wsgen fromjava.server.AddNumbersImpl -d web/WEB-INF -policy service-config.xml
다음은 service-config.xml의 실제 모습이다. 자세한 설정 내용에 관한 것은 이어지는 각각의 여러 가지 웹 서비스 기능을 위한 장에서 자세히 살펴보기로 한다. 여기에서는 아래에 강조한 부분들을 중점적으로 살펴보기로 한다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <web-services-config xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <policy> <!-- Endpoint 전체에 적용하고자 하는 설정 --> <endpoint-policy-subject> <addressing-policy> <using-addressing>true</using-addressing> </addressing-policy> <!-- Endpoint의 어느 오퍼레이션(메소드)에 적용하고자 하는 설정 --> <operation-policy-subject> <!-- 이 설정은 아래의 오퍼레이션(메소드)에 대해 적용된다 --> <operation-java-name>addNumbers</operation-java-name> <!-- 클라이언트 요청 메시지에 적용하고자 하는 설정 --> <input-message-policy-subject> ...... </input-message-policy-subject> <!-- 서버의 응답 메시지에 적용하고자 하는 설정 --> <output-message-policy-subject> ...... </output-message-policy-subject> </operation-policy-subject> </endpoint-policy-subject> </policy> </web-services-config>
wsgen의 -policy 기능을 이용하여 웹 서비스를 위한 Java 클래스 및 wsit-endpoint.xml 파일을 얻었으면 다음과 같은 시나리오로 웹 서비스 정책이 적용된 웹 서비스를 생성한다.
-
서비스 구현 클래스를 작성한다.
-
jeus-webservices-config.xsd 스키마를 통해 service-config.xml 파일을 구성한다.
-
구성한 서비스 구현 클래스를 wsgen 툴을 통해 웹 서비스를 생성할 때 -policy 옵션을 이용하여 wsit-endpoint.xml 파일을 생성한다.
-
wsit-endpoint.xml 파일을 패키지될 WEB-INF 폴더 아래에 위치시킨다.
-
패키지된 서비스를 JEUS 서버에 deploy한다.
디렉터리 구조
Java 클래스로부터 웹 서비스의 정책이 적용된 웹 서비스를 패키징한다. 서버에 해당하는 웹 서비스를 Java 클래스로부터 구성할 때의 디렉터리는 다음과 같다.
war_root |- WEB-INF |- classes | |- ... (SEI, JAX-WS artifacts, Handler, Validator) |- wsit-Endpoint.xml
4. 클라이언트 정책 설정
클라이언트의 웹 서비스 정책 설정은 웹 서비스 보안과 같은 시나리오 외에는 보통 필요하지 않다. JEUS 웹 서비스는 기본적으로 런타임에 원격 웹 서비스의 WSDL에 포함된 웹 서비스 정책 설정을 이해하고 자동으로 그 정책에 적합한 환경을 제공해주기 때문이다. 그러나 웹 서비스 보안과 같은 특정의 시나리오에서 추가적인 설정이 필요한 경우가 존재할 수 있다.
웹 서비스 정책이 설정되어 있는 웹 서비스에 대해 추가적인 설정이 필요한 경우 클라이언트를 구성하는 시나리오는 다음과 같다.
-
wsimport 툴을 통해 클라이언트 Java Bean 객체들을 구성한다.
-
원격의 WSDL 문서를 접근 가능한 저장소에 wsit-client.xml이라는 이름으로 저장한다.
JEUS 웹 서비스는 런타임에 원격의 WSDL에 설정되어 있는 웹 서비스 정책 설정을 통해 클라이언트 환경을 제공해주기 때문에 원격의 WSDL에 설정되어 있는 웹 서비스 정책 설정에 대한 내용은 삭제해도 된다.
-
wsit-client.xml에 클라이언트에서 필요한 추가적인 웹 서비스 정책을 설정한다.
-
JAR 패키징할 경우 wsit-client.xml을 패키지될 classes/META-INF 디렉터리에 위치시킨다.
WAR 패키징할 경우 wsit-client.xml 파일을 패키지될 WEB-INF 디렉터리 아래에 위치시킨다.
-
패키지된 서비스를 JEUS 서버에 deploy한다.
디렉터리 구조
웹 서비스 정책 설정을 적용한 JEUS 웹 서비스를 패키징한다. 일반적으로 컨테이너에서 실행되는 웹 서비스 클라이언트는 다음과 같다.
war_root |- WEB-INF | |- classes | |- ... (client classes, JAX-WS artifacts, Handler, Validator) | |- META-INF | |- wsit-client.xml |- index.jsp
EJB 컨테이너에서 실행되는 웹 서비스 클라이언트 또는 독립 애플리케이션으로 실행되는 웹 서비스 클라이언트는 다음과 같다.
jar_root |- classes |- ... (client classes, JAX-WS artifacts, Handler, Validator) |- META-INF |- wsit-client.xml