저자: Microsoft Korea 이건복(
kevy60@hotmail.com)
얼마 전 모 항공사의 웹 서비스 데모 요청을 받고, 어떤 예제를 만들어야 조금 더 효과적으로 웹 서비스를 설명할 수 있을까라는 고민을 해야만 했다. 그 이유는 그 동안 웹 서비스에 대하여 많은 세미나를 진행하면서 고객들은 일반적인 웹 서비스는 이해하지만 현재 자신의 상황에 맞는 웹 서비스의 개발에 대하여 시원한 답을 얻지 못하고 있다는 것을 알게 되었고, 필자 자신도 항공사에 맞는 특별한 데모를 보여주고 싶었기 때문이었다. 데모를 위하여 이곳 저곳을 찾아보다가 .NET 개발자 대상의 뉴스레터에서 Office XP Web Service Toolkit을 다운로드 받을 수 있다는 내용을 보게 되었다. 오호! 그 내용을 보는 순간 느낌이 왔다. "그래 이걸 한번 사용해 보자"는 생각에 바로 MSDN 사이트로 가서 Toolkit을 다운로드 받았다.
Toolkit을 설치하고 기존에 만들어놓은 웹 서비스를 Excel에서 호출해보았다. 결과는 대만족이었다. 기존에 Visual Studio .NET에서 만든 웹 서비스를 아무런 무리 없이 가져오고, 사용법도 너무 간단했다. 필자는 이 Toolkit을 보면서 이것이 바로 소규모 클라이언트 환경에서 가장 적합한 웹 서비스 클라이언트 모델이라는 생각이 들었다. 웹 페이지 안에서 웹 서비스를 사용하는 방식보다는 실제 업무에서 사용하고 있는 오피스 문서에서 바로 웹 서비스를 사용할 수 있는 방식이 더 현실적인 모델이라고 생각한다. 또 한편으로 어쩌면 이것이 Office .NET의 모습이 아닐까 조심스럽게 추측을 해보았다. 어찌 되었건 필자는 Office XP Web Service Toolkit은 상당히 만족스럽게 생각한다.
그럼 이제부터 필자와 함께 Office XP 웹 서비스 Toolkit을 단계별로 사용해보기로 하자.
- ※예제의 실행조건:
- 당연한 이야기겠지만 Visual Studio .NET RC0 빌드버전 이상이 설치되어 있어야 한다. 그리고 Office Web Service Toolkit은 http://msdn.microsoft.com/office에서 다운로드 한다. 다운로드한 파일을 실행하면 시작메뉴에 항목이 추가되어 도움말과 예제를 볼 수 있다.
우선 사용할 웹 서비스를 개발하자.
여기서는 웹 서비스가 무엇이고, 웹 서비스의 개발을 어떻게 해야 되는지에 대해서는 설명하지 않겠다. 만약 웹 서비스의 기본적인 개념에 대해서 알고 싶다면 데브피아의 온라인 동영상 세미나를 참고하기 바란다(
http://www.devpia.com).
이제부터 만들 웹 서비스는 항공사의 비행편을 예약하는 서비스 함수다. 출발일자와 복편일자 그리고 목적지만 입력하면 우리는 간단하게 비행편을 예약을 할 수 있다(실제 항공사 예약 함수는 절대로 이렇게 간단하지 않다.^^ 여기서는 어디까지나 예로서 간단한 함수를 생성했음을 참고하기 바란다). VB.NET을 이용하여 다음과 같이 간단한 웹 메소드를 작성한다. 이 함수는 3개의 파라미터를 받아서 이 내용을 데이터베이스에 저장하고 작업 결과를 Boolean 형식으로 알려주는 간단한 함수다(여기서 사용한 FLReserve 테이블은 모두 varchar 형식의 필드로 구성했다).
예제 웹 서비스 코드:
Public Function FLReservation(ByVal s As String, ByVal r As String, ByVal d
As String) As Boolean
Try
Dim Cn As New SqlClient.SqlConnection()
Dim Cmd As New SqlClient.SqlCommand()
Cn.ConnectionString = "User ID=sa;Password=test;Data
Source=MyServer;Initial Catalog=pubs"
"데이터베이스 연결은 각자 환경에 맞게 수정해야 한다
Cn.Open()
With Cmd
.CommandText = "INSERT FLReserve values(" & """ & s & """ & "," & """ & r
& """ & "," & """ & d & """ & ")"
.Connection = Cn
.ExecuteNonQuery()
End With
FLReservation = True
Cn.Close()
Catch e As Exception
Debug.Write(e.Message)
FLReservation = False
End Try
End Function
이렇게 작성된 서비스를 실행하면 다음과 같은 웹 서비스 테스트 화면으로 이동하여 서비스의 작동상태를 확인해 볼 수 있다.
[예제로 작성한 웹 서비스의 실행 화면]
Excel에서 웹 서비스를 이용하는 방법
그럼 이제부터는 위에서 작성한 웹 서비스를 오피스의 Excel에서 사용하는 방법에 대하여 알아보기로 하자. 꼭 Excel일 필요는 없다. VBA를 사용할 수 있는 환경이라면 Outlook이나 Word에서도 가능하다. Excel의 "도구" 메뉴에서 "사용자정의" 대화상자를 열어서 폼 디자인 툴바를 추가한다.
[사용자정의 메뉴창]
[추가된 폼 디자인 도구모음]
추가된 도구모음 상자에서 버튼을 선택하여 적당한 위치에 그려 넣는다. 그리고 "도구" 메뉴에서 매크로를 선택한 다음 Visual Basic 편집창을 실행한다. 아래 그림과 같이 Visual Basic 편집창의 도구 메뉴에서 웹 서비스 추가창을 선택한다.
[웹 참조 추가 메뉴]
웹 서비스 참조 버튼을 누르면 다음과 같은 창이 나타나게 되는데 여기서 기본으로 설정된 웹 서비스 검색을 선택하지 않고, 웹 서비스 URL을 선택한 다음, 사용하고자 하는 웹 서비스의 URL을 입력한다. 이때 VS.NET에서 개발된 웹 서비스의 URL은
http://localhost/TestWS/service1.asmx?wsdl과 같은 방식으로 입력한다.
[웹 참조 추가 대화상자]
URL을 입력하고 "검색"을 누르면 오른쪽의 검색 결과 창에 발견된 서비스가 나타난다. 발견된 서비스를 선택하고 "추가" 버튼을 누른다. 이렇게 추가하면 VBA 프로젝트에 아래 그림과 같은 웹 서비스 클래스가 추가된 것을 확인할 수 있다.
[추가된 웹 서비스 클래스]
자동으로 생성된 클래스를 살펴보면 클래스 생성 및 소멸 프로시저와 다음과 같은 웹 서비스의 함수를 호출하는 메소드를 볼 수 있다. 이것은 웹 서비스의 WSDL 내용을 읽어와서 Toolkit에서 자동으로 생성된 프록시 함수라고 볼 수 있다.
Public Function wsm_FLReservation(ByVal str_s As String, ByVal str_r As String, ByVal str_d As
String) As Boolean
"*************************************************************
" Proxy function created from http://localhost/FlightWS/Service1.asmx?wsdl
"*************************************************************
"Set error trap
On Error GoTo wsm_FLReservationTrap
wsm_FLReservation = sc_Service1.FLReservation(str_s, str_r, str_d)
Exit Function
wsm_FLReservationTrap:
Service1ErrorHandler("wsm_FLReservation")
End Function
자동으로 생성된 모듈파일(Module1.bas)에 다음과 같이 버튼 클릭 이벤트 처리 코드를 작성한다.
Sub Button1_Click()
" 웹 서비스의 객체 생성
Dim obj As New VBAProject.clsws_Service1()
Dim rtn As Boolean
Dim s As String
Dim d As String
Dim p As String
s = Range("B4").Value " 워크시트에서 해당값을 읽어온다
d = Range("B5").Value
p = Range("B3").Value
r = obj.wsm_FLReservation(s, d, p) " 웹 메서드 호출
If r = True Then
MsgBox("예약 성공")
Else
MsgBox("다시 시도해 주세요")
End If
End Sub
[작성한 Excel워크시트]
이렇게 하면 모든 개발 과정이 끝이다. 이제 남은 일은 Excel의 워크시트를 예쁘게 꾸미는 일이다.
필자의 가상 시나리오는 이렇다. 사내에서 출장을 가게되면 출장신청서를 작성하게 된다. 이때 관리자나 인사부서에 출장신청서를 제출하면서 동시에 웹 서비스를 이용하여 해당 출장 일정에 맞는 항공편을 예약할 수 있는 문서를 직원들에게 제공한다면 업무의 효율을 높일 뿐만 아니라 별도의 프로그램을 작성할 필요도 없게 된다. 항공사 측면에서도 다양한 환경에서 항공사의 예약 시스템을 사용하게 되어 많은 이익을 얻을 수 있게 될 것이다.
[실행 화면]
필자가 이 데모를 고객에게 시연할 때는 일반 웹 페이지와 윈도우 폼 그리고 모바일 장비에서도 웹 서비스를 사용하는 부분을 같이 진행하였다. 고객의 반응은 매우 흥미롭게도 "흠, 웹 서비스란 거의 모든 곳에서 쓸 수 있군…"이었다. 필자가 원했던 것이 바로 그것이다.
웹 서비스란 현재 우리가 알고 있는 웹이나 윈도우 프로그램뿐만 아니라 오피스 문서에서 사용할 수 있듯이 웹 서비스가 자동차, 냉장고, 에어컨, 전화 등 일반 가전제품에까지 확대될 수 있는 것이다. 또 한편 어떤 회사가 클라이언트 영역에서 웹 서비스를 쉽게 사용할 수 있는 환경을 제공하게 될지 생각해보았다. 지금까지 대형 서버만을 고집했던 회사가 이러한 웹 서비스 환경에 얼마나 적절한 답을 줄지 의문이다.