WSIF의 목표
WSIF는 기초가 되는 바인딩 또는 액세스 프로토콜과 무관하게 웹 서비스를 호출하는 일반 모델로 SOAP 서비스가 제공하는 유연성을 확장하는 것을 목적으로 합니다.
웹 서비스의 SOAP 바인딩은 WSDL(Web Services Description Language) 스펙의 파트이므로, 대부분의 개발자는 웹 서비스 사용을 생각할 때 즉시 SOAP 클라이언트 API를 사용하여 SOAP 메시지를 어셈블링하고 이를 네트워크를 거쳐 서비스 엔드포인트로 전송하는 것을 떠올리게 됩니다. 예를 들어, 클라이언트는 Apache SOAP를 사용하여 서비스 엔드포인트, 호출할 SOAP 조작의 ID, 전송할 매개변수 등을 캡슐화하는 호출 오브젝트를 작성하고 채웁니다.
그러므로 WSIF(Web Services Invocation Framework)의 목표는 다음과 같습니다.
- 웹 서비스 호출에 대해 바인딩에 독립적인 메커니즘 제공
- 클라이언트 코드에서 웹 서비스에 액세스하는 데 사용되는 특정 프로토콜의 복잡도를 없앰
- 웹 서비스에 대한 복수 바인딩 간의 동적 선택 사용 가능
- 웹 서비스 매개체의 개발 지원
SOAP 서비스보다 탁월한 웹 서비스
애플리케이션의 기능적 측면과 액세스 프로토콜에 대한 WSDL 기반 설명이 있는 모든 애플리케이션을 웹 서비스로 배치할 수 있습니다. Java™ EE(Java Platform, Enterprise Edition) 환경을 사용하는 경우에는 여러 전송 및 프로토콜에서 애플리케이션을 사용할 수 있습니다.
예를 들어, 데이터베이스 스토어드 프로시저를 수행하여 이를 Stateless 세션 Bean으로 노출한 다음 SOAP 서비스로 SOAP 라우터에 배치할 수 있습니다. 각 단계에서, 기본 서비스는 동일합니다. 변경사항은 액세스 메커니즘으로, 모두 JDBC(Java DataBase Connectivity)에서 RMI-IIOP(Remote Method Invocation over Internet Inter-ORB Protocol)로 변경한 다음 SOAP로 변경합니다.
WSDL 스펙은 웹 서비스에 대해 SOAP 바인딩을 정의하지만 예를 들어, RMI-IIOP를 액세스 프로토콜로 사용하는 엔터프라이즈 Bean을 웹 서비스로 제공할 수 있도록 바인딩 확장자를 WSDL에 추가할 수 있습니다. 또한 스레드 내 Java 메소드 호출에 액세스 프로토콜로 사용하여 단일 Java 클래스를 웹 서비스로 처리할 수도 있습니다. 이처럼 웹 서비스에 대한 광범위한 정의를 사용할 경우, 서비스 호출에 대해 바인딩에 독립적인 메커니즘이 있어야 합니다.
클라이언트 코드와 특정 프로토콜 구현 결합의 제한
클라이언트 코드가 특정 프로토콜 구현을 위해 클라이언트 라이브러리에 엄격하게 바인드된 경우, 유지보수에 어려움을 겪을 수 있습니다.
예를 들어, Apache SOAP에서 JMS((Java Message Service) 또는 엔터프라이즈 Bean으로 이동할 경우, 프로세스 진행에 많은 시간과 노력이 들 수 있습니다. 이러한 문제점을 예방하려면, 프로토콜 구현에 독립적인 메커니즘으로 서비스를 호출해야 합니다.
클라이언트 코드로의 새 바인딩 통합의 어려움
사용자 정의 프로토콜 작업을 웹 서비스로 사용하는 애플리케이션을 작성하려는 경우 WSDL에 확장 가능성 요소를 추가하여 새로운 바인딩을 정의할 수 있습니다. 그러나 이 기능 수행은 복잡합니다.
예를 들어, 이 프로토콜을 사용할 클라이언트 API를 설계해야 합니다. 애플리케이션이 웹 서비스의 추상 인터페이스만 사용할 경우, 추상 계층을 사용 가능하게 하는 스텁 생성 도구를 작성해야 합니다. 이러한 태스크에는 많은 시간과 노력이 많이 들 수 있습니다. 여기서 필요한 것은 기존 바인딩을 업데이트하고 새 바인딩을 추가하는 데 사용할 수 있는 서비스 호출 메커니즘입니다.
다양한 방법으로 복수 바인딩 사용 가능
여러 바인딩을 제공하는 웹 서비스를 이용하려면 스텁을 생성하거나 다시 컴파일할 필요없이 런타임에 사용 가능한 서비스 바인딩 간에 전환할 수 있도록 하는 서비스 호출 메커니즘이 필요합니다.
여러 바인딩을 제공하는 웹 서비스를 사용하는 애플리케이션을 배치했다고 가정하십시오. 예를 들어, 서비스에 대한 SOAP 바인딩과 로컬 서비스 구현(Java 클래스)을 웹 서비스로 처리할 수 있도록 하는 로컬 Java 바인딩이 있다고 가정하십시오.
클라이언트가 서비스와 동일한 환경에 배치된 경우, 서비스에 대한 로컬 Java 바인딩만 사용할 수 있습니다. 이 경우, SOAP 바인딩을 사용하지 않고 직접 Java 호출을 수행하여 서비스와 보다 효율적으로 통신할 수 있습니다.
클라이언트가 런타임 정보에 기초하여 사용된 바인딩을 전환할 수 있는 경우, 각 상황에 따라 가장 효율적인 바인딩을 선택할 수 있습니다.
보다 융통성 있는 웹 서비스 환경에서는 매개체 사용 가능
웹 서비스는 애플리케이션 통합 프로그램에 엄격하지 않은 연결 패러다임을 제공합니다. 이러한 환경에서, 매개체는 매우 강력한 기능을 발휘할 수 있습니다.
매개체는 서비스 요청자와 대상 웹 서비스 사이에 플로우되는 메시지를 가로채고 메시지에 전달하기 전에 일부 중개 태스크(예: 로깅, 고가용성 또는 변환)를 수행하는 애플리케이션입니다. WSIF는 가능하면서도 단순한 매개체를 구성하도록 설계되었습니다. WSIF를 사용하면 매개체가 전송에 맞추어 프로그래밍을 할 필요 없이 서비스 호출에 값을 추가할 수 있습니다.