Freigeben über


SQL Azure를 SharePoint 2010 및 Windows Azure와 통합

SQL Azure를 SharePoint 2010 및 Windows Azure와 통합

이 게시물은 CASI(클레임, Azure 및 SharePoint 통합) 키트에 대해 제가 작성한 5부작 연재물과 함께 사용할 경우 가장 유용합니다.

·         1부: 전체 프레임워크와 솔루션에 대해 간략히 살펴보고 시리즈에서 다룰 내용에 대해 설명합니다.

·         2부: CASI 키트의 지침 부분에 대해 다룹니다. 이 게시물은 WCF를 모든 데이터(예: 데이터 집합, XML, 사용자 지정 클래스 또는 단순한 HTML)에 대한 프런트 엔드로 만드는 것으로 시작합니다. 1단계에서는 표준 WCF 서비스를 사용하여 클레임을 인식하도록 설정합니다. 이를 통해 SharePoint에서 사용자 토큰을 가져와 응용 프로그램 또는 데이터 센터 경계를 통해 사용자 지정 WCF로 보낼 수 있게 됩니다. 2단계에서는 조직 내의 이러한 일반적인 WCF 응용 프로그램을 Windows Azure에서 호스팅되도록 하는 데 필요한 모든 작업의 목록을 살펴봅니다. 이 단계를 마치면 통합 인증을 통해 다중 응용 프로그램의 다중 데이터 센터를 지원하는 백 엔드가 마련됩니다.

·         3부: 클라우드와 SharePoint 팜에서 클레임 인식 WCF 응용 프로그램을 연결하기 위한 글루 코드를 제공하는 사용자 지정 도구 키트 어셈블리에 대해 설명합니다. 아울러 어셈블리를 사용하는 방법을 검토하고, 만들어야 하는 매우 간단한 사용자 지정 컨트롤(다섯 줄 정도의 코드)에 대해 설명하며, 웹 파트에서 데이터를 검색 및 렌더링하기 위한 수단으로 이 컨트롤을 _layouts 디렉터리의 페이지에서 호스팅하는 방법을 살펴보겠습니다. 예제 사용자 지정 컨트롤과 _layouts 페이지의 전체 원본 코드도 게시할 예정입니다.

·         4부: CASI 키트와 함께 포함하는 웹 파트에 대해 설명합니다. 이 웹 파트는 클라우드 호스팅 서비스에서 데이터를 검색하여 웹 파트에 표시하기 위해 클라이언트 측 비동기 쿼리에 연결할 수 있도록 하는 즉시 사용 가능한 코드 없는 솔루션을 제공합니다. 또한 이 웹 파트에는 후크가 기본 제공되므로 웹 파트를 매우 높은 수준으로 사용자 지정하고 고유한 JavaScript 함수를 사용하여 데이터를 렌더링할 수 있습니다.

·         5부: 몇 가지 예제 응용 프로그램을 간단히 연습해 보면서 다른 일반적인 시나리오에서 만든 사용자 지정 컨트롤(3부에서 설명)을 사용하는 일부 시나리오를 보여 줍니다. 어떤 시나리오에서는 컨트롤을 사용하여 몇 가지 유형의 사용자 또는 구성 데이터를 검색하고 이를 ASP.NET 캐시에 저장한 다음 사용자 지정 웹 파트에서 사용합니다. 또 어떤 시나리오에서는 사용자 지정 컨트롤을 사용하여 Azure에서 데이터를 검색하고 이를 사용자 지정 작업(이 경우 사용자 지정 SharePoint 타이머 작업)으로 사용하게 됩니다. 아울러 이러한 예제 응용 프로그램에 대한 전체 원본 코드도 게시할 예정입니다.

CASI 키트와 더불어 현재 사용자에 대한 토큰도 함께 보내면서 SharePoint 2010에서 Windows Azure로 매우 쉽고 빠르게 연결하는 데 도움이 되는 몇 가지 안내 및 도구를 제공해 드렸습니다. 따라서 매우 세분화된 보안 결정을 내리실 수 있습니다. CASI 키트에서 사용한 원래 WCF 응용 프로그램은 자체적으로 노출하는 하드 코딩된 데이터 모음만 사용했습니다. 후속 빌드(CASI 키트 게시물에는 실제로 언급되어 있지 않음)에서 저는 Windows Azure 테이블 저장소를 사용하여 데이터를 저장하고 검색하도록 이 응용 프로그램의 데이터 부분을 업그레이드했습니다. 지금은 SQL Azure에서 데이터를 작성하고 Windows Azure에 있는 WCF 응용 프로그램이 그곳에서 데이터를 검색하도록 함으로써 더 많이 향상시켰습니다. 이제 말 그대로 진정한 다중 클라우드 응용 프로그램 집합이 된 것입니다. Windows Azure, SQL Azure 및 (표면상) SharePoint Online이 갖추어졌습니다. 이 게시물의 요점은 단지 개발 프로젝트에 보다 빨리 통합할 수 있도록 SQL Azure를 사용할 때의 몇 가지 팁을 공유하는 것입니다.

통합 팁

1. SQL Server Management Studio 도구를 사용하여 SQL Azure 데이터베이스를 열려면 반드시 SQL 2008 R2로 업그레이드해야 합니다. 기술적으로 SQL Server 2008에서 작업하는 것이 불가능한 것은 아니지만 그러기 위해서는 여러 가지 비효율적인 단계를 거쳐야 합니다. 2008 R2는 기본적으로 모든 조건을 갖추고 있기 때문에 최상의 작업 환경을 제공합니다. 2008 해결 방법을 통해 작업하려면 https://social.technet.microsoft.com/wiki/contents/articles/developing-and-deploying-with-sql-azure.aspx(영문일 수 있음) 링크를 살펴보십시오. 사실 이 문서에는 유용한 팁이 몇 개 있으므로 어쨌든 한 번 읽어볼 만합니다.

2. T-SQL을 사용하여 모든 작업을 수행하도록 계획합니다. 그래픽 도구는 SQL Azure 데이터베이스, 테이블, 저장 프로시저 등을 작업할 때 사용할 수 없습니다. 또한 저처럼 T-SQL을 다루는 실력이 뛰어나지 않은 사람들의 경우에는 먼저 로컬 SQL Server 데이터베이스를 만드는 것이 유용합니다. SQL 관리 도구에서 두 개의 연결을 만듭니다. 하나는 로컬 SQL 인스턴스에 대한 것이고, 다른 하나는 SQL Azure 인스턴스에 대한 것입니다. 그래픽 도구를 사용할 수 있도록 로컬 SQL 인스턴스에서 테이블, 저장 프로시저 등을 만듭니다. 그런 다음 [아무런 SQL 개체나] As…CREATE to…New Sql Query Window 스크립트를 사용합니다. 그러면 개체를 만들기 위한 SQL 스크립트가 생성되고, 이 SQL 스크립트를 SQL Azure 데이터베이스에 열어 놓은 쿼리 창에 붙여 넣을 수 있습니다.

3. 중요한 내용이므로 잘 기억해야 합니다. 기본 제한 시간이 짧아서 SQL Azure에 연결할 수 없는 경우가 흔히 있습니다. 연결 문자열에서 .NET SqlClient 클래스를 사용하면 이 설정을 변경할 수 있습니다. 즉, "Connection Timeout=30;"을 추가하면 됩니다. SQL Server Management Studio를 사용하고 있으면 서버 이름 및 자격 증명을 입력하는 대화 상자에서 고급 단추를 클릭하고 제한 시간을 최소한 30으로 변경하십시오. 기본값인 15초는 실패하는 경우가 종종 있지만 30초는 거의 대부분의 경우 아무런 문제가 없습니다. 아쉽게도 외부 콘텐츠 형식(즉, BDC 응용 프로그램 정의)이 SQL Azure 데이터 원본에 연결할 때의 제한 시간을 변경할 수 있는 방법은 없습니다.

4. 데이터베이스 관리자 계정(즉, 데이터베이스 자체를 만드는 데 사용한 계정)을 사용하여 데이터베이스에 연결해서는 안 됩니다. 데이터를 작업하기 위한 별도의 계정을 만드십시오. 아쉽게도 SQL Azure는 SQL 계정만 지원하기 때문에 요청하는 사용자의 ID를 바로 사용하여 데이터 액세스에 대한 결정을 내릴 수는 없습니다. SQL Azure에서 데이터를 프런트 엔딩하는 WCF 응용 프로그램을 사용하고 Windows Azure에서 클레임 인증을 사용하여 이 문제를 해결할 수 있으며 이것이 바로 CASI 키트가 사용하는 모델입니다. 또한 특정 데이터베이스의 데이터에 연결하는 데 사용할 수 있는 로그인을 만들기 위한 몇 가지 단계가 필요합니다. 예는 다음과 같습니다.

--먼저 데이터베이스를 만듭니다.

CREATE DATABASE Customers

--이제 로그인을 만든 후에 로그인으로부터 데이터베이스에 있는 사용자를 만듭니다.

CREATE LOGIN CustomerReader WITH PASSWORD = 'FooBarFoo'

CREATE USER CustomerReader FROM LOGIN CustomerReader

--이제 사용자에게 권한을 부여합니다.

GRANT INSERT, UPDATE, SELECT ON dbo.StoreInformation TO CustomerReader

--저장 프로시저에 EXECUTE 권한을 부여합니다.

GRANT EXECUTE ON myStoredProc TO CustomerReader

SQL Azure에서 계정에 대한 서버 수준 권한을 설정하는 등의 더 많은 세부 정보와 예를 보려면 https://msdn.microsoft.com/ko-kr/library/ee336235.aspx(영문일 수 있음)를 참조하십시오.

5. 다른 클라이언트와의 통신을 허용하려면 SQL Azure에서 보유 중인 각 데이터베이스에 대해 방화벽 규칙을 만들어야 합니다. 다른 Azure 서비스로부터의 통신을 허용하려면 MicrosoftServices 방화벽 규칙을 만들어야 합니다(데이터베이스를 처음 만들 때 SQL Azure에서 이를 제안함). 이 규칙의 시작 범위는 0.0.0.0에서 0.0.0.0까지입니다. 이 규칙을 만들지 않으면 어떤 Windows Azure 응용 프로그램도 SQL Azure 데이터베이스에서 데이터를 읽거나, 추가하거나, 편집할 수 없습니다. 사용 중인 서버와의 통신이 인터넷으로 라우팅될 수 있도록 하기 위해서도 방화벽 규칙을 만들어야 합니다. 예를 들어 케이블 또는 DSL 라우터나 RRAS 서버가 있는 경우 RRAS와 같은 것에 대해 외부 주소 또는 NAT 주소를 사용할 수도 있습니다. 

 

이 내용은 데이터를 가동하고 실행하는 데 좋은 팁이 될 것입니다.

 

데이터 액세스

사용자 지정 코드(Windows Azure WCF, 웹 파트 등)에서 데이터 자체에 액세스하는 것은 다행히도 회사 내 SQL Server에서 데이터를 검색할 때와 거의 똑같습니다. 다음은 간단한 코드 예제입니다. 이 코드의 몇몇 부분을 좀 더 자세히 살펴보겠습니다.

//set a longer timeout because 15 seconds is often not

//enough; SQL Azure docs recommend 30

private string conStr = "server=tcp:foodaddy.database.windows.net;Database=Customers;" +

"user ID=CustomerReader;Password=FooBarFoo;Trusted_Connection=False;Encrypt=True;" +

"Connection Timeout=30";

private string queryString = "select * from StoreInformation";

private DataSet ds = new DataSet();

using (SqlConnection cn = new SqlConnection(conStr))

{

SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = new SqlCommand(queryString, cn);

da.Fill(ds);

//do something with the data

}

실제로 연결 문자열을 제외하고 여기서는 많은 설명이 필요한 부분이 없습니다. 회사 내 SQL Server에 대한 일반적인 연결과 다를 수 있다는 점에서 주목할 만한 주요 사항은 다음과 같습니다.

· server: SQL Azure 데이터베이스 이름 앞에 “tcp:”를 붙입니다.

· Trusted_Connection: 통합 보안을 사용하고 있지 않으므로 false여야 합니다.

· Encrypt: 클라우드에서 호스팅하는 데이터베이스와의 연결에 대해서는 true여야 합니다.

· Connection Timeout: 위에서 설명한 대로 기본 제한 시간은 15초이며 충분하지 않은 경우가 종종 있습니다. 그래서 여기서는 대신 30초로 설정합니다.

여기서 간략하게 언급하고 싶었던 또 다른 시나리오는 데이터 마이그레이션을 사용하는 것입니다. SQL Server와 함께 제공되는 BCP 도구를 사용하여 회사 내 SQL Server에서 SQL Azure로 데이터를 이동할 수 있습니다. 데이터를 마이그레이션하는 기본 루틴은 다음과 같습니다.

1. 형식 파일을 만듭니다. 이 파일은 로컬 데이터를 내보낼 때와 클라우드로 가져올 때 모두 사용됩니다. 이 예에서는 Test 데이터베이스의 Region 테이블에 대한 형식 파일을 만들어서 region.fmt 파일에 저장하고 있습니다.

bcp Test.dbo.Region format nul -T -n -f region.fmt

2. 로컬 SQL에서 데이터를 내보냅니다. 이 예에서는 Test 데이터베이스의 Region 테이블에서 RegionData.dat라는 파일로 내보내고 있습니다. 1단계에서 만든 region.fmt 형식 파일을 사용하고 있습니다.

bcp Test.dbo.Region OUT RegionData.dat -T -f region.fmt

3. 데이터를 SQL Azure로 가져옵니다. 여기에서 주목해야 할 중요한 점은 데이터를 클라우드로 가져올 때 반드시 “@serverName”을 사용자 이름 매개 변수와 함께 포함해야 한다는 것입니다. 이것이 없으면 가져오기가 실패합니다. 이 예에서는 SQL Azure에서 Customers 데이터베이스의 Region 테이블로 데이터를 가져오고 있습니다. 내 로컬 데이터 정보를 내보낸 RegionData.dat 파일에서 가져오고 있습니다. 저의 서버 이름(-S 매개 변수)은 SQL Azure 데이터베이스의 이름입니다. 사용자 이름(-U 매개 변수)에는 위에서 설명한 대로 username@servername 형식을 사용하고 있습니다. 1단계에서 만든 region.fmt 형식 파일을 사용하도록 지정하고 있으며, 일괄 처리 크기(-b 매개 변수)를 한 번에 1,000개의 레코드로 설정했습니다.

bcp Customers.dbo.Region IN RegionData.dat -S foodaddy.database.windows.net -U speschka@foodaddy.database.windows.net -P FooBarFoo -f region.fmt -b 1000

 

이 게시물의 내용은 이것이 전부입니다. SQL Azure 데이터베이스를 만들고 SharePoint 사이트에서 이 데이터베이스에 연결하여 사용하는 기본적인 메커니즘을 이해하는 데 도움이 되었으면 좋겠습니다. 곁들여 말씀 드리자면 저는 CASI 키트를 사용하여 이 데이터를 Windows Azure WCF 프런트 엔드를 통해 SQL Azure로 가져왔고 SharePoint 사이트에서 렌더링했습니다. CASI 키트를 만들 때는 제가 직접 작성한 CASI 키트 블로그의 내용을 따라서 만들었습니다. 그 이유는 블로그에 게시된 내용이 맞는지를 확인해 보기 위함이었고, 확인해 본 결과 내용에 오류가 없었습니다. 3부에서는 두세 가지 사소한 내용을 수정하고 간단한 문제 해결 섹션을 추가했습니다. 하지만 전체적으로 새로운 사용자 지정 컨트롤을 만드는 데는 30분, 새로운 Visual 웹 파트를 만드는 데는 15분 정도가 걸렸습니다. 저는 CASI 키트 웹 파트를 사용하여 WCF로부터의 SQL Azure 데이터 집합 하나를 표시하고, Visual 웹 파트에서는 프로그래밍 방식으로 사용자 지정 컨트롤의 인스턴스를 만들어서 데이터 집합을 가져온 후에 ASP.NET 그리드에 바인딩했습니다. 마지막으로 이 모든 것을 하나의 예제 페이지에 모았습니다. 이 페이지는 실제로 보기에 괜찮았고, 다양한 방식으로 데이터를 표시할 수 있도록 쉽게 확장할 수 있었습니다. 그 페이지의 모습은 아래와 같습니다.

이 문서는 번역된 블로그 게시물입니다. 원본 문서는 Integrating SQL Azure with SharePoint 2010 and Windows Azure를 참조하십시오.