BLOB Storage 항목의 이름을 바꾸는 방법

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는 일반 파일 시스템처럼 존재 여부를 먼저 검사하는 방식이 아닌 선언적인 방식으로 먼저 원하는 참조를 획득한 후 그 다음 작업을 수행하는 형태로 작업이 이루어집니다.

댓글 남기기