Java/웹서비스(Web Service)

[SOAP] 웹 서비스 - 서버(Provider) , Client 간단예제

고인돌개발자 2021. 7. 15. 23:45

들어가는 말...

시스템간의 인터페이스에 웹 서비스를 사용하고 있는데, 
솔루션을 사용하다보니, 그 Basic 이 궁금해졌다. 

 

자료를 찾아보니 너무 어려웠다. 

개념에 대한 내용은 많았지만, 실제 예제로 설명하는 부분은 찾기가 힘들었다. 

 

백문이불여일타.... 

 

그중 찾은 것은 유투브에 있는 자료...  

영어발음으로 보아.. 인도영화에서 들었던 그 억양... 
그 개발자에게 감사하며 여기 예제는 그 내용에 대한 정리와 내 개인적인 공부를 추가한 자료이다. 

 

유투브 영상 주소 - https://www.youtube.com/watch?v=fE1pVSiXNkU 


■ 사용 Tool. 

STS3(Dynamic Web Project) , java1.8  ( STS4에서는 오류가 발생했음. 아마도 낮은 버전의 이클립스에서 구동될듯하다.

 


■ 웹 서비스 서버 구축 

진행요약 : 이클립스 - Dynamic Web Project - 간단한 클래스 생성 - 웹 서비스 실행 - 최종 내용 확인


 

1. 이클립스 - Dynamic Web Project 구동

    New -> Dynamic Web Project -> Project Name 입력 -> next -> next -> web.xml 체크 -> Finish

<프로젝트 생성>


2. 간단한 Biz Logic 생성 
    - 사람 - 이름 , 나이 를 가져오는 너무도 일반적인 샘플 

package com.web.people;

public interface PeopleInf {
	
	public String getName();
	public int    getAge();

}
package com.web.people;

public class People implements PeopleInf {
	
	private String name ="홍길동";
	private int    age  = 30;
	
	
	@Override
	public void setName(String pname) {
		this.name = pname;
		
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public int getAge() {
		return age;
	}

}

<작업화면>

 


3. 웹 서비스 생성 
   이제 작성한 내용을 외부에서 가져다 사용 가능하도록 wsdl 을 생성한다. 

   People.java - 우버튼 - Web Service - Create Web Service

   

>>>>>>>>>>> 따라하기....

<Web Service 생성>

 

여기까지 하면,,, 신기하게도 자동으로 뭔가가 막 만들어진다. 

그리고, 서버가 구동된 후 아래와 같은 화면을 볼 수 있다. 

사실 나 이 화면 보고 감동...

 

url 은 web.xml 의 url-pattern 을 참고함.

 

<웹 서버 구동>

위에서 People (wsdl) 을 클릭하면 wsdl 명세서를 볼 수 있음.

<wsdl 명세서>

이제는 Client 에게 'localhost:8080/WebServiceServer/services/People?wsdl' url 을 전달하여 
웹 서비스 Client 를 생성하도록 하면 됨. 

 




■ 웹 서비스 Client 구축 

진행요약 : 이클립스 - java project - Web Service client 실행 - main 함수 생성

 

<java Project>


프로젝트에 - 우버튼 - New - other - web service client

 

<Web Service Client>

 

Next 


wsdl URL 입력  - 서버에서 실행했던 그 URL 


Next - Finish 

 


위 내용까지 진행하면, 자동으로 뭔가를 생성함. 

생성내용 확인 - 이해는 할 수 없지만, 좀 신기함. 

<Web Client>


▶ wsdl 명세서를 통해 위와 같은 Client 소스를 생성함. 

▶ 해당 소스에서 사용할 코드는 Proxy 가 붙은 소스를 사용.

▶ main() 클래스를 생성하여 테스트 진행 

 

Client 테스트도 성공... 

 

그럼 서버도 만들고 , Client 도 만들고....  끝...

 


여기서 ... 

내가 삽질한 내용..

 

p.setName("홍길순");  을 실행하고 

p.getName() 을 하면... 당연히 "홍길순" 이 나올줄 알았는데.... 안나옴. 그대로 "홍길동"

 

한참을 확인 후 발견한 사실....

 

위 클라이언트에서 메서드를 호출할때마다 

서버의 People 생성자가 실행됨. 

즉 , 해당 메서드를 클라이언트가 호출할때마다 서버에서는 객체가 새로 생성됨. 

 

이런 이유로 서버의 setName() 이 실행되지 않았던 것임. 

 

따라서, 어떤 값을 parameter 로 넘겨서 그 메서드가 실행하는 것에 영향을 줄수는 있지만, 

해당 메서드를 마치고, 새로운 메서드를 호출하여 연결하여 사용은 할 수 없음.