728x90

Microsoft SQL Server 2005의 원시 XML 웹 서비스 개요


Brad Sarsfield, Srik Raghavan _ Microsoft Corporation


적용 대상:
Microsoft SQL Server 2005 (이전에는 "Yukon"으로 알려짐)
Transact-SQL(T-SQL) 언어

요약: SQL Server 2005(이전에는 "Yukon"으로 알려짐) 내의 SOAP/HTTP를 사용하여 XML 웹 서비스를 설정하고 사용하는 방법의 개요를 설명합니다. 여기에는 실례가 되는 예제가 포함되어 있습니다. 이 문서를 최대한 활용하려면 HTTP, SOAP 및 WSDL을 포함한 웹 서비스 기술에 대한 기본적인 이해가 필요합니다.


소개


Microsoft SQL Server 2005는 HTTP를 통해 SOAP를 사용하는 데이터베이스 엔진에 액세스하기 위한 표준 메커니즘을 제공합니다. 이 메커니즘을 이용하면 SOAP/HTTP 요청을 SQL Server에 전송하여 다음을 실행할 수 있습니다.

  • 매개 변수가 있거나 없는 Transact-SQL 일괄 명령문
  • 저장 프로시저, 확장 저장 프로시저, 스칼라 반환 사용자 정의 함수

    SQL Server 20005 이전에는 SQL Server 연결에 사용할 수 있는 메커니즘은 테이블 형식 데이터 스트림(TDS)이라는 사용자 지정 바이너리 프로토콜을 통하는 방법뿐이었습니다. Microsoft는 SOAP/HTTP 액세스를 이용하여, SQL Server에 연결하기 위한 대안으로 사용할 수 있는 문서화된 개방형 프로토콜을 제공했습니다. SOAP/HTTP 액세스를 제공하면, SQL Server에 연결을 시도하는 클라이언트 장치에 Microsoft Data Access Components(MDAC) 스택을 더 이상 설치할 필요가 없기 때문에, 별도의 공간을 필요로 하지 않는 “제로 풋프린트” 클라이언트를 포함하여 보다 광범위한 클라이언트가 SQL Server에 액세스할 수 있습니다. 이로 인해 다양한 플랫폼에서 .NET, SOAP Toolkit, Perl 등과의 상호 운용성이 용이해집니다. SOAP/HTTP 액세스 메커니즘은 XML 및 HTTP와 같이 잘 알려진 기술을 기반으로 하므로 이 메커니즘은 유형이 다른 환경에서 SQL Server에 대한 액세스 및 상호 운용성을 본질적으로 촉진합니다. XML을 구문 분석하고 HTTP 요청을 제출할 수 있는 모든 장치가 이제 SQL Server에 액세스할 수 있습니다.

    많은 기업들이 UNIX 및 Linux 플랫폼에서 실행되는 응용 프로그램에 SQL Server에 대한 연결이 필요할 수 있는 유형이 다른 환경을 가지고 있습니다. 지금까지는 이러한 사용자들이 사용할 수 있는 솔루션은 JDBC 또는 ODBC 드라이버 중 하나를 사용하는 것이었습니다. SOAP/HTTP 액세스는 이제 비용이 낮은 또 하나의 대안을 제공합니다. SOAP/HTTP 액세스는 DBA가 UNIX에서 실행되고 SQL Server 리소스를 관리하는 Perl로 작성된 스크립트를 가지고 있는 경우의 시나리오에 아주 유용합니다. 또한 Microsoft Visual Studio .NET 또는 Jbuilder와 같은 기본 제공 SOAP/HTTP 지원이 포함된 스마트 통합 개발 환경(IDE)을 사용하여 SQL Server에 연결하는 클라이언트 응용 프로그램 개발에도 유용합니다. 이러한 IDE는 SQL Server와의 통신을 추상화하고 클라이언트 응용 프로그램이 사용할 수 있는 개체를 제공하는 프록시 코드를 생성합니다. 또한 SOAP/HTTP를 사용하면 언제 어디서나 SQL Server에 대한 액세스가 가능하므로, 모바일 또는 산발적으로 연결된 장치를 위한 응용 프로그램의 개발이 쉬워집니다. 일단 연결이 되고 서버가 요청 처리를 시작하면 sqlclient, ODBC, OLEDB와 같은 TDS 기반 클라이언트가 사용하는 기존 메커니즘을 사용하여 연결이 모니터링될 수 있습니다.

    요구 사항


    SQL Server 2005의 기본 웹 서비스는 운영 체제로서 Microsoft Windows Server 2003이 필요한데, 그 이유는 웹 서비스가 이 버전이 제공하는 커널 모드 http 드라이버 http.sys에 의존하기 때문입니다. SQL Server는 커널 모드 http.sys 드라이버를 활용하므로 SQL Server로부터 웹 서비스를 노출하기 위해 IIS를 반드시 설치해야 할 필요가 없어 관리가 간소화됩니다. 대신 IIS 설치 여부의 결정은 응용 프로그램 요구 사항에 입각해야 합니다. 예를 들어 특정 응용 프로그램은 명시적인 중간 계층이 있으면 유리합니다. 이와 같은 경우에는 IIS가 유용할 수 있습니다.


    HTTP 종점


    SQL Server를 HTTP SOAP 요청을 기본적으로 수신할 수 있는 웹 서비스로 설정하려면 HTTP 종점을 만들고 종점이 노출하는 메서드를 정의해야 합니다. HTTP 종점을 만들 때에는 들어오는 HTTP 요청을 수신하기 위해 사용하는 고유 URL을 사용하여 만들어야 합니다. 예를 들어, URL "http://servername/sql"을 사용하여 종점을 만드는 경우 http://servername/sql에 전송되는 SOAP 요청은 http.sys에 의해 포착됩니다. 그런 다음 http.sys가 SOAP 요청을 URL과 연결된 종점을 호스팅하는 SQL Server 인스턴스로 라우팅합니다. 거기에서 요청은 SQL Server 내 SOAP 처리 레이어로 전달됩니다.

    SQL Server 인스턴스에는 여러 개의 종점이 있을 수 있는데, 이 종점은 각각 임의 개수의 저장 프로시저(Transact-SQL 또는 CLR을 사용하여 구현됨)를 WebMethod로 종점에서 노출할 수 있고 SOAP 원격 프로시저 호출(RPC)을 통해 호출될 수 있습니다. WebMethod는 노출되는 실제 저장 프로시저와는 다른 이름을 사용할 수 있습니다. WebMethod 이름은 작업 이름으로 WSDL에서 사용자에게 보여지는 것입니다.

    참고 종점의 WebMethod 절은 SQL Server 2005에만 해당되고 ASMX WebMethod 특성과 무관하다는 사실에 주의해야 합니다.

    사용자는 종점에 대해 ad-hoc Transact-SQL 문을 실행할 수 있습니다. 이 작업은 데이터 정의 언어(DDL)에서 선택적 절을 사용하여 종점에서 Batches를 활성화하여 수행됩니다. Batches를 암시적으로 활성화하면 "sqlbatch"라는 WebMethod가 사용자에게 노출됩니다. 이 개념은 다음에 이어지는 섹션에서 더 자세히 설명됩니다.


    HTTP 종점 만들기


    HTTP 종점은 Transact-SQL DDL을 사용하여 만들어지고 관리됩니다. HTTP 종점을 만드는 작업은 SQL Server 2005에 대한 HTTP/SOAP 액세스 활성화의 첫 번째 단계입니다. 각 종점은 이름 및 결합될 경우 종점의 동작(behavior)을 정의하는 옵션의 모음을 가집니다.

    CREATE HTTP ENDPOINT가 사용되는 방법을 예시하기 위해 SQL Server 웹 서비스를 통해 저장 프로시저를 호출하는 Hello World 예제를 살펴보도록 하겠습니다.

    먼저, 다음 T-SQL을 사용하여 마스터 데이터베이스에 hello world라는 저장 프로시저를 만듭니다. 이 저장 프로시저는 단순히 입력 매개 변수에 제공된 문자열을 표시합니다.


    CREATE PROCEDURE hello_world
    (@msg nvarchar(256))
    AS BEGIN
    select @msg as 'message'
    END


    다음 단계로, 다음 T-SQL을 사용하여 WebMethod로서 이 저장 프로시저에 액세스할 수 있도록 하는 HTTP 종점을 만듭니다.


    CREATE ENDPOINT hello_world_endpoint
    STATE = STARTED
    AS HTTP (
    AUTHENTICATION = ( INTEGRATED ),
    PATH = '/sql/demo',
    PORTS = ( CLEAR )
    )
    FOR SOAP (
    WEBMETHOD
    'http://tempuri.org/'.'hello_world'
    (NAME = 'master.dbo.hello_world'),
    BATCHES = ENABLED,
    WSDL = DEFAULT
    )


    모든 종점은 메타데이터 뷰 master.sys.http_endpoints에서 마스터에 저장됩니다. SOAP 메서드를 정의하지 않는 한 종점은 어떤 SOAP 메서드도 가지지 않습니다. 위 예제에서 저장 프로시저 master.dbo.hello_world를 WebMethod 'hello_world'로 노출했습니다. 이와 같이 WebMethod는 임의의 이름을 가질 수 있습니다. 예를 들면, WebMethod가 'http://tempuri.org' 네임스페이스 아래에서 'testproc1'로 호출될 수도 있었습니다. DEFAULT를 WSDL 절의 값으로 지정하면 기본 형식을 사용하는 WSDL를 생성하여 종점이 WSDL 요청에 응답할 수 있습니다. 위 명령문에서 WSDL=NONE을 설정하여 WSDL 생성을 억제할 수 있습니다. 다음에 이어지는 섹션에서 WSDL 생성에 대해 자세히 설명합니다.


    인증 및 보안

    HTTP 종점은 기본, 다이제스트, 통합(NTLM, Kerberos) 및 SQL Auth라는 표준 인증 메커니즘을 지원합니다. 먼저 HTTP 전송 수준에서 인증합니다. 성공적으로 인증되면, 사용자의 SID를 사용하여 SQL을 인증합니다. 이 과정은 LOGIN_TYPE = MIXED를 지정하여 SQL-AUTH가 종점에서 활성화되는 경우를 제외하고 모든 옵션에 적용됩니다. WsSecurity Username 토큰 헤더를 사용하여SQL Auth 자격 증명이 SOAP 패킷의 일부로 전송됩니다. 또한 관리자는 종점을 기준으로 IP 기반 제한을 설정하여, HTTP 종점으로의 액세스를 특정 IP 또는 IP 범위에 대해서만 허용함으로써 종점에 대한 액세스를 제한할 수 있습니다. 개념적으로 “종점”은 “응용 프로그램”입니다. 단일 응용 프로그램을 구현하는 모든 메서드가 종점에 매핑되므로 응용 프로그램에 대한 액세스를 제어하기 위해 종점에 보안이 적용됩니다. 종점은 설계에 의해 보안됩니다. 종점의 보안을 유지할 수 있도록 도와주는 몇 가지 항목이 아래에 나와 있습니다.

  • 기본적으로 Off로 설정되어 있습니다. 매핑된 기본 종점 또는 웹 메서드가 없으므로 이를 명시적으로 생성 및 지정해야 합니다.
  • 또한 개체에도 보안 검사가 적용되므로, 매핑된 저장 프로시저는 사용자가 종점에 대한 연결 권한 및 저장 프로시저에 대한 실행 권한을 가지고 있는 경우에만 실행 가능합니다.
  • 종점에 연결을 위한 익명 지원을 하지 않습니다. WSDL 요청을 포함한 모든 요청이 인증을 받아야 합니다. 클라이언트가 요청을 제출하기 위해서는 SQL Server 원칙에 비추어 인증을 받아야 합니다.

    종점이 만들어지면 sysadmin 역할의 구성원과 종점의 소유자만 종점에 연결할 수 있습니다. 사용자가 종점에 액세스할 수 있도록 연결 권한을 부여해야 합니다. 이를 수행하려면 다음 명령문을 실행합니다.

    GRANT CONNECT ON HTTP ENDPOINT::hello_world_endpoint TO [DOMAIN\USER]


    Microsoft 이외의 플랫폼에서 클라이언트는 BASIC 또는 SQL Auth 중 하나를 사용하여 SQL Server에 연결할 수 있습니다. 그러나 BASIC 또는 SQL Auth를 사용하려면 채널이 보안되어야 하므로 사용자가 활성화된 SSL이 있는 포트에서만 연결할 수 있습니다.


    WSDL


    WSDL은 웹 서비스를 설명하는 XML로 작성된 문서이며, 서비스가 노출하는 서비스 및 작업(또는 메서드)의 위치를 지정합니다. WSDL은 클라이언트가 웹 서비스와 상호 작용하기 위해 필요한 정보를 제공합니다. Visual Studio .NET 및 Jbuilder와 같은 도구는 WSDL을 사용하여 클라이언트 응용 프로그램이 웹 서비스와 통신하기 위해 사용할 수 있는 프록시 코드를 생성합니다. 종점에 활성화된 WSDL이 있는 경우에는 해당 종점이 WSDL 요청을 받을 때 WSDL을 만듭니다. 이 문서의 앞부분에서 만든 종점은 인증된 요청이 종점에 전송될 때 WSDL을 만듭니다. WSDL 요청은 폼의 간단한 HTTP Get 요청입니다.


    http://servername/sql/demo?wsdl


    서버는 종점에 연결된 메타데이터를 쿼리하고 WSDL을 동적으로 생성합니다. 생성된 WSDL은 저장 프로시저 매개 변수의 풍부한 형식 설명을 제공합니다. 서버는 여러 다른 특성의 WSDL을 생성할 수 있습니다(요청/응답 메시지에서 매개 변수를 설명하기 위해 기본적인 xsd 형식을 사용하는지 또는 복잡한 형식을 사용하는지에 따라 간단한 WSDL 및 복잡한 WSDL로 칭합니다). 기본적으로는 복잡한 형식을 사용합니다.


    SOAP RPC: 메서드 호출


    위에서 만든 종점에서는 이 저장 프로시저 master.dbo.hello_world를 SOAP RPC를 통해 실행할 수 있는 웹 메서드로 노출했습니다. 다음은 HTTP를 사용하는 SOAP를 통해 이 SP를 호출하기 위해 서버에 전송된 soap 메시지의 예제입니다.


    <SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
    <hello_world xmlns="http://tempuri.org/">
    <msg>Hello World!</msg>
    </hello_world>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>


    결과는 다음을 포함하는 SOAP Envelope입니다.


    <SqlRowSet1 xmlns="urn:schemas-microsoft-com:sql:SqlRowSet1">
    <row>
    <message>Hello World!</message>
    </row>
    </SqlRowSet1>


    Batches: AdHoc 쿼리


    T-SQL 명령을 사용하여 종점에서 BATCHES가 ENABLED로 설정된 경우 "sqlbatch"라고 하는 또 다른 SOAP 메서드가 종점에 암시적으로 노출됩니다. sqlbatch 메서드를 이용하면 SOAP을 통해 T-SQL 문을 실행할 수 있습니다. 이 메서드는 두 가지 매개 변수를 취합니다. 첫 번째 매개 변수는 이름이 ""이고 T-SQL 문의 배치입니다. 두 번째 매개 변수는 이름이 ""이고 선택적이며, T-SQL 문이 임의의 매개 변수를 사용한 경우 매개 변수 정보의 배열을 포함합니다. 다음은 이에 대한 예로서, sqlbatch 메서드를 호출하고 매개 변수화된 쿼리를 실행하는 SOAP 요청의 본문입니다.


    <sqlbatch xmlns="http://schemas.microsoft.com/SQLServer/2001/12/SOAP">
    <BatchCommands>
    SELECT EmployeeID, LoginID, Gender
    FROM Employee
    WHERE EmployeeID=@x
    FOR XML AUTO;
    </BatchCommands>
    <Parameters>
    <SqlParameter name="x" sqlDbType="Int" maxLength="20"
    xmlns="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlParameter">
    <Value xsi:type="xsd:string">1</Value>
    </SqlParameter>
    </Parameters>
    </sqlbatch>


    이 SOAP 요청으로부터의 응답은 다음과 같습니다.


    <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml">
    <SqlXml>
    <employees EmployeeID="1" FirstName="Nancy" LastName="Davolio"/>
    </SqlXml>
    </sqlresultstream:SqlXml>


    관리

    지금까지 종점을 만들고 종점에 대한 SOAP 요청을 전송하는 작업이 얼마나 간단한지 알아보았습니다. 이제 단 하나의 구성 요소, 즉 SQL Server만 관리하면 되므로 관리가 단순화됩니다. IIS 구성 요소를 관리할 필요가 없습니다. 종점 추상화는 IP 필터링을 활성화할 수 있는 관리자에게 더 많은 유연성을 제공합니다. 또한 종점 추상화 덕분에 http/https 웹 트래픽에 사용되는 포트를 재사용할 수 있기 때문에 또 다른 포트를 열 필요가 없습니다. 그리고 특정 사용자들에게만 CONNECT 권한을 명시적으로 부여함으로써 특정 개인에만 한하는 액세스를 위한 종점을 공급할 수 있습니다.


    결론

    Microsoft는 기본 SOAP 액세스를 이용하여 SQL Server에 액세스하기 위한 SOAP/HTTP와 같이 잘 알려지고 문서화된 표준에 기반한 프로토콜을 제공했습니다. 이로 인해 보다 광범위한 클라이언트가 SQL Server에 연결할 수 있어 상호 운용성이 촉진되고 액세스 도달이 용이해집니다.

  • + Recent posts