Search

Windows Azure Update: CloudStorageAccount 클래스 사용 시 주의 사항

Cloud 2010. 8. 23. 02:00 Posted by 알 수 없는 사용자

안녕하세요. Visual C# MVP 남정현입니다. 지난번 Windows Azure Update (2010/07/29 - [Cloud] - Windows Azure Update: Microsoft Project Code-Named "Houston" CTP 1) 에 이어서 오늘은 Windows Azure Cafe 내에서 발견한 이슈에 대하여 소개하는 글을 올립니다. 이 글은 Windows Azure Tools for Visual Studio 버전 1.2에 적용되며 향후에 개선될 여지가 있는 부분으로 꼭 메모해두시면 좋을만한 부분입니다.

CloudStorageAccount 클래스에 대하여

Windows Azure Platform에서 사용하는 서비스의 유형 중에서, BLOB, Table, Queue를 다루기 위해서는 Windows Azure Storage 서비스를 신청하고 여기에 직접 접근하는 API를 호출해야 하는 데, 이 때 최초에 사용자 인증을 완료하기 위하여 제일 먼저 활용하는 클래스가 바로 CloudStorageAccount 클래스입니다. 이 클래스에는 다음과 같은 멤버들을 포함하고 있습니다.

  • [static] FromConfigurationSetting: Windows Azure의 Worker - 또는 - Web Role의 개별 환경 설정 파일에 들어있는 설정 파일로부터 Storage 연결 문자열을 가져와 CloudStorageAccount 객체를 생성하는 Factory Method입니다.
  • [static] Parse: 형식과 규칙에 맞는 연결 문자열이 있을 경우 문자열을 해석하여 CloudStorageAccount 객체를 생성하는 Factory Method입니다. 만약 분석에 실패할 경우 예외를 발생시킵니다.
  • [static] SetConfigurationSettingPublisher: Windows Azure Management API 등을 통해서 동적으로 설정 내역이 바뀌었을 경우 이를 전달하고 시스템 내부에 반영하는 통지 이벤트 처리기를 등록합니다.
  • [static] TryParse: 기본적으로 Parse 메서드와 하는 일이 동일하지만, 예외를 직접 던지지 않고 실패할 경우 반환값으로 false를 반환하도록 설계되어있어 조건문 만으로 예외 상황을 처리할 수 있도록 도와주는 도우미 메서드입니다.

위의 Static Member들 중에서도 특별히 굵게 강조 표시한 메서드 2개는, 기본적으로 제공되는 프로젝트 템플릿 상에 별도의 언급도 없으며, 이에 대한 구체적인 문서를 쉽게 발견하기 힘들지만, 이 글에서 소개하는 내용을 적용하지 않았을 경우 다음의 문제가 발생할 수 있습니다.

  • FromConfigurationSettings 메서드를 호출할 때 예외가 발생합니다.
  • FromConfigurationSettings 메서드를 사용하지 않기 위하여 Role의 자체적인 Configuration File을 사용하도록 구성한 경우 설정 변경을 위하여 매번 Role을 새로 업데이트해야 하는 비효율적인 상황에 직면할 수 있습니다.

문제 해결 방법

이러한 문제를 해결하고, Storage API의 설정이 매 순간 관리 도구에 의하여 편집되고 정확히 반영될 수 있도록 하려면 SetConfigurationSettingPublisher 정적 메서드를 호출하여 이벤트 핸들러를 하나만 지정하면 됩니다. 아래의 코드를 WebRole.cs 파일 - 또는 - WorkerRole.cs 파일의 내용 중 OnStart 메서드에 추가하시면 됩니다.

CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
            {
                string connectionString;

                if (RoleEnvironment.IsAvailable) [각주:1]
                {
                    connectionString = RoleEnvironment.GetConfigurationSettingValue(configName); [각주:2]
                }
                else
                {
                    connectionString = System.Configuration.ConfigurationManager.AppSettings[configName];
                }

                configSetter(connectionString); [각주:3]
            });

같이 보기: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/6d79ca07-f53a-4110-af46-e4edc7e34e9b 

아래 그림은 적용 예시입니다.

감사합니다. :-)

  1. Windows Azure SDK Simulator 위에서 실행 중이거나 실제 Windows Azure Platform 위에서 실행 중일 때 이 Static Property의 반환값은 항상 True이며, 그 외에 단순히 일반 ASP.NET 웹 사이트로 기동 중일 때에는 항상 False가 됩니다. [본문으로]
  2. 관리 도구 등에 의하여 변경된 신규 설정값을 읽습니다. [본문으로]
  3. 실제 설정이 반영되는 구간입니다. [본문으로]