본문 바로가기
PROGRAM

[ASP/ASP.NET] 웹 서비스 (Web Service) 생성 및 참조하기

by ojava 2015. 9. 15.
반응형

ASP.NET으로 웹 사이트 개발하면서 가장 재밌는 부분이 웹 서비스였다.

DB 데이터 직접 조회 방식이 아닌 이(異)기종 플랫폼과의 통신이 주를 이루는 서비스를

개발하는 경우에 특히 웹 서비스가 많이 사용되어서 더 재밌게 느꼈을지도.

 

 

 

 

웹 서비스?

 

ASP.NET 개발의 지침서와도 같은 MSDN에서 말하는 웹 서비스의 정의는 다음과 같다.

 

웹에서 HTTP 요청을 수행하여 클라이언트 응용 프로그램에서 호출할 수 있는 웹 서버의 구성요소

 

간단히 설명되었는데 왠지 이해하기 어려운 말이므로 사용하며 느낀 바대로 얘기하자면

" 다른 응용프로그램과 통신할 수 있는 (너와 나의) 연결고리 "

데이터 호출이 가능할 뿐 아니라 전송도 가능하기 때문에 통신이라는 말을 썼으며

웹 서비스 구현내용을 기존 로직에 포함할 수도 있겠지만, 이를 분리 운영함으로써

관리 효율성도 높아진다고 생각한다. 물론 한 군데서만 쓴다면... 굳이 나눌 필요가 없어보이지만

왠만하면 이기종 시스템과의 연결고리는 분리 운영해서 관리하는 것이 낫다고 본다.

 

심지어 ASP.NET에서는 Visual Studio가 제공하는 마법사 덕분에 웹 서비스 구현이 아주 쉽다!

 

 

 

 

마법사와 함께하는 웹 서비스 만들기

 

개발 기준은 Visual Studio 2008 Professional Edition 임다.

웹 서비스가 되어줄 새 프로젝트부터 일단 만들어야합니다.

 

새 프로젝트 > Visual C# > 웹 > ASP.NET 웹 서비스 응용 프로그램

 

이름에서부터 나 웹 서비스에 최적화 된 프로젝트임 ㅋ_ㅋ

이런 느낌이 물씬 나므로 쟤를 선택해서 새로 생성해주도록 하자.

새로 생성하게 되면 프로젝트 생성과 함께 낯선 확장자의 파일이 생겨있다.

 

 

 

ASMX (ASP.NET Web Service File)

 

웹 서비스를 만드는 시각적으로 디자인 된 클래스 파일.

정작 내용이 있는 건 asmx가 아니라 asmx.cs 파일이긴 하지만...

 

해당 파일의 클래스 내에 정의한 Method 들을 호출하여 사용할 수 있는 구조로 구성된다.

기본적으로 만들어지는 함수는 프로그래밍의 영원한 첫 인사 Hello World 를 출력하는 함수인 HelloWorld다.

 

실제적으로 내용을 구현해서 하자니 별로 구현할 내용이 없기 때문에

기존에 구현된 HelloWorld가 어떻게 화면에 호출되는 지 확인해보도록 하자.

 

 

구현된 내용을 바로 실행하려니까 FAIL... 왜 내 블로그 포스팅을 도와주질 않니

그냥 IIS 세팅해서 올리려고 하니까 또 실패... Aㅏ.....

오류 읽어보니까 응용 프로그램으로 전환해주라고 해서 IIS에서 해당 사이트의 프로젝트를

'응용프로그램 추가' 해서 변환해주니까 정상적으로 실행이 됨미다.

 

 

 

 

IIS > 해당 사이트 > 하위 폴더에서 webservice 구현 폴더 (프로젝트 폴더) 우 클릭하고 응용 프로그램으로 변환!

클릭하면 뜨는 팝업에서 그냥 확인 누르면 응용 프로그램으로 변환된당.

 

(IIS 들어가보니까 기존에 구현해 놓은 내용도 그렇게 변환해놓은거 보고 기억력의 한계를 실감...)

 

 

 

 

웹 서비스 실행하기 그리고 XML

 

IIS 세팅도 했으니 이제 로컬에서 잘 구동되겠지! 하고 들어가 봅니다.

 

 

 

웹 서비스 클래스 정의내용웹 서비스 클래스 정의내용

 

 

드디어 잘 뜨네용

Service1.asmx 의 클래스명이 Service1 이므로 상단에 뜨는 내용도 Service1 입니다.

그리고 그 밑에 목록으로 뜨게 되는 내용들은 해당 클래스에 정의한 함수들입니다.

지금은 HelloWorld만 있기 때문에 외롭게 하나만 덩그러니 있네요.

 

 

 

HelloWorld 함수를 클릭해서 들어가보면 다음과 같이 상세한 작업목록이 뜹니다.

HTTP POST 프로토콜을 사용한 작업 테스트도 가능하다고 하니, 호출 버튼을 클릭해서 내용 확인을 해봅시다.

 

 

 

웹 서비스 Method 상세내용웹 서비스 Method 상세내용

 

 

 

 

호출을 클릭하면 다음과 같이, 결과값이 뜨게 됩니다.

HTTP POST 프로토콜을 사용해서, String Type의 Hello World라는 결과를 반환하는

xml 문서가 나오는 것을 확인할 수 있습니다.

 

함수 호출 결과값 (HTTP POST 프로토콜)함수 호출 결과값 (HTTP POST 프로토콜)

 

 

 

 

이와같은 결과값을 return 하게 된다는 것은 HelloWorld 함수를 클릭했을 때 나오는 상세 화면의

하단에 결과값 Type 별로 어떤식으로 요청 및 응답이 오가는 지 예시가 나오니까 이를 보면서 확인하시믄 됩니당.

 

 

HTTP POST 요청 및 응답 예시HTTP POST 요청 및 응답 예시

 

 

 

상단에서 Mold_webservice (제가 정의한 웹 서비스 프로젝트명) 의 Service1.asmx (프로젝트 내 클래스 명)의

HelloWorld 웹 서비스를 HTTP/1.1 방식으로 요청하고 있고, 이에 대해서 하단에서 응답을 보내옵니다.

 

 

웹 서비스 프로젝트명 / 웹 서비스 클래스명 / 호출하기를 원하는 함수명

 

 

 

이에 대한 응답은 HTTP 응답 결과 코드와 함께, XML 방식의 문서로 결과값을 전달합니다.

웹 서비스를 참조하는 경우에도 xml로 결과를 return 하도록 세팅해서 받는 부분에서 xml parsing을 통해

데이터 추출을 해도 되고 또는 그냥 string으로 반환해서 쪼개써도 됩니다.

일반 string으로 넘기는 경우에는 데이터를 어떻게 넘기는 지 잘 기억해둬야한다는게 함정

 

 

 

 

웹 서비스 참조하기

 

웹 서비스 참조방법은 만들기보다 더 쉽습니다. Visual Studio는 정말 만능. 마법사. 능력자 ㅋ_ㅋ

아래처럼 프로젝트에 오른쪽 클릭! 또는 참조 항목에서 오른쪽 클릭하면 웹 참조 추가가 뜹니다.

저는 이미 웹 참조가 몇 개 걸려있네요~~~

 

 

 

 

 

이렇게 웹 참조 추가를 통해 원하는 웹 서비스 주소를 넣고 추가하면 끝! 인데...

웹 참조가 안보임여 ㅠㅠㅠ 하는 경우가 있기도 한데.. 그런 경우에는 다른 방법이 있습니다.

 

 

 

 

웹 참조 추가 대신 보이는 < 서비스 참조 추가 > 메뉴를 클릭하면 다음과 같은 창이 뜹니다.

 

 

 

 

서비스 참조.. 에는 볼 일이 없고, 고급 기능으로 들어갑니다.

 

 

 

 

 

 

 

고급 항목으로 들어가면 서비스 참조에 대한 고급 설정이 가능한데

그 부분에 호환성 항목으로 웹 참조 추가 항목을 찾을 수 있습니다. 엉엉 ㅠㅠ

이렇게 숨어있다니... 이렇게 한 번 추가하고나면 아까 그 메뉴에서도 웹 참조 추가가 바로 뜬답니다.

 

 

 

 

 

 

 

 

어렵게 찾은 웹 참조 추가화면입니다.

노란색으로 강조표시 (믿기지 않겠지만 강조표시 한거에여 원래 노란색 아님...) 한 URL 입력란에

아까 만들었던 웹 서비스 URL을 넣어봅시다.

 

우린 localhost만 만들어두었으니 본인들의 localhost 혹은 IP 주소를 넣고 해당 경로를 넣으면 참조가 가능합니다.

서버에 올려둔 경우라면 해당 서버 IP와 함께 웹 서비스 참조 경로가 되는 URL을 넣으면 되겠져!

 

 

 

 

 

 

 

요렇게 URL을 입력하고 '이동' 버튼을 클릭하면

왼쪽 하단의 창에 웹 서비스 주소로 접속했을 때 처럼 웹 서비스 상세내역 화면이 보여집니다.

그리고 찾아진 웹 서비스를 어떤 이름으로 웹 참조 추가할건지 직접 입력이 가능합니다.

 

기본으로 주어지는 이름은 아주 대놓고 웹 참조임ㅋ 이런 느낌이므로

원하는 이름으로 변경해서 등록해주시면 됩니당.

 

해당 이름을 이용해서 웹 서비스 객체를 생성하게 됩니당.

만약 정말로... WebReference로 웹 참조명을 설정했다면 다음과 같이 웹 참조 객체 생성이 되겠져

 

WebReference.Service1 ws = new WebReference.Service1()

└── 클래스명

 

 

 

 

 

웹 서비스 내용이 변경된 경우에는?

 

웹 서비스를 별도로 빼둔 이유는 관리를 효율적으로 하기 위해서니까...

각각 별도로 변경할 수도 있을텐데 그렇다면 웹 서비스 내용이 변경된 경우에 해당 내용을 바로 가져올 수 있을까여?

 

웹 서비스 내용이 변경되어서 새로운 함수가 생성되거나 함수 내용이 바뀌는 경우에는

참조했던 웹 서비스의 내용을 갱신해주어야 합니다. (매개변수나 결과값이 같고 리팩토링만 진행했으면 뭐 굳이...)

 

갱신을 원하는 웹 참조에서 오른쪽 클릭을 하면 메뉴가 주르륵 나오는데,

중간즈음에 웹 참조 업데이트라는 기능이 존재합니다.

 

이를 통해 웹 서비스 내용을 갱신할 수 있고 신규 함수 사용도 가능해집니다.

 

 

 

 

 

웹 서비스 만들면서 뭔가 많은 재미를 느꼈던거 같은데 내용은 공부하면 공부할 수록 많이 나오네용.

Visual Studio는 많은 내용을 알지 않아도 사용할 수 있게 해줘서 편리하지만 이것만 사용하면 바보가 될것같아여...

 

다음 포스팅에서 만나여~

반응형