제13장 웹 서비스 정책

내용 목차

13.1. 개요
13.2. 웹 서비스의 정책(WS-Policy)
13.2.1. 웹 서비스 정책 프레임워크(Framework)
13.3. 웹 서비스 정책 설정 시나리오
13.3.1. 서버 사이드
13.3.2. 클라이언트 사이드

본 장에서는 웹 서비스의 정책 설정에 대한 기본적인 지식 설명과 함께 간단한 시나리오에 대해 알아보도록 한다. 각각의 세부적인 웹 서비스 정책 설정에 관한 내용은 이후 각 장에서 자세히 살펴보도록 한다.

13.1. 개요

JEUS 웹 서비스는 웹 서비스 정책(WS-Policy)을 지원한다. 웹 서비스 정책이란 어떤 웹 서비스가 가지고 있는 여러 가지 기능들(JEUS 웹 서비스에서는 WS-Addressing, WS-RM, WS-TX, WS-Security)의 정책을 노출시키기 위한 표준 명세이다. 웹 서비스 정책을 지원하는 JEUS 웹 서비스는 WSDL을 통해 웹 서비스 정책을 노출시킬 수 있다. 또한, WSDL에 노출된 웹 서비스의 정책을 통하여 웹 서비스 클라이언트를 구성할 때 JEUS 웹 서비스는 자동으로 클라이언트에 웹 서비스의 정책에 맞는 기능을 구성해 준다.

웹 서비스의 정책 설정은 “제14장 웹 서비스 Addressing”, “제15장 신뢰성 메시징 기술” , “제16장 웹 서비스 보안”에서 사용된다.

13.2. 웹 서비스의 정책(WS-Policy)

본 절에서는 일반적인 웹 서비스의 정책(WS-Policy)에 대해 알아본다.

일반적인 웹 서비스 정책의 특징은 다음과 같다.

  • 웹 서비스 정책 명세는 표현하기가 매우 유연하고 확장성이 있도록 설계되어 있다.

  • 웹 서비스 정책은 하나 이상의 '정책 전제(policy assertion)'를 통하여 표현된다.

참고

자세한 표준 웹 서비스의 정책에 관한 스키마의 내용은 http://schemas.xmlsoap.org/ws/2004/09/policy/ws-policy.xsd에서 참조할 수 있다.

13.2.1. 웹 서비스 정책 프레임워크(Framework)

다음은 웹 서비스 정책 프레임워크(Framework)에 대한 설명이다.

  • 정책 컨테이너(Policy Container)

    웹 서비스 정책 프레임워크에서 가장 핵심이 되는 주요 컴퍼넌트는 "Policy"라는 element로 표현된 정책 컨테이너이다. 이 element는 id 값을 부여 받을 수 있어 다른 곳에서 이를 참조하거나 재사용할 수 있다. 또한 이 element는 전제(assertion) 혹은 전제들의 조합들로 구성된다.

    이러한 전제들은 정책 연산자(Operator)들로 이루어지게 된다.

  • 정책 연산자(Operator)

    웹 서비스 정책 명세는 2개의 연산자들과 하나의 속성을 정의하고 있다.

  • ExactlyOne Operator

    이 연산자는 하위 element에 전제 혹은 연산자들이 복수 개가 위치할 때 이중 어느 하나만을 선택하여 정책으로 가지고 있겠다는 것을 나타내기 위한 연산자이다.

    다음은 이러한 ExactlyOne Operator를 사용한 예이다.

    <wsp:Policy>
        <wsp:ExactlyOne>
            <wsse:SecurityToken>
                <wsse:Token
            ...
            <wsse:
        ...
    </wsp:Policy>
  • All Operator

    이 연산자는 하위 element에 전제 혹은 연산자들이 복수 개가 위치할 때 이중 모든 것을 취합하여 정책으로 가지고 있겠다는 것을 나타내기 위한 연산자이다.

    다음은 이러한 All Operator를 사용한 예이다.

    <wsp:Policy>
        <wsp:All>
            <wsse:SecurityToken>
                <wsse:Token
        ...
    </wsp:Policy>
  • Optional Operator

    이 연산자는 하위 element에 전제 혹은 연산자들이 이 속성으로 선언되어 있을 때 선택적으로 취할 수 있음을 나타내기 위한 연산자이다.

    다음은 이러한 Optional Operator를 사용한 예이다.

    <wsp:Policy>
        <wsse:Integrity wsp:optional="true">
        ...
    </wsp:Policy>

13.3. 웹 서비스 정책 설정 시나리오

JEUS 웹 서비스에서의 웹 서비스 정책 시나리오는 크게 서버 사이드와 클라이언트 사이드 2가지로 나뉜다. 서버 사이드는 다시 WSDL로부터 웹 서비스를 구성하는 시나리오와 Java 클래스로부터 웹 서비스를 구성하는 시나리오로 나뉠 수 있다.

13.3.1. 서버 사이드

13.3.1.1. WSDL로부터 웹 서비스 구성

정책 설정을 구현하는 방법

WSDL 문서로부터 웹 서비스 정책 설정이 적용된 웹 서비스를 구성하는 시나리오는 다음과 같다.

  1. WSDL 문서를 작성한다.

  2. WSDL 문서에 웹 서비스 정책 설정을 한다.

  3. wsimport 툴을 통해 Java Bean 객체들을 생성한다.

  4. 서비스 구현 클래스를 작성한다.

  5. 패키지된 서비스를 JEUS 서버에 디플로이한다.

웹 서비스 정책 설정을 적용한 JEUS 웹 서비스의 패키징

서버에 해당하는 웹 서비스를 WSDL 문서로부터 구성할 때의 디렉터리는 다음과 같다.

war_root
    I- WEB-INF
        I- classes
            I- ... (SEI, JAX-WS artifacts, Handler, Validator)
        I- wsdl
            I- addnumbers.wsdl

13.3.1.2. Java 클래스로부터 웹 서비스 구성

정책 설정을 구현하는 방법

Java 클래스로부터 웹 서비스의 정책이 적용된 웹 서비스를 생성하기 위해서는 다음과 같이 wsgen 콘솔툴에 추가적으로 -policy 기능을 이용하여 wsit-endpoint.xml 파일을 생성해야 한다.

C:\>wsgen fromjava.server.AddNumbersImpl -d web/WEB-INF -policy service-config.xml

다음은 service-config.xml의 실제 모습이다. 자세한 설정 내용에 관한 것은 이어지는 각각의 여러 가지 웹 서비스 기능을 위한 장에서 자세히 살펴보기로 한다. 여기에서는 아래에 강조한 부분들을 중점적으로 살펴보기로 한다.

[예 13.1] << 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 파일을 얻었으면 다음과 같은 시나리오로 웹 서비스 정책이 적용된 웹 서비스를 생성한다.

  1. 서비스 구현 클래스를 작성한다.

  2. jeus-webservices-config.xsd 스키마를 통해 service-config.xml 파일을 구성한다.

  3. 구성한 서비스 구현 클래스를 이용, wsgen을 통해 웹 서비스를 생성할 때 "-policy" 옵션을 이용하여 wsit-Endpoint.xml 파일을 생성한다.

  4. wsit-endpoint.xml 파일을 패키지될 WEB-INF 폴더 아래에 위치시킨다.

  5. 패키지된 서비스를 JEUS 서버에 디플로이한다.

웹 서비스 정책 설정을 적용한 JEUS 웹 서비스의 패키징

서버에 해당하는 웹 서비스를 Java 클래스로부터 구성할 때의 디렉터리는 다음과 같다.

war_root
    I- WEB-INF
        I- classes
            I- ... (SEI, JAX-WS artifacts, Handler, Validator)
        I- wsit-Endpoint.xml

13.3.2. 클라이언트 사이드

클라이언트 사이드의 웹 서비스 정책 설정은 웹 서비스 보안과 같은 시나리오 외에는 보통 필요하지 않다. JEUS 웹 서비스는 기본적으로 런타임에 원격 웹 서비스의 WSDL에 들어있는 웹 서비스 정책 설정을 이해하고 자동으로 그 정책에 적합한 환경을 제공해주기 때문이다. 이어지는 설명은 웹 서비스 보안과 같은 특정의 시나리오에서 추가적인 설정이 필요한 경우 설정하는 방법에 대해 알아보도록 한다.

정책 설정을 구현하는 방법

웹 서비스 정책이 설정되어 있는 웹 서비스에 대해 추가적인 설정이 필요한 경우 클라이언트를 구성하는 시나리오는 다음과 같다.

  1. wsimport 툴을 통해 클라이언트 Java Bean 객체들을 구성한다.

  2. 원격의 WSDL 문서를 접근 가능한 저장소에 wsit-client.xml이라는 이름으로 저장한다.

    참고

    원격의 WSDL에 설정되어 있는 웹 서비스 정책 설정에 대한 내용은 삭제해도 좋다. JEUS 웹 서비스는 런타임에 원격의 WSDL에 설정되어 있는 웹 서비스 정책 설정을 통해 클라이언트 환경을 제공해주기 때문이다.

  3. wsit-client.xml에 클라이언트에서 필요한 추가적인 웹 서비스 정책을 설정한다.

  4. JAR 패키징할 경우 wsit-client.xml을 패키지될 classes/META-INF 디렉터리에 위치시킨다.

    WAR 패키징할 경우 wsit-client.xml 파일을 패키지될 WEB-INF 폴더 아래에 위치시킨다.

  5. 패키지된 서비스를 JEUS 서버에 디플로이한다.

웹 서비스 정책 설정을 적용한 JEUS 웹 서비스의 패키징

일반적으로 컨테이너에서 실행되는 웹 서비스 클라이언트는 다음과 같다.

war_root
    I- WEB-INF
        I- classes
            I- ... (client classes, JAX-WS artifacts, Handler, Validator)
            I- META-INF
                I- wsit-client.xml
    I- index.jsp

EJB 컨테이너에서 실행되는 웹 서비스 클라이언트 혹은 독립 애플리케이션으로 실행되는 웹 서비스 클라이언트는 다음과 같다.

jar_root
    I- classes
        I- ... (client classes, JAX-WS artifacts, Handler, Validator)
        I- META-INF
            I- wsit-client.xml