SOAP2011. 4. 5. 16:42

웹 서비스(Web Service) 소개 및 기본구현

 

  웹서비스(Web Services)는 웹으로 제공되는 메소드 서비스이다. 여기에서 웹은 인터넷 사이트이며 서비스는 특정한 기능, 예를 들어 항공권 예약, 인터넷 배팅, 쇼핑 및 조달 구매 등을 의미한다. 지금까지는 사이트에 접속해서 지정한 양식에 맞게 정보를 입력하고 한 가지 일을 처리하고 나서 다른 사이트로 이동하는 식의 작업을 반복했다. 그러나 웹서비스는 제공하는 사이트에 필요한 값(웹서비스 메소드의 매개변수)을 XML 형식으로 보내주면 마친 결과가 웹페이지가 나타난다.


  웹서비스는 표준 인터넷 프로토콜을 사용하여 액서스 할 수 있는 일종의 메소드로서 프로그램 코드에서 그러한 메소드로서 프로그램 코드에서 그러한 메소드를 사용할 수 있다. 웹서비스는 구성 요소를 이용한 개발과 웹 방식의 장점을 결합한 것이다. 웹서비스도 구성 요소처럼 서비스 구현을 위한 재사용 방식을 이용할 수 있다. 다시 말해서, 자주 사용되는 웹서비스를 만들어두면 다른 웹페이지를 만들 때 사용할 수 있다.

 

웹서비스의 고려사항

   다음의 두 가지 경우를 생각해 보자. 다음 2가지는 시스템 구현시 한번쯤은 생각해 볼 수 있는 부분이 일 것이다. 조건1) 두 사이트 혹은 하나의 사이트와 다중의 클라이언트들은 서로 간에 많은 데이터들은 인터넷을 통해 손쉽게 교환해야 한다. 조건2) 데이터 교환의 매개는 어떤 클라이언트건 간에 플랫폼과 데이터 형식의 제한을 받지 않고 사용할 수 있어야 한다.

 

   (조건1)에 대한 해결방안으로 네트워크 내부의 데이터 교환에 있어서 아무런 제약 조건 없는 통신 프로트콜의 선정을 가장 먼저 생각해 볼 수 있다. 그러나 불행히도 보안상의 문제로 방화벽이나 프록시 서버를 설치하여 HTTP가 통신할 수 있는  80포트와 이메일 전송을 위한 포트를 제외한 대부분의 포트를 봉쇄하고 있는 추세이다. 그러므로 표준 프로트콜인 HTTP를 이용해야 한다.


(조건2)를 해결하기 위해선 어떠한 플랫폼과 데이터베이스와도 종속적이지 않은 독립적인 데이터 교환수단이 필수적이다. 이러한 문제점을 해결할 수 있는 기술로 XML(Extensible Markup Language)이 있다. XML은 데이터의 조직화를 보다 쉽게 이루어 낼 수 있음은 물론 텍스트 기반이므로 쉽게 가공할 수 있다는 장점을 가지고 있다. 따라서 HTTP 프로트콜을 사용하면서 XML로 데이터를 전송하는 방식을 사용해야 한다.

 

웹서비스의 특징

1) 방화벽 같은 특수한 환경적 제약을 받지 않고 표준 프로트콜을 HTTP를 이용해서 원격지의 웹서비스를 호출할 수 있다.

2) 인터넷을 통해 애플리케이션들이 서로 통신하고 데이터를 교환할 수 있는 환경을 제공한다.

3) 특정 언어에 종속되지 않는 언어 독립성(Language Independent)을 제공한다.

4) 서비스 호출을 위해서 특정 프로토콜을 사용하지 않고 표준 프로토콜을 사용하므로 독립성(Protocol Independent)을 제공한다.

5) XML을 기반으로 특정 운영체제나 플랫폼에 종속되지 않는 플랫폼 독립성(Platform Independent)을 제공한다.

 

웹서비스 실행 모델

1) 다이렉트 클라이언트(Direct Client)

클라이언트가 웹서비스를 직접 요청하는 방식이다. 클라이언트가 웹 브라우저를 이용하여 주소를 입력하여 웹서비스를 요청하게 되면, 제공 서버는 요청받은 서비스에 대한 설명을 클라이언트에게 전송을 하고, 클라이언트는 서비스의 설명을 읽고 필요한 파라미터 등을 입력해서 웹서비스를 HTTP GET방식으로 요청한다. 따라서 웹서비스가 호출되고 실행된 결과는 XML로 클라이언트에게 전송된다.

2) 프록시 클라이언트(Proxy Client)

웹 애플리케이션 내에서 웹서비스를 호출하는 방법으로 간접적으로 웹서비스를 호출하게 되며 클라이언트는 요청에 의한 결과가 웹서비스에 의해서 얻어 결과인지는 알지 못한다. 웹 애플리케이션에서 웹서비스를 사용하는 경우 웹 서버에는 웹서비스 호출과 처리를 위한 프록시가 생성된다. 웹 서버와 웹서비스 제공 서버 사이에는 SOAP을 이용해서 웹서비스가 호출되고 실행 결과 값을 전송하게 된다.

 

SOAP(Simple Object Access Protocol)

   SOAP은 정보 교환을 위한 프로토콜이다. SOAP 사양에는 XML과 관련된 규칙이 정의되어 있다. 또한 확장 가능한 메시지 형식이나 SOAP 메시지 형식을 사용하여 RPC(원격 프로시저 호출)를 나타내는 규칙과 HTTP 프로토콜에 바인딩 하는 방법도 정의되어 있다.

   인터넷을 통하여 웹 애플리케이션과 워도 애플리케이션은 모두 웹서비스를 사용할 수 있으며 웹서비스는 또 다른 웹서비스를 사용할 수도 있다. 즉, 인터넷상에서라면 어떠한 애플리케이션도 모두 웹서비스를 통하여 통합될 수 있는 것이다. 이 모든 일련의 과정들의 메시징 처리에는 XML로 규약 된 SOAP이 사용되며 메시징 전달의 매개로는 HTTP 표준 프로트콜이 사용된다.

WSDL(Web Services Description Language)

  WSDL(웹서비스 계약 설정을 위한 표준 언어)은 마이크로소프트와 IBM에서 개발한 XML 기반의 계약 언어로서, 웹서비스가 주어지면 웹서비스에서 수락하고 생성하는 메시지가 어떤 것인지 표준화하여 문서로 만든다. 즉 제공자와 사용자의 규칙인 웹서비스 계약을 문서화하는 표준방법이다.(Visual Studio.NET에서는 웹서비스를 만드는 개발자 도구에서 WSDL을 지원)

 

UDDI(Universal Description, Discovery, Integration)

  우리가 웹서비스를 사용함에 있어서 가장 먼저 접하게 되는 문제는 필요로 하는 기능을 제공해주는 웹서비스가 어디에 있느냐 것이다. 예를 들어 주식정보를 웹서비스로 제공하는 공급자가 있다고 하더라도 소비자 입장에서는 그 사실을 알 수 없다. 이를 위해서 제공되는 서비스가 UDDI이다.  

  UDDI(웹서비스 검색 기술)에는 웹서비스 공급자가 자신의 웹서비스를 광고하고 웹서비스 소비자는 관심 있는 웹서비스를 찾을 수 있게 하는 기술이다. UDDI를 활용하면 사용하려는 웹서비스에 대한 주소를 모르더라도 일정한 조건으로 검색해서 필요한 웹서비스를 사용할 수 있다.

http://www.salcentral.comhttp://uddi.microsoft.com
http://www.soapclient.com/uddisearch.html

  

- 출처 : http://cadcam.yonsei.ac.kr/?menu=resource -


'SOAP' 카테고리의 다른 글

JAVA로 SOAP 구축 관련 자료들  (0) 2011.04.05
JAVA로 SOAP 구축하기(3)  (0) 2011.04.05
JAVA로 SOAP 구축하기(2)  (0) 2011.04.05
JAVA로 SOAP 구축하기(1)  (0) 2011.04.05
[SOAP강좌] Java 서버 - Delphi 클라이언트  (0) 2011.04.05
Posted by 아로나
SOAP2011. 4. 5. 15:54
SOAP2011. 4. 5. 15:50
part3. Axis Practice

그럼 실질적으로 한번 구현을 해보자.
SOAP Part2에서 마지막에 첨부시킨 간단한 Hello 웹 서비스를 바탕으로 코드생성법과 해당코드에 대한 간단한 설명과 함께....
web service를 구현하는 방식에는 2가지가 있는데
첫번째는 Java 파일을 coding한 후 해당 Java파일을 바탕으로 WSDL파일을 생성한 후 deploy 시키는 방법과
두번째는 WSDL 파일로 Java파일을 생성한 후 deploy시키는 방법이 있다. 첫번째 방법은 서비스제공자를 만들때 많이 쓰이며 두번째 방법은 서비스 요청자를 만들때 많이 쓰인다.

[ JAVA2WSDL ]

- STEP1. Java Class생성

 Java 파일을 작성한 후 웹 서비스를 생성할때 작성할 Java파일은 Interface Class와 해당 Interface를 Implement한 Java Class파일 2개가 필요하다라고 문서에는 나와있는데 Interface파일만 있어도 가능하다.다음 파일을 작성 및 complie한 후 적절한 디렉토리에 배치한다. 여기서는 Tomcat\webapps\axis\WEB-INF\classes 에 배치하고 있다.


List1. Java Interface File

package webservice.hello;
public interface HelloIF extends java.rmi.Remote {
      public String hello(java.lang.String name) throws java.rmi.RemoteException;
}


- STEP2. 구현된 Class로부터 WSDL생성.Axis 에서는 Axis.jar파일에 Java2Wsdl이라는 Class파일을 제공하고 있다. 해당 파일의 역할은 STEP1에서 구현한 2개의 Java Class로부터 WSDL파일을 생성하는 것인데 SOAP Part2에서 제공한 문서를 보면 사용법에 대한 자세한 사항이 나와있으니 참조하고.......다음과 같이 실행하자.

java org.apache.axis.wsdl.Java2WSDL -o c:\test\webservice\hello\Hello.wsdl
-l http://localhost:8080/axis/services/Hello -n http://hello.webservice -u literal -pwebservice.hello http://hello.webservice webservice.hello.HelloIF

부연해서 설명하자면 -l 옵션은 실제 웹서비스 URL경로를 지정하는데 WSDL문서를 받은 서비스요청자에서 실제 호출경로로 사용하므로 정확히 작성해야 한다. -n 옵션은 WSDL 문서에서 사용할 targetNamespace의 값을 설정한다. targetNamespace는 해당 문서에서 정의된 XML Element들을 식별하기 위한 것이다. 생성이 잘 되었다면 다음과 같을 것이다.
List2. Hello WSDL
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
    targetNamespace="http://hello.webservice"
    xmlns:apachesoap="http://xml.apache.org/xml-soap"
    xmlns:impl="http://hello.webservice"
    xmlns:intf="http://hello.webservice"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/
    xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)-->
  
   <wsdl:message name="helloResponse">

      <wsdl:part name="helloReturn" type="xsd:string"/>

  </wsdl:message>

   <wsdl:message name="helloRequest">

      <wsdl:part name="in0" type="xsd:string"/>

   </wsdl:message>

   <wsdl:portType name="HelloIF">

      <wsdl:operation name="hello" parameterOrder="in0">

         <wsdl:input message="impl:helloRequest" name="helloRequest"/>

         <wsdl:output message="impl:helloResponse" name="helloResponse"/>


      </wsdl:operation>


   </wsdl:portType>

   <wsdl:binding name="HelloSoapBinding" type="impl:HelloIF">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>


      <wsdl:operation name="hello">

         <wsdlsoap:operation soapAction=""/>


         <wsdl:input >


            <wsdlsoap:body namespace="http://hello.webservice" use="literal"/>

         </wsdl:input>

         <wsdl:output >


            <wsdlsoap:body namespace="http://hello.webservice" use="literal"/>


         </wsdl:output>


      </wsdl:operation>


   </wsdl:binding>

   <wsdl:service name="HelloIFService">


      <wsdl:port binding="impl:HelloSoapBinding" name="Hello">


         <wsdlsoap:address location="http://localhost:8080/axis/service/Hello"/>


      </wsdl:port>


   </wsdl:service>


</wsdl:definitions>

 List1 의 WSDL파일을 보면 portType의 name이 HelloIF, operation의 name이 hello인데 HelloIF.java의 class명과 method명과 일치함을 알 수 있다. targetNamespace는 -n 옵션에서 정의한 값이 설정되어 있고 location에는 -l 옵션에서 정의한 값이 설정되어 있다. Bold된 단어를 하나씩 비교해가면서 확인해보면 연관성을 알 수 있을 것이다.

- STEP3. WSDD파일 및 Java파일 생성WSDD(Web Service Deployment Descriptor)파일의 용도는 새로운 Handler, Chain 그리고 서비스를 올리기 위해 AdminClient에서 사용하는 설정파일이다. WSDD에 대한 자세한 사항은 해당 사이트를 참조하도록하자. AdminClient는 관리툴로서, Handler나 Chain같은 Axis리소스를 올리거나 내릴때 사용한다.
http://ws.apache.org/axis/java/reference.html#DeploymentWSDDReference

cmd#> java org.apache.axis.wsdl.WSDL2Java -o d:\ -d Application -s d:\Hello.wsdl

여기서는 d:\ 디렉토리에 wsdd파일 및 Java파일을 생성했다. 생성된 파일목록은 다음과 같다.
deploy.wsdd
undeploy.wsdd
HelloIF.java
HelloIFService.java
HelloIFServiceLocator.java
HelloSoapBindingImpl.java
HelloSoapBindingStub.java

java 파일에 대한 자세한 설명은 J2EE Web Service에서 자세히 다루기로 하고
deploy.wsdd 와 undeploy.wsdd파일은 말그대로 deploy, undeploy 설정파일이다. HelloIF를 implement한 것이 HelloSoapBindingImpl이므로 해당 파일의 hello 메소드에 관련 로직을 작성하면 된다.


- STEP4. 서비스 deploy


java org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deploy.wsdd

서비스 deploy를 완료한 후 http://localhost:8080/axis/servlet/AxisServlet에서 해당 서비스에 대한 deploy완료여부를 확인할 수 있다. 아니면 http://localhost:8080/axis/services/Hello?wsdl 로 확인가능하다.

- 출처 : http://ammoguy.springnote.com/pages/2289092 -

'SOAP' 카테고리의 다른 글

웹서비스 기본 개념  (0) 2011.04.05
JAVA로 SOAP 구축 관련 자료들  (0) 2011.04.05
JAVA로 SOAP 구축하기(2)  (0) 2011.04.05
JAVA로 SOAP 구축하기(1)  (0) 2011.04.05
[SOAP강좌] Java 서버 - Delphi 클라이언트  (0) 2011.04.05
Posted by 아로나