우선 웹서비스 작성을 하기전에 Axis에서 제공하는 Example을 서비스해봄으로써 앞으로 하게 될 서비스 제공에 대해 생각해보자 ㅡ

앞서 환경설정에서 보았던 Axis초기화면에서 List를 들어가면 이런 화면을 볼 수 있을 것이다.


보시다시피 현재 제공되는 서비스는 Administrator와 Version 뿐이다. 우리는 제공하는 예제중에서 Stock 이라는
서비스를 제공해 볼 것이다.

%AXIS_HOME% :  AXIS를 받은 폴더 ㅡ 톰캣에 넣어둔 AXIS폴더는 %AXIS_HOME%폴더의 하위폴더이다. 헷갈리지 않도록 하자. 거기에는 예제가 없다.

%AXIS_HOME%를 가면 하위폴더중에 samples폴더가 있다.
그 중에서 Stock폴더를 선택하여 들어가면


디렉토리 안에는 이러한 파일들이 존재한다. 과정을 진행하기전에 한가지 알고 갈 것은 , 우리는 서비스를 제공하는데 이용되어질 파일을작성하고, 그것을 이용하여 wsdl파일을 생성하고 , wsdd파일을 만든 상태라고 가정한다.
(여기서 말하는 과정은 앞으로 우리가 배울 과정이다. 걱정하지 말자.)
위에 빨간 박스 쳐진 파일들은 우리가 서비스를 올리고 내리는데 사용하게될 wsdd파일이다. deploy는 서비스를 올릴때, undeploy는 서비스를 해제할때 사용된다.

① 커맨드 창을 열어 위 서비스 샘플이 존재하는 디렉토리로 이동한다.
AXIS에서는 서비스를 올리는 방법이 2가지 인데 직접 %CATALINA_HOME%\webapps\axis\WEB-INF\server-config.wsdd 파일을 직접 조작하는 것과 java패키지중에 AXIS.jar 에 있는 AdminClient 클래스로 생성된 배포 디스크립터를 이용해 웹 서비스를 Axis 서버에 배포하는 방법이 있다. 우리는 AdminClient를 이용한다.

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

라고 명령을 내린다. 

[사용법은  java org.apache.axis.client.AdminClient  -l 서비스제공호스트:포트/axis/services/AdminService deploy파일 경로]

이러한 화면이 보인다면 서비스가 배포된 것이다. 확인을 위해
http://localhost:8080/axis 로 접속하여 List로 가보자!!


화면에서 보여주듯이 Stock서비스가 정상적으로 배포되었음을 확인할 수 있다.
Sample로 제공하는 서비스를 배포해봄으로써 우리가 다음 과정에서 하는 것에 대한 목표를 알아보았다.
몇개 더 배포해보고 우리가 하는 웹서비스에 대해 더 생각해보자!!ㅋ


  1. Vasco_대륙 2009.09.28 16:17 신고

    AdminClient를 이용할시 NoClass에러가 나는 이용자가 있을것 입니다. 이러한 경우에 JDK폴더와 JRE폴더 양쪽에 존재하는 ext\lib\폴더에 %CATALINA_HOME%\webapps\axis\lib에 있는 파일들을 복사해주면 해결 될것이다. Path문제로 인해 생기는 에러이므로 적절히 대처하면 될듯싶습니다.
    저도 찾다가 귀찮아서 그냥 위의 방법으로 했다는^^;;

웹서비스 프로그래밍을 하기전에 앞서 앞서 말했던 RPC방식에서 중요한 개념인 스텁과 스켈레톤에 대해서 알고갑시다^^ 잘 정리가 된 글이 있어 가져왔습니다.


분산개체 애플리케이션은 다음과 같은 목적을 추구합니다. 
  • 덩치가 큰 프로그램(개체)은 서버만 가지고 있는다. 
  • 프로그램 실행은 서버가 담당한다. 
  • 클라이언트에게는 이 프로그램(개체)을 조작하는 데 필요한 최소한의 코드만 전달한다. 

여기서 세번째 목적을 수행하는 데 사용되는 것, 즉, 프로그램(개체)을 조작하는 데 필요한 최소한의 코드가 바로 스텁과 스켈리턴입니다. 가령 TV 보기 서비스를 제공하기 위해 덩치가 큰 TV 가 아니라 이를 조작하는 리모콘만 전달해도 충분한 것입니다. 

 

스텁(stub)은 원래 연필 토막이나 담배꽁초처럼 쓰고 남은 조각을 말합니다. 원래 단어의 의미보다 분산개체 애플리케이션에서 스텁stub은 그 자체로 제 기능은 발휘하지 못하지만 원래 개체가 무엇인지 알아낼 수 있는 참조 역할을 하고, 원 개체의 기능조작을 위임받은 위임자proxy 역할을 하는 작은 개체로 생각하면 됩니다. 

 

스텁(stub)의 작동원리

원격 개체를 이용하고자 하는 쪽(클라이언트)은 그 원격 개체를 직접 조작하는 것이 아니라 그에 해당하는 스텁의 메쏘드를 불러내면, 이 스텁이 대신하여 원격 개체의 해당 메쏘드를 수행하는 것입니다.
원격 개체에 대응하는 스텁은 그 원격 개체가 이행하는 똑같은 원격 인터페이스들을 이행합니다. 이렇게 함으로써 스텁은 원격 개체가 이행하는 원격 인터페이스들중 하나로 캐스트(형변환)할 수 있습니다. 물론 이렇게 하면 수신 가상기계에서는 캐스트한 원격 인터페이스가 포함하는 메쏘드만 사용할 수 있습니다.

 

그러면 클라이언트가 어떻게 원격개체 메쏘드를 불러내어 조작하는지 구체적인 과정을 알아보겠습니다. 

  • 클라이언트는 조작하고자 하는 원격개체를 포함하는 원격(서버) JVM 과 접속하여 그 원격개체를 찾는다lookup.
  • 서버는 그 원격개체에 대응하는 원격 스텁을 클라이언트에게 전달한다.
  • 클라이언트는 대상 스텁의 원하는 메쏘드를 불러낸다. 이 과정에서 내부적으로 그 메쏘드의 파라미터들을 마샬링marshalling하여 원격 JVM 으로 전송한 뒤 그 응답 결과를 기다린다.
  • 서버의 스켈리턴은 호출자(클라이언트)가 보낸 마샬된 파라미터를 원래대로 복원(언마샬링unmarshal)한다.
  • 이 파라미터를 실제 원격 개체에게 전달하여 호출 대상 메쏘드를 불러낸다.
  • 호출 대상 메쏘드는 이행 결과 값이나 예외를 스켈리턴에게 되돌린다.
  • 그러면 스켈리턴은 이 되돌림값이나 예외를 마샬링하여 호출자에게 전달한다.
  • 마지막으로 원격 JVM(서버)으로부터 받은 되돌림값이나 예외를 언마샬링unmarshalling하여 이를 호출자에게 되돌린다.

스텁(Stub)과 스켈레톤(Skeleton)


스텁은 객체 그 자체와 동일한 비즈니스 메소드를 가진 인터페이스를 구현하지만, 스텁의 메소드는 비즈니스 로직 자체를 담고있지는 않으며, 클라이언트가 스텁의 비즈니스 메소드를 호출하면 호출된 메소드 명과 매개변수로 전달된 값들이 스트림 형태로 네트워크를 통해 스켈레톤에 전달된다.

 

해당 스트림을 스켈레톤이 받게 되면 스켈레톤은 스트림을 분석하여 어떤 메소드가 요청되었는지를 파악하고, 서버에 있는 객체의 비즈니스 메소드를 호출하게 된다. 메소드의 실행 결과값은 다시 스켈레톤에 의해 스텁으로 전달되며, 스텁은 마치 해당 비즈니스 로직을 로컬 컴퓨터에서 처리한 것처럼 클라이언트 애플리케이션에 결과값을 전달한다.


짐작하겠지만, 이 과정은 네트웍을 통한 자료교환을 포함하므로, 로칼에서의 메소드 콜보다는 훨씬 많은 시간을 소모한다. 따라서 원거리 호출의 횟수를 줄이는 것은 수행성능 향상을 위해 반드시 고려되어야 할 사항이다.

 

아래 그림은 Java RMI를 이용하였을 경우의 클라이언트 측의 스텁과 서버측의 스켈레톤의 형상을 보여주고 있다.


  • Beginning 자바 웹서비스(언제나 빨간책은 좋은것 같다.+_+)
  • 차세대 자바 SOAP AXIS(이것도 빨갛네 ㅎㅎ)
  • 열혈강의 XML 웹서비스(프리렉 책은 말할것도 없이 좋다.)
  • 자바를 이용한 웹서비스 구축


책을 읽고나서 실습을 하느냐, 실습을 하고 나서 책을 읽느냐는 항상 어려운 질문같다.

하지만 실습을 하기전에 AXIS서버가 하는일, SOAP가 왜 생겼는지, 그것을 왜 XML로 표기하는지, JAVA파일,

WSDL파일, WSDD파일 이 각자 무슨 역할이고 서로 어떻게 전개 되는지 등 핵심 사항들에 대해서는 간략하게 알고가

야 길목에서 내가 어디쯤 왔는지 헷갈리지 않을 것입니다. 그것에 대해 이책들은 답을 알려줄 것입니다.

책에서도 말하지만 웹서비스에 대한 정의가 다들 다르기 때문에 넓고 크게 봐서 자기만의 지식으로 만드는 것이

가장 중요한것 같습니다. 

이 후에는 과정을 진행하면서 도움을 많이 받았던 블로그나 웹페이지를 적어서 올리겠습니다.

^^ Have a nice day!!


1. 자바는 최신버전(현재 1.6)이 아닌 1.5를 받는다. 이유는 Axis 1.4에서 사용하는 XML 파서와 호환이 안되서이다.
시도를 많이 해보았는데 서블릿이 올라가지 않아 404 에러가 난다. 1.5 버전은 잘 찾아서 깔기 바랍니다.

2. 아파치 공식 홈페이지(http://tomcat.apache.org/)에서 apache tomcat 5.5.28 를 내려받는다.
   설치한다. Next를 눌러 설치하는데 유의점이 하나 있다. Oracle이 기존에 설치되어있는 경우에는 Oracle이
 8080포트를 이용하기 때문에 tomcat 포트를 default로 이용할수 없다. 필자는 8080로 사용하였다.


설치가 잘 되었다면 친숙한 고양이 한마리가 당신을 기다리고 있을것이다. 훗훗...



3. 환경변수 설정은 아직도 자신없는 부분이고 난해한 부분이다. JAVA_HOME과 CALTALINA_HOME설정은 물론
이고 path에 JAVA_HOME/bin과 CATALINA_HOME/bin 부분을 추가한다.


3. AXIS는 WSDL을 해석해주는 엔진이다. AXIS를 단독 서버 엔진으로 사용한 경우도 있지만 우리는 Tomcat과 함께 이용할 것이다. 그이유는 보안문제라는데 자세히 알고싶으면 Googling을 하길 바란다.
AXIS는 현재 버전이 1.4이상 넘어가면서 AXIS2라고 새롭게 나왔다. 서로 다른 구조를 가졌음은 물론이다. 여기서는
우선 AXIS를 사용하여 환경을 구축하도록 하겠다.

JAVA를 이용하여 서비스를 할 예정이므로 Axis(java)를 다운로드 받는다. 받고 나서 압축을 풀면


이런 형태 구조를 가지고 있다. 디렉토리에 대해 설명하자면 lib폴더는 AXIS에 관련된 라이브러리들이 들어가있고(.jar형태이다. 이것은 자바로 운영하기 때문이다.) sample폴더에는 웹서비스 sample들이 들어가있다. webapps폴더를 들어가게 되면 axis 폴더가 있는데 그폴더를 CATALINA_HOME/webapps 폴더에 복사한다. tomcat에서는 webapps 하위폴더를 서블릿으로 자동으로 인식하기 때문에 따로 Context등록을 할 필요가 없다.이렇게 하면
Axis가 설치 된것이다.

자 AXIS를 구경하러가보자!!

톰캣에 물려있는 application이기 때문에 접속시 톰캣을 경유해서 들어간다.
 http://localhost:8080/axis(대소문자유의)



자 여기까지 되었다면 당신은 99%의 성공을 거둔것이다. 메뉴를 살펴보면 Validation 이라고 있다. 이것은 AXIS설정을 확인하는 부분이다. 그리고 그밑에 List 는 deployed된 웹서비스들 목록을 보여주는 것이고, 나머지는 각자 해석에 맡긴다. ^^;;

자 그럼 과감하게 Validation을 클릭하자.
클릭후에는 설정한 환경을 출력하는데 눈에 거슬리는 부분이 있다.


"1 core axis library(ies) are missing2 wanted optional axis librar(ies) are missing"

말그대로다 . 없다는 것이다. Googling을 하여 activation.jar 과 mail.jar를 찾아 CATALINA_HOME/common/lib에
넣어주자.(xmlsec.jar파일은 보안을 위해 넣는 선택 옵션이다. 필수 라이브러리는 아니라서 제회) 두파일은 Axis공식 홈페이지에서 봤던 기억이 날뿐, 정확한 경로는 기억이 나지 않는다.

넣고 나면 AXIS 설정 화면에서 에러문이 사라진다.


설정을 맞게 하였다면, 다시 뒤로가서 List버튼을 클릭하여 sample로 등록된 서비스 목록을 확인하여 보고 또한
WSDL메시지도 확인하여 보자


다음에는 수동으로 서비스를 만들고 deployed하는 과정을 설명하겠습니다. 다음과정을 거치고 나면

이후에 배우게 될 Eclipse를 이용하여 Webservice하는 거에 대해 감사하게 될 것입니다^^



많이 부족한 정보일지 모릅니다. 그리고 어디서 많이 본 그림일지 모릅니다.

하지만 포털 검색에 03년도 자료, 99년도 자료를 보면서 최근 정보를 찾고자 하는 이들이 페이지를 클릭하며 보낼 시

간을 생각하며 열심히 Googling하고 해보고 실패하고 고쳐보고 한 경험을 다른 정보들과 엮어서 새롭게 만들었습니다.
궁금한 점이 있다면 989k@naver.com이나 http://twitter.com/vasco_989k에 질문을 해주기 바랍니다. 질문을 할수

있는 최근자료!! 그게 제가 Googling을 하며 아쉬웠던 점이였습니다.

지금은 저도 여러분도 누군가의 발자취를 따라 걷고 있지만 길을 개척할 능력을 키워 정보를 창출하기를 바랍니다.

1. XML Web Services 란?

▪ XML 기반의 분산 컴포넌트 모델

동작원리

▪ 유용한 정보를 레지스트리에 Publish 하는 것은 S/W 회사와 표준 기구들이 산업 또는 비즈니스와 관련된 스팩을 정의할 때 시작한다.(이들은 기술모델 또는 tModel로 알려져 있다.)

▪ 기업들은 그들이 제공하는 비즈니스와 서비스의 디스크립션을 등록한다.

▪ UDDI 레지스트리는 3단계에서처럼 UUID(Unique Universal Identifiler) 키로 알려진 프로그램식의 독특한 식별자를 할당함으로써 이러한 모든 Entity를 계속적으로 트래킹한다.

▪ e-Marketplaces, 검색엔진, 비즈니스 Application같은 기타 클라이언트들은 관심있는 서비스를 발견하기 위해 UDDI 레지스트리를 사용한다.

▪ 차례로 다른 비즈니스들은 이러한 서비스들을 호출하면서 간단하고 동적인 통합을 이룩한다.

2. XML Web Services 의 장점

▪ HTTP 프로토콜 이용

▪ 플랫폼과 언어 독립적 (약결합 구조

▪ 동기, 비동기 메시징

▪ 기존 시스템에 적용 가능

 3. 웹서비스 용어 설명

SOAP(Simple Object Access Protocol)

▪ 분산 환경에서 어플리케이션 간에 정보를 교환하기 위한 XML 기반의 메시지 프로토콜.

▪ 서비스를 이요하는 client와 서비스를 제공하는 server의 쌍방이 SOAP의 생성/해석 엔진을 장착함으로써 서로 다른 환경에서 오브젝트의 호출을 가능하게 되었다.

▪ 주어진기능을요청하기위해서버상의메쏘드를시작시키는XML 프로토콜

▪ Service Requester(Client)는 요청메시지를보냄

▪ Service Provider(Server)는 응답메시지를보냄

UDDI(Universal Description, Discovery & Integration)

▪ UDDI 서버는사용가능한 서비스와 Service Provider의 디렉토리로서의 역할

WSDL(Web Services Description Language)

▪ 서비스인터페이스를설명하는XML Vocabulary

AXIS(SOAP 엔진)

▪ SOAP 엔진의 하나. 서버내부에는 세 개의 Entity가 있다.(서비스 매니저, 전개된 서비스 리스트, XML 트랜슬레이터)

▪ 역할 : 메소드 호출을 SOAP 패킷으로 직렬화

SOAP 패킷을 자바 호출로 역직렬화

XML문서를 SOAP 패킷으로 포장

XML문서를 SOAP 패킷에서 꺼냄

SOAP 요청을 보내고 응답을 다룸

SOAP 요청을 받아들이고 응답을 보냄

웹서비스를 시작하기전에 What is Web Service?

웹 서비스(Web Service)는 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템이다. 웹 서비스는 서비스 지향적 분산 컴퓨팅 기술의 일종이다. 웹 서비스 프로토콜 스택은 SOAP, WSDL, UDDI 등으로 이루어진다. 모든 메시징에 XML이 사용되어 상호운용성이 높다.

기존의 분산 컴퓨팅 기술들인 CORBA, DCOM, RMI과 비교했을 때 주된 차이점은 다음과 같다.

  • 느슨한 연결(loose coupling)
  • 이진 부호화(바이너리 인코딩)가 아닌 XML 유니코드 부호화를 사용한다.
  • 객체 지향(object-oriented)이 아닌 메시지 지향(message-oriented)이다.

웹 서비스라는 명칭을 가지고 있지만 월드 와이드 웹과 혼동하여서는 안 된다. 월드 와이드 웹은 사람과 컴퓨터 간의 상호작용을 위한 시스템인 데 반해, 웹 서비스는 컴퓨터와 컴퓨터 간의 상호작용을 위한 시스템이다.

분산 컴퓨팅을 실현할 수 있는 신기술로 등장하여 큰 기대감에 매스미디어에서 여러 번 다루어져서 인지도는 증가하였다. 하지만, 시장에서의 실효성 때문에 많이 보급되지 않았다. 아직 관련 기술의 표준화가 더디어 보급은 늦어지고 있다. 하지만 최근에 서비스 지향 아키텍처(SOA)가 각광을 받으면서 그 기반 기술인 웹 서비스 또한 주목을 다시 받고 있다.

웹 2.0과 함께 SOAP을 이용하지 않는 REST 스타일 웹 서비스도 등장하여 많은 주목을 받고 있다. 웹 2.0의 한 분야로 웹 서비스를 이용하여 여러 웹 서비스를 조합하여 웹 애플리케이션이나 서비스를 구축하는 것을 매시업이라고 부른다. 현재 이러한 분야는 새로운 사업으로까지 확장해 나가고 있다

출처 : http://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%84%9C%EB%B9%84%EC%8A%A4#1.EC.84.B8.EB.8C.80

+ Recent posts