C++를 사용하여 Azure Files 개발

Microsoft Azure Storage Explorer 시도

Microsoft Azure Storage Explorer는 Windows, macOS 및 Linux에서 Azure Storage 데이터로 시각적으로 작업할 수 있도록 해주는 Microsoft의 독립 실행형 무료 앱입니다.

적용 대상

파일 공유 유형 SMB NFS
표준 파일 공유(GPv2), LRS/ZRS Yes No
표준 파일 공유(GPv2), GRS/GZRS Yes No
프리미엄 파일 공유(FileStorage), LRS/ZRS Yes No

이 자습서 정보

이 자습서에서는 C++를 사용하여 Azure Files에서 기본 작업을 수행하는 방법을 알아봅니다. Azure Files를 처음 사용하는 경우 다음 섹션에 있는 개념들을 살펴보면 샘플에 대한 이해를 높이는 데 유용할 것입니다. 설명된 샘플 중 일부는 다음과 같습니다.

  • Azure 파일 공유 만들기 및 삭제
  • 디렉터리 만들기 및 삭제
  • 파일 업로드, 다운로드 및 삭제
  • 파일의 메타데이터 설정 및 나열

참고 항목

Azure Files는 SMB를 통해 액세스할 수 있기 때문에 표준 C++ I/O 클래스 및 함수를 사용하여 Azure 파일 공유에 액세스하는 간단한 애플리케이션을 작성할 수 있습니다. 이 문서에서는 File REST API를 사용하여 Azure Files와 통신하는 Azure Storage C++ SDK를 사용하는 애플리케이션을 작성하는 방법에 대해 설명합니다.

필수 조건

설정

이 섹션에서는 C++용 Azure Blob Storage 클라이언트 라이브러리 v12를 사용하는 프로젝트를 준비하는 과정을 안내합니다.

패키지 설치

vcpkg install 명령은 C++용 Azure Storage Blobs SDK 및 필요한 종속성을 설치합니다.

vcpkg.exe install azure-storage-files-shares-cpp:x64-windows

자세한 내용은 GitHub를 방문하여 C++용 Azure SDK를 얻어 빌드합니다.

프로젝트 만들기

Visual Studio에서 FilesShareQuickstartV12라는 Windows용 새 C++ 콘솔 애플리케이션을 만듭니다.

Visual Studio dialog for configuring a new C++ Windows console app

Azure Portal에서 자격 증명 복사

샘플 애플리케이션이 Azure Storage에 대한 요청을 수행하는 경우 권한이 있어야 합니다. 요청에 권한을 부여하려면 스토리지 계정 자격 증명을 연결 문자열로 애플리케이션에 추가합니다. 스토리지 계정 자격 증명을 보려면 다음 단계를 따릅니다.

  1. Azure Portal에 로그인합니다.

  2. 스토리지 계정을 찾습니다.

  3. 스토리지 계정 메뉴 창의 보안 + 네트워킹에서 액세스 키를 선택합니다. 여기에서 계정 액세스 키 및 각 키의 전체 연결 문자열을 볼 수 있습니다.

    Screenshot that shows where the access key settings are in the Azure portal

  4. 액세스 키 창에서 키 표시를 선택합니다.

  5. key1 섹션에서 연결 문자열 값을 찾습니다. 클립보드에 복사 아이콘을 선택하여 연결 문자열을 복사합니다. 다음 단계에서 연결 문자열 값을 환경 변수에 추가합니다.

    Screenshot showing how to copy a connection string from the Azure portal

스토리지 연결 문자열 구성

연결 문자열을 복사한 후 애플리케이션을 실행 중인 로컬 컴퓨터의 새 환경 변수에 씁니다. 환경 변수를 설정하려면 콘솔 창을 열고 사용 중인 운영 체제의 지침을 따릅니다. <yourconnectionstring>을 실제 연결 문자열로 바꿉니다.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Windows에서 환경 변수가 추가되면 명령 창의 새 인스턴스를 시작해야 합니다.

프로그램 다시 시작

환경 변수가 추가되면 이 환경 변수를 읽어야 하는 실행 중인 프로그램을 다시 시작합니다. 예를 들어 개발 환경 또는 편집기를 다시 시작한 후에 계속합니다.

코드 예제

이 예제 코드 조각에서는 C++용 Azure Files 공유 클라이언트 라이브러리를 사용하여 다음 작업을 수행하는 방법을 보여 줍니다.

포함 파일 추가

프로젝트 디렉터리에서 다음을 수행합니다.

  1. Visual Studio에서 FilesShareQuickstartV12.sln 솔루션 파일을 엽니다.
  2. Visual Studio 내에서 FilesShareQuickstartV12.cpp 원본 파일을 엽니다.
  3. main 내에서 자동 생성된 코드를 모두 제거합니다.
  4. #include 문을 추가합니다.
#include <iostream>
#include <stdlib.h>
#include <vector>

#include <azure/storage/files/shares.hpp>

연결 문자열 가져오기

아래 코드에서는 스토리지 연결 문자열 구성에서 만든 환경 변수에서 스토리지 계정에 대한 연결 문자열을 검색합니다.

이 코드를 main() 내에 추가합니다.

        // Retrieve the connection string for use with the application. The storage
        // connection string is stored in an environment variable on the machine
        // running the application called AZURE_STORAGE_CONNECTION_STRING.
        // Note that _MSC_VER is set when using MSVC compiler.
        static const char* AZURE_STORAGE_CONNECTION_STRING = "AZURE_STORAGE_CONNECTION_STRING";
#if !defined(_MSC_VER)
        const char* connectionString = std::getenv(AZURE_STORAGE_CONNECTION_STRING);
#else
        // Use getenv_s for MSVC
        size_t requiredSize;
        getenv_s(&requiredSize, NULL, NULL, AZURE_STORAGE_CONNECTION_STRING);
        if (requiredSize == 0) {
            throw std::runtime_error("missing connection string from env.");
        }
        std::vector<char> value(requiredSize);
        getenv_s(&requiredSize, value.data(), value.size(), AZURE_STORAGE_CONNECTION_STRING);
        std::string connectionStringStr = std::string(value.begin(), value.end());
        const char* connectionString = connectionStringStr.c_str();
#endif

파일 공유 만들기

CreateFromConnectionString 함수를 호출하여 ShareClient 클래스의 인스턴스를 만듭니다. 그런 다음, CreateIfNotExists를 호출하여 스토리지 계정에 실제 파일 공유를 만듭니다.

다음 코드를 main()의 끝에 추가합니다.

using namespace Azure::Storage::Files::Shares;

std::string shareName = "sample-share";

// Initialize a new instance of ShareClient
auto shareClient = ShareClient::CreateFromConnectionString(connectionString, shareName);

// Create the files share. This will do nothing if the files share already exists.
std::cout << "Creating files share: " << shareName << std::endl;
shareClient.CreateIfNotExists();

파일 공유에 파일 업로드

다음 코드 조각을 실행합니다.

  1. "Hello Azure!"가 포함된 문자열을 선언합니다.
  2. 루트 ShareDirectoryClient를 가져온 후 파일 공유 만들기 섹션의 파일 공유에서 GetFileClient를 호출하여 ShareFileClient 개체에 대한 참조를 가져옵니다.
  3. UploadFrom 함수를 호출하여 문자열을 파일에 업로드합니다. 이 함수는 파일이 없는 경우 파일을 만들고, 있는 경우 파일을 업데이트합니다.

다음 코드를 main()의 끝에 추가합니다.

std::string fileName = "sample-file";
uint8_t fileContent[] = "Hello Azure!";

// Create the ShareFileClient
ShareFileClient fileClient = shareClient.GetRootDirectoryClient().GetFileClient(fileName);

// Upload the file
std::cout << "Uploading file: " << fileName << std::endl;
fileClient.UploadFrom(fileContent, sizeof(fileContent));

파일의 메타데이터 설정

ShareFileClient.SetMetadata 함수를 호출하여 파일의 메타데이터 속성을 설정합니다.

다음 코드를 main()의 끝에 추가합니다.

Azure::Storage::Metadata fileMetadata = { {"key1", "value1"}, {"key2", "value2"} };
fileClient.SetMetadata(fileMetadata);

파일의 메타데이터 나열

ShareFileClient.GetProperties 함수를 호출하여 파일의 메타데이터 속성을 가져옵니다. 메타데이터는 반환된 ValueMetadata 필드 아래에 있습니다. 메타데이터는 파일의 메타데이터 설정에 있는 예제와 비슷한 키-값 쌍입니다.

// Retrieve the file properties
auto properties = fileClient.GetProperties().Value;
std::cout << "Listing blob metadata..." << std::endl;
for (auto metadata : properties.Metadata)
{
    std::cout << metadata.first << ":" << metadata.second << std::endl;
}

파일 다운로드

파일의 메타데이터 나열에서 파일 속성을 검색한 경우 업로드된 파일의 속성을 사용하여 새 std::vector<uint8_t> 개체가 생성됩니다. ShareFileClient 기본 클래스에서 DownloadTo 함수를 호출하여 이전에 만든 파일을 새 std::vector<uint8_t> 개체로 다운로드합니다. 마지막으로, 다운로드한 파일 데이터를 표시합니다.

다음 코드를 main()의 끝에 추가합니다.

std::vector<uint8_t> fileDownloaded(properties.FileSize);
fileClient.DownloadTo(fileDownloaded.data(), fileDownloaded.size());

std::cout << "Downloaded file contents: " << std::string(fileDownloaded.begin(), fileDownloaded.end()) << std::endl;

파일 삭제

다음 코드에서는 ShareFileClient.Delete 함수를 호출하여 Azure Storage 파일 공유에서 Blob을 삭제합니다.

std::cout << "Deleting file: " << fileName << std::endl;
fileClient.DeleteIfExists();

파일 공유 삭제

다음 코드에서는 ShareClient.Delete를 통해 전체 파일 공유를 삭제하여 앱에서 만든 리소스를 정리합니다.

다음 코드를 main()의 끝에 추가합니다.

std::cout << "Deleting files share: " << shareName << std::endl;
shareClient.DeleteIfExists();

코드 실행

이 앱은 컨테이너를 만들고, 텍스트 파일을 Azure Blob Storage에 업로드합니다. 그런 다음, 예제에서 컨테이너의 Blob을 나열하고, 파일을 다운로드하고, 파일 내용을 표시합니다. 마지막으로 앱에서 Blob 및 컨테이너를 삭제합니다.

앱의 출력은 다음 예제 출력과 유사합니다.

Azure Files Shares storage v12 - C++ quickstart sample
Creating files share: sample-share
Uploading file: sample-file
Listing file metadata...
key1:value1
key2:value2
Downloaded file contents: Hello Azure!
Deleting file: sample-file
Deleting files share: sample-share

다음 단계

이 빠른 시작에서는 C++를 사용하여 파일을 업로드, 다운로드 및 나열하는 방법을 알아보았습니다. 또한 Azure Storage 파일 공유를 만들고 삭제하는 방법을 알아보았습니다.

Blob Storage 샘플을 보려면 다음으로 계속 진행하세요.