메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

IDE 없이 웹 서비스 개발하기, Part 2: "Hello World!" 구현 – 명령행에서 웹 서비스 클라이언트 만들기 (한글)

Alec Go, Software Engineer , IBM
Alec Go, Software Engineer , IBM

요약:  WSDL2Java 명령어를 사용하여 "Hello World" 자바 애플리케이션 웹 서비스를 구현해 봅시다. TCPMonitor를 사용하여 HTTP 메시지를 트레이싱 하는 방법도 설명합니다.

이 연재 자세히 보기

원문 게재일:  2006 년 4 월 04 일
난이도:  초급
페이지뷰:  1315 회
의견:  


머리말

Part 1에서는 명령행에서 웹 서비스 프로바이더를 구현해 보았다. 이번에는 Integrated Development Environment(IDE) like WebSphere® Studio Application Developer(WSAD)나 Rational ® Application Developer(RAD) 없이 웹 서비스 클라이언트를 구현하는 방법을 설명하겠다. 웹 서비스 클라이언트의 구현은 간단하다. 구현 과정에서 Java™ 컴파일러와 WSDL2Java를 사용하는 방법도 배우게 될 것이다. HTTP 메시지를 트레이싱 하는 방법을 설명하기 위해 TCPMonitor를 사용했다.

이 글은 아래와 같은 전제 조건이 있다.

  1. Windows 기반 OS
  2. WebSphere Application Server 5.x 또는 6.x. 트라이얼 버전 다운로드


준비

Part 1부터 시작하지 않았다면, 다운로드 섹션에서 WebSphere Application Server Administration Console을 사용하여 WAR 파일을 설치하라. 이미 WAR 파일이 있다면 이 단계를 무시해도 된다. WAR 파일 설치 단계는 아래와 같다.

Applications -> Enterprise Applications -> Install로 간다. Local Path는 HelloWorld.war의 위치를, Context Root는 HelloWorldWAR를 지정한다.



그림 1. Admin Console 모습
Admin Console

WSDL 파일이 처음 만들어졌을 때, 위치 매개변수는 "http://localhost:9080/HelloWorldWAR/services/HelloWorld."로 설정되었다. 따라서, WSDL 파일을 클라이언트 생성에 사용하려면 Context Root는 "HelloWorldWAR"가 되어야 한다.

기본 내용들은 모두 Next를 누른다. WAR 설치를 끝내면 모든 변경 사항들을 저장하라. 가장 중요한 단계는 WAR 파일을 시작하는 것이다. 이 단계는 쉽게 잊혀진다.


클라이언트 구현하기

웹 서비스 프로바이더가 올바르게 시작되었다고 가정하고, 이제 클라이언트를 만들어야 한다. 세 가지 기본 단계가 있다.

  1. WSDL에서 클라이언트 스텁 구현하기
  2. 스텁을 사용하는 자바 클래스 개발하기
  3. 클라이언트를 실행하는 자바 파일 컴파일하기


WSDL에서 클라이언트 스텁 구현하기

웹 서비스 프로그래밍 모델의 강점은 원격 메소드를 호출하기가 쉽다는 점이다. WSDL은 스텁(stub)을 만드는데 사용되고, 이것은 클라이언트 측의 원격 객체를 나타내는데 사용될 수 있다.

A) 디렉토리(c:\temp\Client)를 만든다. Part 1에서 만들었던 HelloWorld.wsdl을 복사하거나, 다운로드 섹션에서 다운로드 한다.

B) 명령행 프롬프트를 열고 c:\temp\Client를 검색한다. 다음 명령어를 입력한다.


Listing 1. 명령행 프롬프트 설정하기
							
SET WAS_HOME=C:\Program Files\WebSphere\AppServer5.1

call "%WAS_HOME%\bin\setupcmdline.bat"	

첫 번째 라인에서는 WebSphere Application Server가 설치될 장소에 "WAS_HOME"환경 변수를 설정한다. 이것이 정확한 디렉토리를 가리키는지를 확인하라. 두 번째 라인은 JAVA_HOME 같은 추가 환경 변수를 설정하는 스크립트를 호출하게 될 것이다.

C) WSDL2Java 명령어를 사용하여 클라이언트 스텁을 생성한다.


Listing 2. WSDL2Java 실행하기
				
call "%WAS_HOME%\bin\WSDL2Java" -role client -verbose -output . HelloWorld.wsdl

다음은 우리가 사용할 옵션들이다.

  • Role - 서버나 클라이언트를 지정하는데 사용된다. 우리는 클라이언트를 구현하는 것이므로 후자를 선택했다.
  • Verbose - 매 단계 마다 메시지들을 콘솔에 프린트 한다.
  • Output - 현재 디렉토리를 지정하기 위해 마침표를 사용한다.
  • WSDL file - 언제나 마지막 인자가 된다.

이 명령어를 실행한 후에는 다음과 같이 콘솔에 나타난다.


Listing 3. WSDL2Java의 아웃풋
				
WSWS3185I: Info: Parsing XML file:  HelloWorld.wsdl
WSWS3282I: Info: Generating .\mypackage\HelloWorld.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldSoapBindingStub.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldService.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceLocator.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceInformation.java.


mypackage라는 디렉토리는 위 파일들을 사용하여 만들어 진다. 다음은 파일에 대한 상세이다.

  • HelloWorld.java - Service Endpoint Interface이다.
  • HelloWorldSoapBindingStub.java - Service Endpoint Interface의 구현이다.
  • HelloWorldService.java - Service Interface이다.
  • HelloWorldServiceLocator.java - Service Interface의 구현이다.

유념해야 할 것으로는,

  • Service Endpoint Interface: HelloWorldSoapBindingStub은 HelloWorld를 구현한다.
  • Service Interface: HelloWorldServiceLocator는 HelloWorldService를 구현한다.

다음 섹션에서 클라이언트를 구현하면서 자세히 설명하겠다.


스텁을 사용하는 자바 클래스 개발하기

다음은 생성된 스텁을 활용하는 클래스 파일을 만들 차례이다. "mypackage" 디렉토리에서 HelloWorldClient.java 파일을 만든다. 다음 코드를 붙인다.


Listing 4. HelloWorldClient.java
				
package mypackage;

public class HelloWorldClient {
    public static void main(String[] args) throws Exception
    	{
	HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();
	HelloWorld hw = hwlocator.getHelloWorld();
	String str = hw.sayHello();
	System.out.println(str);
	}
}

웹 서비스를 호출하는데 단 세 줄만 사용된다.

A) HelloWorldServiceLocator는 Service 객체이다. 간단히 말해서 Service 객체는 생성된 스텁을 얻는데 사용된다. Service 객체는 다음 라인에 의해 생성된다.


Listing 5. HelloWorldServiceLocator 만들기
				
HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();

서비스 객체의 이름은 언제나 *service name*Locator여야 한다. 여기에서 *service name*은 WSDL 파일에서의 서비스 이름이다.

주: J2EE라는 정황에서(서블릿이나 EJB 내에서) Service 객체는 JNDI를 통해 가져올 수 있다. 우리는 J2SE 클라이언트를 사용하기 때문에 이것은 Service 객체를 가져올 수 있는 유일한 방법이다.

B) 이제는 클라이언트 스텁이 생성되어야 한다. 이 스텁은 원격 객체를 나타낸다.


Listing 6. 스텁 생성하기
				
HelloWorld hw = hwlocator.getHelloWorld();

포트를 얻는 메소드는 언제나 get*port name*여야 한다. *port name*은 WSDL 파일에서의 포트의 이름이다.

C) 이 스텁에 원격 메소드가 호출될 수 있다. 우리는 여기서 스텁에 대해 sayHello 메소드를 사용하고 리턴 값을 String에 둔다.


Listing 7. 스텁에 메소드 호출하기
				
String str = hw.sayHello();


클라이언트 컴파일과 실행

이제는 클라이언트를 실제로 컴파일 해보자. 다음 명령어를 사용하여 컴파일 한다.


Listing 8. 클래스 컴파일 하기
				
"%JAVA_HOME%\bin\javac" -extdirs "%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage\*.java

클래스 파일들은 mypackage 디렉토리에 나타나야 한다. 마지막으로 자바 애플리케이션을 실행한다.


Listing 9. 자바 애플리케이션 실행하기
				
"%JAVA_HOME%\bin\java" 
	-Djava.ext.dirs="%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage.HelloWorldClient

"Hello World!"가 콘솔에 나타날 것이다. 축하한다! 여러분의 클라이언트에서 웹 서비스를 호출하는데 성공했다.


TCPMonitor Trace 설정하기

나머지 단계에서는 데이터가 연결되는지를 확인한다. WebSphere Application Server에는 TCPMonitor라고 하는 툴이 있다. 이 툴로 HTTP 메시지들을 트레이싱 할 수 있다. TCPMonitor를 사용하려면 이를 클라이언트와 서버 사이에 두어야 한다. 현재, 클라이언트는 서버와 직접 인터랙팅 한다. 우리는 클라이언트가 TCPMonitor와 인터랙팅 하도록 지시할 것이고, TCPMonitor가 트래픽을 서버로 보내게 될 것이다.

A) TCPMonitor를 활용하려면 클라이언트를 변경해야 한다. HelloWorldClient.java를 다음과 같이 편집한다.


Listing 10. HelloWorldClient.java
				
package mypackage;
import javax.xml.rpc.Stub;
public class HelloWorldClient {
    public static void main(String[] args) throws Exception
    	{
	HelloWorldServiceLocator hwlocator = new HelloWorldServiceLocator();
	HelloWorld hw = hwlocator.getHelloWorld();
	((Stub) hw)._setProperty("javax.xml.rpc.service.endpoint.address",
		"http://localhost:1234/HelloWorldWAR/services/HelloWorld");
	System.out.println(hw.sayHello());
	}
}
		

((Stub) hw)._setProperty("javax.xml.rpc.service.endpoint.address", "http://localhost:1234/HelloWorldWAR/services/HelloWorld"); 라인이 추가되어 클라이언트가 트래픽을 보낼 엔드포인트를 변경한다. private final java.lang.String helloWorld_address = "http://localhost:9080/HelloWorldWAR/services/HelloWorld"; 라인과 함께 디폴트 엔드포인트 주소는 HelloWorldServiceLocator.java 파일에 지정된다.
포트를 9080에서 1234로 변경했다. HelloWorld 인스턴스를 Stub 객체로 던지기 위해서는 java.xml.rpc.Stub을 반입해야 한다.

B) TCPMonitor를 실행할 때 WebSphere Application Server에서 제공하는 자바 버전을 사용해야 한다. 그렇지 않으면 NullPointerException을 받게 된다. 다음 명령어를 실행한다.


Listing 11. TCPMon 실행하기
				
"%JAVA_HOME%" -Djava.ext.dirs="%WAS_EXT_DIRS%" com.ibm.ws.webservices.engine.utils.tcpmon	

C) 다음 값을 지정한다.


Listing 12. TCPMon의 값들
				
Listen Port - 1234
Target Hostname - localhost
Target Port # - 9080
		

윈도우 모양은 다음과 같다.
그림 2. TCPMonitor에서 값 설정하기
Setting values in TCPMonitor

다음에는 Add 버튼을 클릭한다. TCPMonitor가 1234 포트에서 트래픽을 수락하여 이를 9080 포트로 리다이렉션 하도록 설정될 것이다. Add 버튼을 클릭한 후에 리스너가 자동으로 실행된다. TCPMonitor의 상단에 있는 탭에 리스너가 나타날 것이다.

D) 다음 명령어를 통해 웹 서비스 클라이언트를 재컴파일 및 호출한다.


Listing 13. HelloWorldClient 실행하기
				
"%JAVA_HOME%\bin\javac" 
	-extdirs "%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage\*.java
"%JAVA_HOME%\bin\java" 
	-Djava.ext.dirs="%WAS_CLASSPATH%;%WAS_EXT_DIRS%;." mypackage.HelloWorldClient	

E) TCPMonitor 윈도우에서 트래픽을 검사하라. SOAP envelope는 한 줄로 모든 것을 나타낸다. 웹 서비스 엔진은 공간을 절약하기 위해 새로운 줄을 만들지 않는다.


그림 3. TCPMonitor 아웃풋
TCPMonitor output

F) 읽기 쉬운 XML을 만들려면 tcptrace.xml 이라는 새로운 파일을 만들어서 XML을 여기에 붙인다.


결론

웹 서비스 프로그래밍 모델을 활용하면 클라이언트 애플리케이션이 사용할 스텁을 매우 쉽게 만들 수 있다. 이 글에서 설명한 기술들을 사용하고 있는 많은 웹 서비스들이 있다. Google, Amazon, Ebay, Fedex 웹 사이트가 현재 여러분이 사용할 수 있는 웹 서비스를 갖고 있다.


부록 A: 클라이언트를 자동으로 구현하기

위 단계들은 아래 다운로드 섹션의 WebServiceTutorial.bat을 사용하면 자동화 될 수 있다. 먼저, WebServiceTutorial.bat을 변경하여 WAS_HOME 디렉토리가 현재 WAS 설치 디렉토리를 가리키도록 한다. 그런 다음 배치 파일을 실행한다. 아웃풋은 다음과 같다.


Listing 14. WebServiceTutorial.bat의 아웃풋
				

1. Creating Binding Classes...
WSWS3185I: Info: Parsing XML file:  HelloWorld.wsdl
WSWS3282I: Info: Generating .\mypackage\HelloWorld.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldSoapBindingStub.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldService.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceLocator.java.
WSWS3282I: Info: Generating .\mypackage\HelloWorldServiceInformation.java.
2. Compiling Java Client...
3. Running Java Client...
Hello World!

기사의 원문보기



다운로드 하십시오

설명이름크기다운로드 방식
Hello World WAR file to install on server sideHelloWorld.war6KBHTTP
Hello World WSDL fileHelloWorld.wsdl3KBHTTP
Script to build the client automaticallyWebServiceTutorial.bat1KBHTTP
Final codeFinish.zip14KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기

토론

필자소개

Alec Go, Software Engineer , IBM

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=SOA와 웹서비스, WebSphere
ArticleID=107260
ArticleTitle=IDE 없이 웹 서비스 개발하기, Part 2: "Hello World!" 구현 – 명령행에서 웹 서비스 클라이언트 만들기 (한글)
publish-date=04042006
author1-email=
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.