오랫만에 블로그에 포스팅을 해봅니다. Windows Azure Tools 버전 1.2가 얼마전에 영어 버전 이외에 다른 언어 (중국어 간체, 중국어 정체, 프랑스어, 독일어, 이탈리아어, 일본어, 한국어, 러시아어, 스페인어)로도 동시에 출시되었습니다. Windows Azure Tools 1.2의 최신 기능들을 각 지역별 Visual Studio 2010 버전에 맞추어 이상적으로 사용하실 수 있습니다.

Windows Azure Tools 1.2는 이전 글 ([Software Development/Windows Azure] - Windows Azure Tools for Visual Studio / Windows Azure SDK 1.2 출시)에서 언급했던것처럼 Visual Studio의 서버 탐색기, 자체 저장소 브라우저, 2010의 경우 IntelliTrace 기능과의 연동 등 많은 부분에 있어서 획기적인 발전을 거듭하고 있습니다. 여기에 한글화 기능이 더해짐에 따라 앞으로 더욱 이해하기 쉽고 손쉬운 개발이 가능할 것으로 봅니다.

또한, 빠른 시일 내에 Windows Azure Hands on Lab이나 Platform Training Kit 역시 한글화가 이루어질 것으로 보입니다. 한글화 소식이 새로 나올 때 마다 블로그와 Windows Azure Cafe를 통하여 업데이트가 이루어질 예정이니 많은 기대와 관심 부탁드립니다.

다운로드 바로가기

감사합니다. :-)

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

많은 Windows Azure Application 개발자들의 피드백을 수용한 최신 버전의 Windows Azure Tools for Visual Studio와 Windows Azure SDK가 새롭게 출시되었습니다. 이제 비로소 Visual Studio 2010의 모든 기능을 Windows Azure 개발에도 직접 활용할 수 있게 되었습니다.

Windows Azure SDK 1.2에서는 최근 발표된 .NET Framework 4.0 런타임을 내장한 Windows Azure OS 2010년 4월 버전에 대한 요구 사항을 모두 반영하고 있습니다. .NET Framework 4.0 기반의 응용프로그램을 작성 중이신 분들도 이제는 Windows Azure 환경 위에서 직접 응용프로그램을 호스팅할 수 있습니다. 그리고, Visual Studio 2010에서 새로 추가된 향상된 디버깅 기법인 IntelliTrace를 직접 지원하기 때문에 이전보다 더욱 쉬운 디버깅이 가능합니다.

다음은 Windows Azure Tools for Visual Studio 1.2의 변경 사항들입니다.

  • Visual Studio 2010 RTM 지원: Visual Studio 2010 RTM 버전을 지원합니다.
  • .NET Framework 4.0 지원: 이제는 .NET Framework 3.5와 4.0을 빌드 타겟으로 동시에 지정할 수 있습니다. 단, 4.0을 빌드 타겟으로 지정하게 되는 경우, Windows Azure OS의 이미지 중 2010년 초반의 일부 버전은 사용할 수 없습니다.
  • Cloud storage explorer 추가: 읽기 전용 기능이 지원되는 Windows Azure Table 및 BLOB 컨테이너 보기 프로그램이 서버 탐색기 패널을 통하여 제공됩니다. SQL Azure를 데이터베이스 목록에 추가하고 동시에 관리할 수 있어 편리합니다.
  • 통합 배포 환경: 솔루션 탐색기에서 Windows Azure 프로젝트를 오른쪽 버튼으로 클릭하여 'Publish' 메뉴를 클릭하면 이제는 직접 배포가 가능합니다. 이전 1.0 및 1.1 버전의 경우, CSPKG 파일과 CSCFG 파일이 생성된 디렉터리의 폴더가 Windows 탐색기에서 열리고, Windows Azure Portal Web Site가 웹 브라우저로 열렸기 때문에, 브라우저에서 로그인하고 여러 단계에 걸쳐서 배포할 파일을 찾아가야했기 때문에 Deploy 절차가 복잡했습니다.
  • 서비스 모니터링: 서비스의 상태를 웹 제어판이 아닌 "서버 탐색기"의 compute 노드에서 실시간으로 모니터링할 수 있습니다.
  • IntelliTrace 기능 지원: Visual Studio 2010을 사용하는 경우, IntelliTrace 기능을 Windows Azure 서비스에 배포한 이후에 "직접" 사용할 수 있습니다. 이 기능은 앞에서 설명한 통합 배포 환경의 일부로 동작하며, 배포가 끝난 이후에 자동으로 이 기능이 시작되어 서비스 모니터링과 함께 실시간으로 로그가 모니터링됩니다.

그간 Windows Azure 기반의 개발이 어려우셨다면 이제는 최신 버전의 SDK와 개발 도구를 이용하여 좀 더 편안하게 Visual Studio 2010을 통해 클라우드 기반 응용프로그램 개발을 시작해보세요. 참고로 Visual Studio 2010의 데이터베이스 탐색기는 SQL Azure 데이터베이스에 대한 탐색도 지원하므로 이전처럼 별도의 SSMSE를 필요로 하지 않습니다. 그리고 이번 버전의 SDK 역시 1.0과 1.1과 마찬 가지로 처음 설치하는 경우에는 OS와 개발 도구의 환경에 따라 패치와 핫 픽스들을 적용하셔야 합니다.

다운로드 바로가기

 

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Windows Azure 개발 환경 및 기능 살펴보기에 대한 세미나를 준비하는 도중에 테스트를 위하여 설치와 테스트를 병행하던 도중, 문제에 빠질 수 있는 부분들이 몇 가지 있을 것으로 예상되어 개발 환경을 구축하는 방법에 대한 글을 정리하여 올려봅니다.

 

1. 시스템의 최소 요구 사항을 확인합니다.

 

Windows Azure 개발 환경을 구축하기 위해서는 시스템이 Windows Vista Service Pack 1 이상 - 또는 - Windows Server 2008을 실행 중이어야 합니다. Windows XP와 Windows Server 2003에서는 Windows Azure 개발 환경을 구축할 수 없음을 유의합니다. Windows Vista RTM 버전을 사용 중인 경우, 반드시 Service Pack 1을 설치하여야 합니다.

 

2. 인터넷 정보 서비스 (IIS) 및 WCF HTTP 활성화 옵션이 설정되어있는지 확인합니다.

 

Windows Azure 개발 환경을 구축하기 위해서는 시스템에 Internet Information Services (인터넷 정보 서비스)와 함께, WCF HTTP 기반 활성화 옵션이 설정되어있어야 합니다. 이를 확인하시려면 각 운영 체제 별로 다음과 같이 실행합니다.

 

Windows Vista 및 Windows 7의 경우

  • 시작 메뉴 -> 설정 -> 제어판 -> 프로그램 -> 프로그램 및 기능 순으로 선택합니다.
  • Windows 기능 켜고 끄기를 선택합니다.
  • Microsoft .NET Framework 3.0 (Windows 7의 경우 Microsoft .NET Framework 3.5.1)아래의 Windows Communication Foundation HTTP 활성화에 체크합니다.
  • Internet Information Services (또는 인터넷 정보 서비스) 아래의 World Wide Web 서비스 아래의 응용프로그램 개발 기능 아래에서 ASP.NET과 CGI에 체크합니다.
  • 선택한 항목들을 설치합니다.

Windows Server 2008 및 Windows Server 2008 SP1의 경우 (Core 버전은 해당되지 않습니다)

  • 시작 메뉴 -> 프로그램 -> 관리 도구 -> 서버 관리자 순으로 선택합니다.
  • 서버 관리자 화면에서, "기능 요약"의 "추가"를 선택합니다.
  • "추가" 대화 상자에서, Microsoft .NET Framework 3.0 (Windows Server 2008 SP1의 경우 Microsoft .NET Framework 3.5.1) 아래의 WCF 활성화 아래의 HTTP 활성화를 선택한 후, "다음" 버튼을 클릭합니다.
  • "역할 요약" 단계에서, 웹 서버 (IIS) 항목이 목록 중에 포함되어있는지 확인합니다. 만약 없을 경우, "역할 추가" 버튼을 클릭합니다.
  • "역할 추가" 대화 상자에서, "역할 요약" 아래의 "웹 서버 (IIS)"를 선택합니다.
  • 웹 서버 관리 대화 상자에서 "서비스 역할 추가"를 클릭합니다.
  • 나타나는 대화 상자에서 "웹 서버" 아래의 "응용프로그램 개발" 아래의 "ASP.NET"과 "CGI"를 선택하고, 다음 버튼을 클릭하여 선택한 항목들을 설치합니다.

3. Visual Studio를 설치합니다.

 

Visual Studio 2008 Professional 이상의 버전이 필요하며, Visual Studio 2008 Professional을 가지고 있지 않은 경우, http://www.microsoft.com/express/ 에서 Visual Web Developer 2008 SP1을 다운로드하여 설치할 수 있습니다.

 

Visual Studio 2008 Professional이 설치되어있으나 서비스팩을 설치하지 않은 경우, http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx 에서 다운로드하여 설치할 수 있습니다.

 

Visual Studio 2010에서 테스트해보기를 원하는 경우, Visual Studio 2010 Beta 2 - 또는 - http://www.microsoft.com/express/ 에서 Visual Web Developer 2010 Beta 2를 무료로 다운로드하여 설치할 수 있습니다.

 

4단계의 내용과 관련하여, 설치 시 자동으로 선택되는 SQL Server 2005 - 또는 SQL Server 2008 Express Edition은 같이 설치해주실 것을 권장합니다.

 

4. Microsoft SQL Server 2005 - 또는 - Microsoft SQL Server 2008 인스턴스를 확인합니다.

 

Windows Azure의 Storage 기능을 로컬 컴퓨터에서 테스트해보기 위하여, Microsoft SQL Server 2005 버전 이상의 데이터베이스 인스턴스가 필요합니다. 개발 목적으로 사용하기 위하여, 무료로 Express Edition을 다운로드받을 수 있으며, Visual Studio 2008 설치 시 기본 옵션으로 설치하였을 경우 이미 시스템에 하나 이상의 SQL Server Express Edition이 설치되어있을 것입니다.

 

5. Windows Azure SDK 2009년 11월 버전을 설치합니다.

 

로컬 컴퓨터에서 Windows Azure 플랫폼의 환경을 재현하는 도구, Windows Azure 플랫폼에서 사용하는 닷넷 어셈블리의 개발 버전 및 필수 도움말, 기본 문서 자료, 배포용 패키징 도구 일체를 포함하는 Windows Azure SDK를 다운로드하여 설치해야 합니다. http://www.microsoft.com/downloads/info.aspx?na=47&p=2&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=6967ff37-813e-47c7-b987-889124b43abd&u=details.aspx%3ffamilyid%3d772990DA-8926-4DB0-958F-95C1DA572C84%26displaylang%3den 에서 다운로드 가능합니다.

 

NOTE) 이 글을 작성하는 현 시점에서 가장 최신 버전은 2009년 11월 버전이며 새 버전이 출시될 수 있으므로 Windows Azure 홈페이지를 참고하여 주시기 바랍니다.

 

6. Windows Azure Tools 2009년 11월 버전을 설치합니다.

 

Windows Azure SDK와 연계하여, Visual Studio 2008 및 Visual Studio 2010을 위한 개발 도구, 프로젝트 템플릿, 필수 도움말 및 기본 문서 자료 일체를 포함하는 Windows Azure Tools를 다운로드하여 설치해야합니다. http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&displaylang=en 에서 다운로드 가능합니다.

 

7. KB967631 핫픽스 설치 (운영 체제 무관, Visual Studio 2008 SP1 및 Visual Web Developer 2008 SP1 사용 시 설치 필요)

 

운영 체제에 관계없이, Visual Studio 2008 SP1 및 Visual Web Developer 2008 SP1을 사용하여 Windows Azure SDK 및 Windows Azure Tools 2009년 11월 버전을 활용하는 경우, http://go.microsoft.com/fwlink/?LinkId=145526 에서 KB967631 핫 픽스를 설치하여 디버깅에 관련된 문제점을 수정할 수 있습니다.

 

8. KB967131 핫픽스 설치 (개발 도구 무관, Windows 7, Windows Server 2008 SP2 미만인 경우 설치 필요)

 

개발 도구 버전에 관계 없이, Windows Vista 모든 버전, Windows Server 2008 SP1의 경우 http://support.microsoft.com/kb/967131 에서 FastCGI 기반의 개발을 정상적으로 테스트해볼 수 있도록 시스템을 수정할 수 있습니다.

 

9. KB963676 핫픽스 설치 (개발 도구 무관, Windows 7 이외의 모든 운영 체제에서 설치 필요)

 

개발 도구 버전에 관계 없이, Windows 7 이외의 모든 운영 체제에서 https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=16827&wa=wsignin1.0 의 핫픽스를 설치하여 Visual Studio의 안정성 문제를 해결할 수 있습니다.

 

10. KB971842 / KB977420 핫픽스 설치 (개발 도구 무관)

 

개발 도구 버전에 관계없이, Windows Vista 및 Windows Server 2008은 KB971842 핫 픽스를, Windows 7 및 Windows Server 2008 R2는 KB977420 핫 픽스를 설치하여, Windows Azure Web Role 위에서 실행되는 WCF 서비스에 대한 참조를 클라이언트에서 정확하게 받아들일 수 있도록 할 수 있습니다.

 

KB971842 (Windows Vista, Windows Server 2008) 설치: http://code.msdn.microsoft.com/KB971842

KB977420 (Windows 7, Windows Server 2008 R2) 설치: http://code.msdn.microsoft.com/KB977420

 

이 핫 픽스를 설치하고, 설정 파일 (.config)에 useRequestHeaderForMetadataAddress 요소를 추가하여 HTTP 요청 헤더를 기준으로 WCF 참조를 맺고 통신할 수 있도록 설정합니다.

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Windows Azure Platform의 정식 서비스 시작이 이제 얼마 남지 않았습니다. Windows Azure Platform은 시중에 알려진 대로, 올해 2월 1일부터 서비스 요금을 책정하기 시작하여 본격적으로 운영에 들어가게 될 것으로 보입니다.

 

Windows Azure Platform은 일반적으로 우리가 쉽게 신청하여 사용하는 웹 호스팅 서비스와는 달리, 철저히 서비스 기반의 응용프로그램만을 위한 특별한 플랫폼입니다. 그리고, 이에 따라, 서비스 사용량 측정 방식이나 과금 체계가 웹 호스팅과는 전혀 다르게 이루어지게 됩니다.

 

Platform Training Kit을 비롯하여 많은 자료들이 소개되고 있지만, 국내 웹 사이트에서 Windows Azure Platform을 본격적으로 다루고 소개하는 자료는 아직 많이 없는 듯 합니다. 이러한 배경을 바탕으로, 조금씩, 이해하기 쉽고 접근하기 쉬운 주제를 기초로 정식 서비스 시행 이전까지 Windows Azure Platform 개발에 관련된 내용들을 소개하고자 합니다.

 

Windows Azure 응용프로그램을 개발하기 위해서는, Windows Azure Tools를 다운로드받아서 설치해야 합니다. Windows Azure Tools는 Visual Studio 2008과 Visual Studio 2010을 위한 Add-On으로, Windows Azure 어플리케이션을 로컬 컴퓨터에서 시뮬레이션하고, Windows Azure Platform에 게시할 수 있도록 패키지를 작성하는 도구를 포함합니다.

 

다운로드: http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&displaylang=en

 

오늘 강좌에서 다루어볼 예제는 방명록입니다. Windows Azure Platform의 Compute 기능과 Table Storage 기능을 사용하여 만들어 보도록 하겠습니다.

 

 

Windows Azure Tools를 설치한 후, Visual Studio 2008을 열어서 새 프로젝트를 만들면, 위와 같이 Windows Azure 프로젝트 템플릿이 설치되어있는 것을 볼 수 있습니다.

 

 

기존의 프로젝트/솔루션과는 달리 대상 언어와 프로젝트의 세부 종류를 추가적으로 선택할 수 있는 대화 상자가 나타납니다. 화면에서 왼쪽에 나열된 것이 언어 별로 선택할 수 있는 프로젝트 템플릿이고, 오른쪽에 나열된 것이 추가할 프로젝트 템플릿입니다.

  • Web Role: ASP.NET 기반의 응용프로그램입니다.
  • WCF Service Role: WCF 서비스를 독립적으로 실행할 수 있도록 합니다.
  • Worker Role: 백그라운드에서 실행되는 서비스 응용프로그램입니다.
  • CGI Web Role: FastCGI 기반의 응용프로그램을 작성할 수 있게 합니다.

 

프로젝트를 추가한 후, 솔루션 탐색기의 구성 내역을 살펴보면, 위와 같이 나타납니다.

 

위의 그림에서 GuestBook 프로젝트는 Windows Azure Platform에 게시될 응용프로그램에 대한 프로젝트입니다. Roles 폴더 안에, 포함될 실제 응용프로그램에 대한 참조를 관리하게 되며, CSCFG 파일에 게시될 응용프로그램에 대한 설정을 넣게 됩니다.

 

만약, 기존에 개발한 ASP.NET 응용프로그램이 있다면 솔루션에 프로젝트 사본을 추가하고, Roles 폴더 안에 참조를 추가하여 쉽게 패키지로 구성할 수 있습니다.

 

이제, Windows Azure Table Storage에 데이터 모델을 정의해 보도록 하겠습니다. 방명록에 어떤 형태로 데이터가 저장되어야 하는지를 정의하기 위하여 데이터베이스 대신 코드 수준에서 손쉽게 정의할 수 있습니다.

 

이번에는, 단순한 클래스 라이브러리 프로젝트를 아래와 같이 생성합니다. Azure 서비스에 포함되어야 하는 프로젝트 임을 명시하기 위하여 _Data 라는 접미사를 프로젝트 이름에 붙였습니다.

 

 

그리고, 프로젝트 참조 추가 대화 상자를 열어, System.Data.Services.Client 어셈블리를 추가합니다.

 

 

그리고, Windows Azure Table Storage에 데이터를 저장하거나 가져올 수 있는 LINQ Data Context를 3개의 클래스로 구성하여 작성합니다.

  • GuestBookEntry 클래스: Table Storage에 데이터를 저장하거나 가져올 수 있는 기본 단위 (Atom)를 구성하는 클래스입니다.
  • GuestBookDataContext 클래스: Table Storage에 어떤 테이블을 저장할 것인지를 모델링하는 클래스로, LINQ를 위한 Data Context 클래스의 역할도 수행합니다.
  • GuestBookEntryDataSource 클래스: Table Storage에 자료 구조를 생성하고, 실제로 데이터를 Create/Read/Update/Delete 하는 것을 관여하는 클래스이며, 상속을 받는 대상이 없는 평이한 클래스입니다.

[code csharp]
using System;
using Microsoft.WindowsAzure.StorageClient;
// 방명록에 대한 엔티티를 정의합니다.
public class GuestBookEntry : TableServiceEntity
{
  public GuestBookEntry()
  {
    // 같은 종류의 데이터를 묶어서 관리하기 위한 키를 지정합니다.
    // 아래와 같이 지정함으로서, 연/월/일 별로 방명록 데이터를 묶게 됩니다.
    PartitionKey = DateTime.ToString("MMddyyyy");
    // RDBMS에서 Primary Key를 설정하는것과 마찬가지로, 데이터를 정렬하고, 고유성을 부여하기 위하여
    // RowKey를 지정합니다.
    RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, uid.NewGuid());
  }
  // 모델 정의 시작
  public string Message { get; set; }
  public string GuestName { get; set; }
  public string PhotoUrl { get; set; }
  public string ThumbnailUrl { get; set; }
  // 모델 정의 끝
}
[/code]

 

[code csharp]
using System;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
// 방명록에 대한 데이터 컨텍스트를 정의합니다.
public class GuestBookDataContext : TableServiceContext
{
  public GuestBookDataContext(string baseAddress, StorageCredentials credentials)
    : base(baseAddress, credentials)
  {
  }
  public IQueryable<GuestBookEntry> GuestBookEntry
 {
    get
    {
      return this.CreateQuery<GuestBookEntry>("GuestBookEntry");
    }
  }
}
[/code]

 

[code csharp]
using System;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;

public class GuestBookEntryDataSource
{
  private static CloudStorageAccount storageAccount;
  private GuestBookDataContext context;
  static GuestBookEntryDataSource()
  {
    // 나중에 여기에 Windows Azure Storage 계정에 대한 연결 문자열이 설정되어야 합니다.
    storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    CloudTableClient.CreateTablesFromModel(
        typeof(GuestBookDataContext),
        storageAccount.TableEndpoint.AbsoluteUri,
        storageAccount.Credentials); // Context 클래스를 통하여 자료 구조 생성
  }
  public GuestBookEntryDataSource()
  {
    this.context = new GuestBookDataContext(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials);
    this.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1));
  }
  public IEnumerable<GuestBookEntry> Select()
  {
    var results = from g in this.context.GuestBookEntry
                  where g.PartitionKey == DateTime.UtcNow.ToString("MMddyyyy")
                  select g;
    return results;
  }
  public void AddGuestBookEntry(GuestBookEntry newItem)
  {
    this.context.AddObject("GuestBookEntry", newItem);
    this.context.SaveChanges();
  }
  public void UpdateImageThumbnail(string partitionKey, string rowKey, string thumbUrl)
  {
    var results = from g in this.context.GuestBookEntry
                  where g.PartitionKey == partitionKey && g.RowKey == rowKey
                  select g;
    var entry = results.FirstOrDefault<GuestBookEntry>();
    entry.ThumbnailUrl = thumbUrl;
    this.context.UpdateObject(entry);
    this.context.SaveChanges();
  }
}
[/code]

 

이와 같이 코드를 작성하여, Windows Azure Table Storage에 데이터 모델을 정의하는 작업까지 끝났습니다. 다음 강좌에서는, 방명록의 웹 인터페이스를 작성하는 부분과 함께, Windows Azure BLOB Storage의 사용 방법을 살펴보도록 하겠습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)