Windows Azure Platform의 핵심 구성 요소들 중 하나인 Windows Azure Storage가 이번 BUILD Windows 2011 행사 이튿날에 발표한 기능 중에는 Windows Azure Storage의 향상에 관한 내용이 있었는데, 그 동안 Windows Azure Storage에 대해서 바라던 많은 요구 사항들이 이번에도 성실하게 반영되었습니다. 그 중에서도 큰 맥락을 나누면 같은 지역 내의 다른 데이터센터로 Storage의 데이터를 복제할 수 있는 Geo-Replication 기능과, BLOB, Table, Queue 스토리지의 사용법 개선에 따른 성능 향상이 있습니다.

Geo-Replication

이제 Windows Azure Storage 역시 다른 Cloud Platform들과 마찬가지로 재해 복구 기능을 가질 수 있게 되었습니다. 기존에는 Geo-Replication을 전적으로 이용자의 재량으로 해야했고, 비용 투자가 필요했던 부분이지만 이 기능을 네이티브하게 지원할 수 있게 되었기 때문에 더 안전한 서비스 사용이 가능해지게 되었습니다. Geo-Replication은 Windows Azure BLOB과 Table 스토리지에 한정되는 내용으로 예를 들어 북유럽과 서유럽 사이, 동아시아와 동남아시아 사이의 데이터센터 간에 데이터 복제를 수행하여 Redundancy를 확보하는 전략입니다. 그러나 아시아와 유럽 간 복제는 수행하지 않으며, 모든 작업은 비동기적으로 수행되므로 현재 서비스에서 변경되거나 영향을 주는 부분은 없다고 합니다. 

새 BLOB, Table 및 Queue 스토리지의 기능들

2011-08-18 버전의 REST API에서는 기존에 커뮤니티로부터 많은 요청이 있었던 기능들을 제공하는데, 다음과

  • Table Upsert: 한 번의 요청으로 이미 존재하는 엔터티에 대해서는 업데이트를, 존재하지 않는 엔터티에 대해서는 삽입을 조건부로 처리할 수 있는 기능입니다.
  • Projection Query 지원: 엔터티의 하위 집합을 만들 수 있는 기능으로 LINQ to Table Storage 등에 직접적인 영향을 주게 될 가장 큰 기능입니다. 이전에는 Projection Query를 수행할 수 없었기 때문에 전체 엔터티 컬렉션을 서버로부터 우선 다운로드한 다음 이것을 메모리에서 정리하는 비효율적인 방식을 사용했지만 이 작업을 서버 차원에서 직접 수행할 수 있게 됨에 따라 대역폭 사용량을 줄이고 쿼리 성능을 더 업그레이드할 수 있게 되었습니다.
  • 향상된 BLOB HTTP 헤더 지원: BLOB 차원의 동영상 스트리밍이 가능해지고, 다운로드 가속기 등으로 이어받는 작업이 가능해졌습니다.
  • 큐 메시지 업데이트: 큐에 삽입한 메시지의 내용을 편집하거나, 유효 기한을 연장하여 큐 자체의 항목을 엔터티로 취급할 수 있게 하고 길게 소요되는 작업에 대한 이벤트 처리를 큐 스토리지를 통해서 할 수 있도록 기능을 보강했습니다.
  • 큐 메시지 삽입 시 대기 시간 지정: 큐에 메시지를 삽입한 직후에 다른 큐 메시지 수신처에서 내용을 보이게 하지 않고, 지정된 기간 동안 내용을 숨기도록 삽입할 수 있습니d

그 외에 좀 더 자세한 정보는 아래 블로그 문서들을 참고하십시오.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)
Windows Azure BLOB Storage는 기본적으로 파일을 저장할 수 있도록 고안된 클라우드 저장소입니다. 하지만 일반적인 파일 시스템과는 차이점이 많고, 그 중에서도 특별히 이슈가 되는 부분이 하나 있는데 바로 파일 이름을 바꾸는 동작이 용이하지 않다는 점입니다. 논리적으로 파일 이름을 바꾸는 것은 같은 디렉터리 위치 내에서 파일 이동 명령을 사용하는 것으로 이해할 수 있는데 이 명령이 Azure BLOB Storage에서는 지원되지 않습니다.

이 부분을 해결하기 위해서는 아래와 같이 이름을 바꾸려 하는 BLOB Reference를 획득하고, 이름이 바뀌어 저장될 대상 BLOB Reference를 획득한 후 CopyFromBlob 메서드를 사용하여 복제한 후, 기존 BLOB에 대해 Delete - 또는 - DeleteIfExists 메서드를 사용하여 원본을 제거하는 방식으로 구현이 가능합니다.

var account = new CloudStorageAccount(new StorageCredentialsAccountAndKey("abcd", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=="), true);
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("target");

// 중요: abcd.txt 파일은 있을 수도 있고 없을 수도 있습니다. 그러나 아래 코드가 실행되기 전까지는 1바이트라도 등록된 내용이 있어야 이러한 유형의 작업을 수행할 때 유효합니다.
var oldBlob = container.GetBlobReference("abcd.txt");

// 중요: efgh.txt 파일은 있을 수도 있고 없을 수도 있습니다. efgh.txt라는 파일로 abcd.txt 파일의 이름을 바꾸기 위한 작업입니다.
var newBlob = container.GetBlobReference("efgh.txt");

// abcd.txt 파일의 내용을 efgh.txt 파일로 복사하여 저장합니다.
newBlob.CopyFromBlob(oldBlob);

// abcd.txt 파일을 삭제합니다.
oldBlob.DeleteIfExists();

여기서 정확히 알아두어야 할 부분은, 새로 저장할 BLOB Reference가 실제로 Storage에 존재하는지의 여부는 관계가 없다는 것입니다. Windows Azure BLOB Storage의 API는 일반 파일 시스템처럼 존재 여부를 먼저 검사하는 방식이 아닌 선언적인 방식으로 먼저 원하는 참조를 획득한 후 그 다음 작업을 수행하는 형태로 작업이 이루어집니다.
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Windows Azure BLOB Storage는 클라우드 기반의 저장소이지만 외부에서 사용하기에 무척 편리하고 유용한 HTTP 및 HTTPS 프로토콜을 기반으로 서비스가 제공됩니다. 대화형 서버 처리 엔진이 존재하지 않는다는 점만 제외하면 HTTP 기반의 서비스를 구축하기 위해서 필요한 모든 사항이 제공되며, 파일 이어받기, ETAG 처리 등 HTTP 프로토콜의 최신 사양들을 정확히 구현하고 있습니다.

최근에 저는 Windows Azure Platform의 Storage Service를 활용하면서 또 한 가지 좋은 정보를 얻을 수 있었습니다. Windows Azure Storage를 사용하면서 가장 필요한 것 중 하나는 RIA 응용프로그램과 충분히 활용하는 전략인데, 여기에는 Smooth Streaming 뿐만 아니라 일상적으로 활용 가능한 이미지, 사운드, 비디오, 텍스트 파일들도 포함될 수 있습니다. 그러나 익히 알려진대로 보안 상의 이유 때문에 RIA 플랫폼 자체적으로는 접근하려는 원격 웹 서버의 루트 경로 상에 반드시 매니페스트 파일이 존재해야 합니다. 하지만 일반적인 클라이언트나 API를 이용해서는 우리가 아는 루트 경로 상에 BLOB 객체를 올릴 수 없습니다. 어떻게 하면 좋을까요?

여기에 대한 답이 있습니다. Windows Azure Storage는 루트 경로에 대한 예약된 컨테이너 이름을 제공합니다. 바로 $root 인데, 최상위 컨테이너 중 $root라는 이름의 컨테이너를 생성하고 여기에 파일을 업로드하면 바깥에서 보기에 루트 경로에 올라온 것과 동일하게 취급됩니다. 여기에 RIA 응용프로그램이 필요로 하는, Adobe Flash의 경우 crossdomain.xml 파일, Microsoft Silverlight의 경우 clientaccesspolicy.xml 파일을 text/xml MIME 형식으로 정확히 지정하여 업로드하면 문제가 해결됩니다.

crossdomain.xml 파일과 clientaccesspolicy.xml 파일의 예제는 휴즈플로우의 CTO이신 이길복 MVP님의 블로그 아티클 (http://gilverlight.net/2888)을 참조하시면 되겠습니다.

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

사이트 바로 가기: http://www.myazurestorage.com/

Windows Azure Platform의 핵심 기능들 중에서, Hosting Service (Compute) 영역 만큼 많은 비중을 차지하고 핵심적인 기능을 담당하는 것이 Storage Service (Storage) 영역입니다. 하지만 Storage Service를 단지 http://windows.azure.com/ 에서 제공하는 웹 프론트엔드로만 관리하는데에는 모자르는 점이 많은데요, 이를 효과적으로 보완하고 좀 더 쉽게 관리할 수 있는 웹 사이트를 소개합니다. 바로 myAzureStorage.com (http://www.myazurestorage.com) 이라는 사이트입니다.

myAzureStorage.com에 접속하면 아래와 같은 로그인 화면이 나타납니다. Windows Azure Platform이 노출하는 REST Service API와의 연결을 위하여 Windows Azure Storage의 계정 ID와 Primary Access Key를 묻는 것이며 이는 http://windows.azure.com/ 에서 Storage Service 항목에 나와있는 값을 대입하면 됩니다.

사이트에 로그인하고 나서는 아래 그림과 같이 Table, Queue, BLOB Storage에 대한 접근을 할 수 있게 되어있습니다. Table Storage의 경우 테이블 스키마를 정의하고 웹 상에서 직접 데이터를 검색할 수 있습니다.

테이블 관리 기능 외에도, 큐에 쌓여있는 메시지를 조회하거나, BLOB 컨테이너 내의 파일을 편집하거나 다운로드하거나, 외부 공개 권한 설정 등을 관리할 수도 있게 되어있습니다. 이 서비스는 Windows Azure REST API를 이용하여 관리하므로 Windows Azure Platform의 요금 정책에 관계없이 편리하게 이용할 수 있습니다.

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