웹서비스와 네이티브 HTTP 지원 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
서비스 지향 기술구조(SOA)를 기반으로, SQL Server 2005에서는 네이티브 HTTP를 사용하여 직접 SOAP 기반으로 웹서비스를 게시하는 기능을 제공합니다. 웹 서비스의 개념과 SQL Server 2005를 통해 데이터베이스 어플리케이션에서 네이티브 HTTP 기능을 사용하는 방법에 대해서 살펴 봅니다. SQL Server 2005의 네이티브 HTTP 지원기능을 통해 산업표준통신 메커니즘에 근거하여 최소한의 노력을 투자하여 데이터베이스와 통신할 수 있도록 설정할 수 있습니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
웹서비스와 SOAP이란? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
웹 서비스와 SOAP은 분산 어플리케이션 개발 모델의 단점을 보완하는 웹 표준입니다. ■ 웹 서비스 웹 서비스는 인터넷 또는 인트라넷을 통해 접근이 가능한 프로그래밍 가능한 로직을 제공하며, 분산 어플리케이션을 개발하기 위한 빌딩블럭의 역할을 수행합니다. 웹 서비스는 블랙박스의 개념으로, 내부에 구현이 캡슐화되며, 웹서비스 간에 통신을 위한 인터페이스를 제공합니다. ■ 웹서비스를 사용하는 장점 ㆍ 상호운영성. 웹 서비스는 HTTP와 XML을 사용하여 통신하기 때문에, HTTP와 XML을 지원하는 모든 네트워크 노드에서 웹 서비스를 호스팅할 수 있고, 웹 서비스를 사용할 수 있습니다. ㆍ 다중 언어 지원. 개발자는 어떤 개발언어로도 웹 서비스를 개발할 수 있습니다. ㆍ 기존 어플리케이션 재사용. 기존 컴포넌트와 라이브러리를 간단하게 웹서비스로 제공할 수 있습 니다. 기존 회사에 보유하고 있는 기존 컴포넌트, 라이브러리, 어플리케이션은 상당히 많습니다. 이러한 기존 자원을 다시 구현할 필요없이 소프트웨어 자원의 기능을 재사용할 수 있기 때문에 비용을 절약할 수 있습니다. ㆍ 산업표준사용. HTTP, XML, SOAP과 같은, 웹서비스 관련 기술은 거의 모든 벤더에서 지원하고 있습니다. 산업표준을 사용함으로써 이기종 시스템간에 통신을 좀 더 쉽게 처리할 수 있습니다. ■ SOAP SOAP은 분산환경에서 분산되어 있는 정보를 교환하기 위한 프로토콜입니다. SOAP 메시지를 교환하는 방법을 통해, 웹 서비스간에 통신을 처리할 수 있습니다. SOAP 메시지는 헤더와 본문으로 구성된 XML 문서입니다. 기본적으로 SOAP 메시지는 송신자(sender)에서 수신자(receiver)에게 보내는 단방향 전문입니다. SOAP에는 프로그램 모델, 구현상세정보 등과 같은 어플리케이션 정보에 대해서는 정의하지 않습니다 그러므로, 웹 서비스는 HTTP 요청 및 응답 체계안에 SOAP 메시지를 보내는 요청/응답 모델을 사용합니다. ■ 웹 서비스 예제 웹서비스를 기반으로 웹 사이트의 기능을 제공할 수 있습니다. 여행사 웹 사이트 시나리오 에서, 사용자가 웹 페이지에 여행지에 대한 도시명을 입력합니다. 해당 페이지에서는 지정된 도시명을 매개변수로 SOAP을 사용하여 웹 서비스를 호출합니다. 웹 서비스에서는 여행지 도시에 대한 기상정보, 환율 등과 같은, 해당 페이지에 필요한 정보를, SOAP 메시지형태로 반환합니다. 웹 페이지에서는 해당 반환값을 필요한 형식으로 전환하여 사용자에게 보여주면 됩니다. 사용자 관점에서는, 필요한 정보를 해당 웹 사이트에서 충분하게 제공받을 수 있다는 장점이 있습니다. 코드를 작성하는 개발자 관점에서는, 웹 사이트를 개발하기 위해 다른 업체에서 제공하는 웹 서비스를 조합하는 적은 노력만을 투자하고, 웹 사이트의 그래픽 인터페이스에 대해서 좀 더 많은 투자를 하여 사용자에게 좀 더 양질의 웹사이트를 제공할 수 있습니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네이티브 HTTP 지원 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL Server 2005에서는 네이티브 HTTP 기능을 지원하기 때문에, 웹서비스를 사용하여 프로그래밍 기반으로 인터넷이나 내부 방화벽을 통과하여 데이터베이스에 작업을 수행할 수 있습니다. 네이티브 HTTP 지원기능을 통해, 개발자는 인터넷을 통한 데이터 처리 작업을 개발하기 위한 노력을 절감할 수 있습니다. ■ 데이터베이스 개체 노출 특정 데이터베이스 개체를 선택하여 웹서비스로 노출시킬 수 있습니다. 클라이언트 어플리케이션에서는 웹서비스로 노출된 개체에 대해서만 접근이 가능합니다. 다음과 같은 개체를 웹서비스를 노출시킬 수 있습니다. ㆍ 저장 프로시저. 사용자 저장 프로시저(.NET CLR 기반으로 작성한 저장 프로시저 포함)나 확장 저장 프로시저를 웹 서비스로 노출시킬 수 있습니다. 저장 프로시저는 매개변수를 전달받아 결과 값을 반환할 수도 있고, 결과정보의 반환없이 특정한 기능을 수행하도록 처리할 수도 있습니다. ㆍ 사용자정의함수. 스칼라 값을 반환하는 사용자정의함수를 웹서비스로 노출시킬 수 있으며, 사용 자정의함수에서는 매개변수를 전달받을 수 있습니다. ㆍ T-SQL 배치문장. 임의 T-SQL 배치문장을 웹서비스의 특정 메서드로 노출시킬 수 있습니다. SQL Server 에서는 클라이언트 어플리케이션에 해당 임의 쿼리 문장을 실행할 사용권한만 부여 하게 됩니다. 또한, HTTP 엔드포인트는 Service Broker 서비스에 대한 원적 접근을 위해서도 사용됩니다. ■ 보안 SQL Server 에서는 웹 서비스로 노출된 저장 프로시저, 사용자정의 함수, T-SQL 배치 문장을 실행하기 전에, 해당 클라이언트 어플리케이션에 대한 인증 신임장을 체크하여 보안 사용권한이 부여되었는지를 체크합니다. SQL Server 내에서 웹 서비스 보안에 대한 관리를 수행할 수 있습니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네이티브 HTTP를 사용하는 이유 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
■ 이기종 데이터 액세스 비즈니스 환경에서는 동일한 데이터에 서로 다른 다수의 클라이언트 어플리케이션이 접근 상황이 자주 발생합니다. 각 어플리케이션은 Windows Form 기반, Web 기반, 배치 처리를 위한 콘솔 기반 등 여러 가지 형태로 개발됩니다. 또한 각 어플리케이션의 개발 언어도 서로 다를 수 있으며, 데이터에 접근하기 위한 매커니즘도, OLE DB, ODBC, 사용자정의 데이터접근 매커니즘 등 다양할 수 있습니다. 이러한 상황에서 데이터에 접근하기 위한 방법으로 웹 서비스를 사용할 수 잇습니다. 웹 서비스는 프로그래밍 언어나 운영체제 시스템과 독립적이기 때문에, XML 및 HTTP 네트워크 연결을 지원하기만 하면, 어떤 클라이언트 어플리케이션에서도 작업을 수행할 수 있습니다. 모바일 장비부터, 메인 프레임까지, Java, Visual Basic.NET, 또는 다른 프로그래밍 언어로 개발된 모든 어플리케이션에 웹서비스가 사용될 수 있습니다. ■ 방화벽 포트 오픈 최소화 웹 어플리케이션에서 SQL Server 로 접근해야 하는 경우, 일반적으로, 관리자가 웹서버에서 데이터베이스로 접근할 수 있도록 하기 위해 내부 방화벽에 추가 포트를 오픈하게 됩니다. 웹 서비스를 사용하여 데이터베이스 접근하면, 표준 HTTP 통신을 허용하기 위한 내부 방화벽에 대한 포트만 오픈하면 됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네이티브 HTTP 기술구조 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL Server 2005에서 지원하는 네이티브 HTTP 기능을 사용하기 위해서는 먼저 기초적인 기술구조에 대해서 이해해야 합니다. 기술구조를 이해함으으로써, 설치에 대한 요구조건을 확인할 수 있고, 클라이언트와 통신하기 위한 다양한 개체의 역할에 대해서도 이해할 수 있습니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네이티브 HTTP 지원 구성 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
네이티브 HTTP 지원 기능을 구성하기 위해서, 반드시 생성해야 하는 SQL Server 개체가 추가되었습니다. 운영 환경에서는 HTTP 엔드포인트를 생성하고, 반드시 보안을 보장할 수 있도록 관리해야 합니다. 또한 URL 네임스페이스를 예약해야 합니다. ■ HTTP 엔드포인트 생성 웹 서비스로 SQL Server 2005 에 접근하기 위해서는, 웹 서비스 정보를 지정하기 위한 서비스 정보를 지정하기 위한 HTTP 엔드포인트를 생성해야 합니다. HTTP 엔드포인트를 생성하기 위해서는, 다음과 같은 단계에 따라, CREATE ENDPOINT 명령을 수행하면 됩니다. 1. 전송 프로토콜 정보 지정 CREATE ENDPOINT의 처음 부분에서 전송 프로토콜 정보를 지정합니다. 전송 프로토콜 정보에는 수신 포트, 인증 방법 등에 대한 정보가 포함됩니다. 다음의 표는 CREATE ENDPOINT 명령에서 지정할 수 있는 전송 프로토콜 관련 매개변수의 목록입니다.
2. 접근가능한 웹 메서드 목록을 포함한 엔드포인트 정보 지정 CREATE ENDPOINT 명령의 두번째 부분은 엔드포인트 페이로드 정보를 지정하는 부분입니다. 설정하는 정보는 설정된 엔드포인트가 SOAP 기반 웹서비스이냐 Service Broker 기반 네트워크 통신이냐에 따라 다양하게 설정됩니다. 다음은 SOAP 기반 웹서비스 페이로드 정보를 설정하기 위한 매개변수 목록입니다.
다음 표는 Service Broker 네트워크 통신 페이로드를 지정하기 위한 매개변수 목록입니다.
■ 전송 프로토콜 정보 지정 전송 프로토콜 정보를 지정하기 위해서는 다음과 같은 구문을 사용합니다. ■ 엔드포인트 페이로드 정보 앞의 전송프로토콜정보 지정 구문 다음에, 다음과 같은 구문을 사용하여, SOAP 기반 웹 서비스 유형의 엔드포인트 페이로드 정보를 지정할 수 있습니다.
다음은 Service Broker 엔드포인트를 위한 정보를 지정하기 위한 구문입니다. 다음은 통합인증 모드를 사용하여 두 개의 웹 메서드를 포함하고 있는 엔드포인트를 생성하는 방법을 나타냅니다.[따라하기] 엔드포인트 생성
[참고] ■ HTTP 엔드포인트 보안설정 웹 서비스는 항상 적절한 권한이 부여된 사용자만 사용하도록 보안이 유지되어야 합니다. HTTP 엔드포인트에 보안을 설정하기 위해서는, 다음과 같은 작업을 수행합니다. 1. 데이터베이스에 접근할 수 있는 사용자 계정이나 역할 생성 다음 예제는 SQL Server 에 Windows 사용자 로그인 계정을 추가하고, 기본 데이터베이스를 지정하고, 기본 데이터베이스에 새로 추가한 로그인 사용자에 대한 데이터베이스 사용자를 추가하는 방법을 나타냅니다. [따라하기] 로그인 및 사용자 생성 USE master 2. 웹 서비스로 사용할 저장 프로시저나 사용자 정의 함수에 접근할 수 있도록 적절한 사용 권한을 부여합니다. 다음 예제는 GetContact 저장 프로시저를 실행할 수 있는 사용권한을 부여하는 방법을 나타냅니다. [따라하기] 사용권한 부여 USE AdventureWorks 3. HTTP 엔드포인트에 연결할 수 있는 권한을 사용자와 역할에 부여합니다. HTTP 엔드포인트에 연결할 수 있는 사용권한을 사용자에게 부여해야 합니다. Master 데이터베이스에서 GRANT CONNECT ON ENDPOINT 명령을 사용하여, 사용자에게 웹 서비스에 연결할 수 있는 권한을 부여할 수 있습니다. 다음 예제는 HTTP 엔드포인트에 연결하기 위한 사용자 사용권한을 설정하는 방법을 나타냅니다. [따라하기] 엔드 포인트 연결 권한 부여 USE master ■ URL 네임스페이스 예약 SOAP 메시지를 수신하기 위해서는 Windows HTTP API(HTTP.sys)에 네임스페이스를 예약 해야 합니다. 네임스페이스는 암시적으로 예약하는 방법과 명시적으로 예약하는 방법이 있습니다. 암시적인 예약 HTTP 엔드포인트가 생성될 때, SQL Server 가 운영중이라면, SQL Server 에서는 자동적으로 네임스페이스를 예약합니다. SQL Server 가 운영중이 아닌 상태에서는, 다른 어플리케이션에서 해당 네임스페이스를 가져갈 수 있습니다. HTTP.sys내에 네임스페이스를 예약하려고 시도하는 경우, 로컬 Windows 관리자 권한을 가지고 있어야 합니다. 암시적 네임스페이스 예약을 사용하는 경우, CREATE ENDPOINT 권한을 가진 사용자는 반드시 로컬 Windows 관리자 권한을 가지고 있어야 합니다. 다음의 T-SQL 문장의 일부는 HTTP 엔드포인트를 생성하고, 임시 네임스페이스를 예약하는 역할을 합니다. SQL Server 가 운영중인 상태라면, http://MyServer:80/sql/AdventureWorks 엔드포인트에 대한 모든 HTTP 요청을, HTTP API가 SQL Server로 전달하게 됩니다. [따라하기] 암시적 네임스페이스 예약
명시적인 예약 sp_reserve_http_namespace 저장 프로시저를 사용하여, HTTP.sys 안에 명시적으로 네임스페이스를 예약할 수 있습니다. 명시적으로 네임스페이스를 예약하면, 다른 어플리케이션에서 해당 네임스페이스를 다시 사용할 수 없습니다. 암시적 네임스페이스 예약인 경우, Windows 관리자 권한을 가지고 있어야 합니다. 하지만, 명시적으로 네임스페이스 예약을 설정하는 경우에는, CREATE ENDPOINT 명령을 실행하는 사용자에게 로컬 Windows 관리자 권한을 부여할 필요가 없습니다. 다음 예제는 명시적인 방법으로 네임스페이스를 예약하는 방법을 나타냅니다. HTTP API는 http://MyServer:80/sql 엔드포인트에 대한 HTTP 요청을 SQL Server 로 전달합니다. [따라하기] 명시적 네임스페이스 예약 sp_reserve_http_namespace N’http://MyServer:80/sql’ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.NET 기반 HTTP 엔드포인트 클라이언트 개발 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
가장 강력하면서도 간단하게 구현할 수 있는 SQL Server HTTP 엔드포인트 활용 방법은 웹서비스를 호출하는 .NET 클라이언트 어플리케이션을 사용하는 것입니다. .NET 클라이언트 어플리케이션을 개발하기 위해서는, 몇 가지 단계의 작업을 수행해야 하며, 일부 작은 양의 코드를 작성해야 합니다. HTTP 엔드포인트 .NET 어플리케이션을 개발하기 위해서는 다음의 단계를 수행합니다. [따라하기] HTTP 엔드포인트 개발 1. Visual Studio .NET 프로젝트를 생성합니다. ■ proxy 클래스 생성 프로젝트를 생성한 다음, 프로젝트 메뉴의 웹 참조 추가 옵션을 사용하여, proxy 클래스를 생성할 수 있습니다. 웹 참조 추가 대화상자에서 proxy 클래스를 생성하기 위해서는 WSDL 문서에 대한 URL을 지정해야 합니다. 다음 예제는 WSDL URL을 나타냅니다. http://localhost/sql/AdventureWorks?WSDL ■ proxy 인스턴스 생성 다음 예제와 같이, 변수를 선언하고, NEW 키워드를 사용하여, 메모리에 proxy 클래스에 대한 인스턴스를 생성할 수 있습니다. [따라하기] Proxy 생성 ‘Visual Basic Dim proxy As New AdventureWorks.sql_AdventureWorks //Visual C# AdventureWorks.sql_AdventureWorks proxy = new AdventureWorks.sql_AdventureWorks( ); 앞의 예제는 Visual Basic .NET과, Visual C# .NET을 사용하여 proxy 인스턴스를 생성하는 방법을 나타냅니다. Proxy 클래스는 HTTP 엔드포인트의 명칭은 sql_AdventureWorks으로 호출됩니다. Proxy 클래스에 대한 네임스페이스는 localhost에서 AdventureWorks로 변경됩니다. ■ proxy 인스턴스 생성 다음 예제는 Windows 어플리케이션에 로그온한 사용자의 보안 신임장을 사용하는 방법을 나타냅니다. [따라하기] 보안인증신임장 설정 ‘Visual Basic proxy.Credentials = _ System.Net.CredentialCache.DefaultCredentials //Visual C# proxy.Credentials = System.Net.CredentialCache.DefaultCredentials; 다음 예제와 같이, 로그온명, 비밀번호, 도메인을 지정하여, 특정 Windows 사용자 계정에 대한 보안신임장을 변경할 수 있습니다. [따라하기] 보안신임장 변경 ‘Visual Basic proxy.Credentials = _ New System.Net.NetworkCredentia“l( Peter”, _ ”P@ssw0rd”,“ Adventure-Works”) //Visual C# proxy.Credentials = new System.Net.NetworkCredentia“l( Peter”, ”P@ssw0rd”,“ Adventure-Works”); [참고] ■ 웹 메서드 호출 다음 예제는 GetProducts 웹 메서드를 호출하는 방법을 나타냅니다. [따라하기] GetProducts 메서드 호출 ‘Visual Basic 다음 예제는 결과값을 처리하기 위한 간단한 접근방법을 나타냅니다. [따라하기] 응답처리 ‘Visual Basic If results(0).ToString( ) =“ System.Data.DataSet”Then Dim ds As DataSet = results(0) ’processing of DataSet End If If results(1) =“ Client.AdventureWorks.SqlRowCount”Then Dim rowcount As AdventureWorks.SqlRowCount = results(1) ’processing of rowcount End If //Visual C# if (results[0].ToString( ) ==“ System.Data.DataSet”) { DataSet ds = (DataSet) results[0]; //processing of DataSet } if (results[1].ToString( ) ==“ TestHarnessCS.AdventureWorks.SqlRowCount”) { AdventureWorks.SqlRowCount rowcount = (AdventureWorks.SqlRowCount) results[1]; //processing of rowcount } HTTP 엔드포인트에 FORMAT 인수를 ROWSETS_ONLY로 지정하면, 웹서비스에 대한 응답에 결과값에 해당하는 System.Data. DataSet 개체만 포함됩니다. 다음 예제는 ROWSET_ONLY로 지정한 웹 메서드에 대한 응답을 처리하는 방법을 나타냅니다. [따라하기] ROWSET_ONLY 웹 메서드 응답처리 ‘Visual Basic Dim ds As DataSet = proxy.GetProductsDS //Visual C# DataSet ds = proxy.GetProductsDS; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||