빠른 시작: Java v12 SDK로 Blob 관리Quickstart: Manage blobs with Java v12 SDK

이 빠른 시작에서는 Java를 사용하여 Blob을 관리하는 방법을 알아봅니다.In this quickstart, you learn to manage blobs by using Java. Blob은 이미지, 문서, 스트리밍 미디어 및 보관 데이터를 포함하여 대량의 텍스트 또는 이진 데이터를 저장할 수 있는 개체입니다.Blobs are objects that can hold large amounts of text or binary data, including images, documents, streaming media, and archive data. Blob을 업로드, 다운로드 및 나열하고 컨테이너를 만들고 삭제합니다.You'll upload, download, and list blobs, and you'll create and delete containers.

API 참조 설명서 | 라이브러리 소스 코드 | 패키지(Maven) | 샘플API reference documentation | Library source code | Package (Maven) | Samples

사전 요구 사항Prerequisites

참고

이전 SDK 버전을 시작하려면 빠른 시작: Java v8 SDK로 Blob 관리를 참조하세요.To get started with the previous SDK version, see Quickstart: Manage blobs with Java v8 SDK.

참고

이 문서에 설명된 기능은 이제 계층 네임스페이스가 있는 계정에서 사용할 수 있습니다.The features described in this article are now available to accounts that have a hierarchical namespace. 제한 사항을 검토하려면 Azure Data Lake Storage Gen2에서 알려진 문제 문서를 참조하세요.To review limitations, see the Known issues with Azure Data Lake Storage Gen2 article.

설치Setting up

이 섹션에서는 Java용 Azure Blob 스토리지 클라이언트 라이브러리 v12를 사용하는 프로젝트를 준비합니다.This section walks you through preparing a project to work with the Azure Blob storage client library v12 for Java.

프로젝트 만들기Create the project

blob-quickstart-v12라는 Java 애플리케이션을 만듭니다.Create a Java application named blob-quickstart-v12.

  1. 콘솔 창(예: cmd, PowerShell 또는 Bash)에서 Maven을 사용하여 blob-quickstart-v12라는 새 콘솔 앱을 만듭니다.In a console window (such as cmd, PowerShell, or Bash), use Maven to create a new console app with the name blob-quickstart-v12. 다음 mvn 명령을 입력하여 "Hello world!"를 생성합니다.Type the following mvn command to create a "Hello world!" Java 프로젝트를 만듭니다.Java project.

    mvn archetype:generate -DgroupId=com.blobs.quickstart \
                           -DartifactId=blob-quickstart-v12 \
                           -DarchetypeArtifactId=maven-archetype-quickstart \
                           -DarchetypeVersion=1.4 \
                           -DinteractiveMode=false
    
  2. 프로젝트를 생성하는 출력은 다음과 같습니다.The output from generating the project should look something like this:

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------< org.apache.maven:standalone-pom >-------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] --------------------------------[ pom ]---------------------------------
    [INFO]
    [INFO] >>> maven-archetype-plugin:3.1.2:generate (default-cli) > generate-sources @ standalone-pom >>>
    [INFO]
    [INFO] <<< maven-archetype-plugin:3.1.2:generate (default-cli) < generate-sources @ standalone-pom <<<
    [INFO]
    [INFO]
    [INFO] --- maven-archetype-plugin:3.1.2:generate (default-cli) @ standalone-pom ---
    [INFO] Generating project in Batch mode
    [INFO] ----------------------------------------------------------------------------
    [INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
    [INFO] ----------------------------------------------------------------------------
    [INFO] Parameter: groupId, Value: com.blobs.quickstart
    [INFO] Parameter: artifactId, Value: blob-quickstart-v12
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] Parameter: package, Value: com.blobs.quickstart
    [INFO] Parameter: packageInPathFormat, Value: com/blobs/quickstart
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] Parameter: package, Value: com.blobs.quickstart
    [INFO] Parameter: groupId, Value: com.blobs.quickstart
    [INFO] Parameter: artifactId, Value: blob-quickstart-v12
    [INFO] Project created from Archetype in dir: C:\QuickStarts\blob-quickstart-v12
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  7.056 s
    [INFO] Finished at: 2019-10-23T11:09:21-07:00
    [INFO] ------------------------------------------------------------------------
        ```
    
    
  3. Switch to the newly created blob-quickstart-v12 folder.

    cd blob-quickstart-v12
    
  4. blob-quickstart-v12 디렉터리에서 data라는 다른 디렉터리를 만듭니다.In side the blob-quickstart-v12 directory, create another directory called data. 여기에서 Blob 데이터 파일이 생성되고 저장됩니다.This is where the blob data files will be created and stored.

    mkdir data
    

패키지 설치Install the package

텍스트 편집기에서 pom.xml 파일을 엽니다.Open the pom.xml file in your text editor. 종속성 그룹에 다음 종속성 요소를 추가합니다.Add the following dependency element to the group of dependencies.

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-blob</artifactId>
    <version>12.0.0</version>
</dependency>

앱 프레임워크 설정Set up the app framework

프로젝트 디렉터리에서 다음을 수행합니다.From the project directory:

  1. /src/main/java/com/blobs/quickstart 디렉터리로 이동합니다.Navigate to the /src/main/java/com/blobs/quickstart directory
  2. 편집기에서 App.java 파일을 엽니다.Open the App.java file in your editor
  3. System.out.println("Hello world!"); 문을 삭제합니다.Delete the System.out.println("Hello world!"); statement
  4. import 지시문 추가Add import directives

코드는 다음과 같습니다.Here's the code:

package com.blobs.quickstart;

/**
 * Azure blob storage v12 SDK quickstart
 */
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import java.io.*;

public class App
{
    public static void main( String[] args ) throws IOException
    {
    }
}

Azure Portal에서 자격 증명 복사Copy your credentials from the Azure portal

샘플 애플리케이션이 Azure Storage에 대한 요청을 수행하는 경우 권한이 있어야 합니다.When the sample application makes a request to Azure Storage, it must be authorized. 요청에 권한을 부여하려면 스토리지 계정 자격 증명을 연결 문자열로 애플리케이션에 추가합니다.To authorize a request, add your storage account credentials to the application as a connection string. 다음 단계를 수행하여 스토리지 계정 자격 증명을 봅니다.View your storage account credentials by following these steps:

  1. Azure Portal에 로그인합니다.Sign in to the Azure portal.

  2. 스토리지 계정을 찾습니다.Locate your storage account.

  3. 스토리지 계정 개요의 설정 섹션에서 액세스 키를 선택합니다.In the Settings section of the storage account overview, select Access keys. 여기에서 계정 액세스 키 및 각 키의 전체 연결 문자열을 볼 수 있습니다.Here, you can view your account access keys and the complete connection string for each key.

  4. key1 아래에서 연결 문자열 값을 찾고, 복사 단추를 선택하여 연결 문자열을 복사합니다.Find the Connection string value under key1, and select the Copy button to copy the connection string. 다음 단계에서 연결 문자열 값을 환경 변수에 추가합니다.You will add the connection string value to an environment variable in the next step.

    Azure Portal에서 연결 문자열을 복사하는 방법을 보여주는 스크린샷

스토리지 연결 문자열 구성Configure your storage connection string

연결 문자열을 복사한 후 애플리케이션을 실행 중인 로컬 컴퓨터의 새 환경 변수에 씁니다.After you have copied your connection string, write it to a new environment variable on the local machine running the application. 환경 변수를 설정하려면 콘솔 창을 열고 사용 중인 운영 체제의 지침을 따릅니다.To set the environment variable, open a console window, and follow the instructions for your operating system. <yourconnectionstring>을 실제 연결 문자열로 바꿉니다.Replace <yourconnectionstring> with your actual connection string.

WindowsWindows

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Windows에서 환경 변수가 추가되면 명령 창의 새 인스턴스를 시작해야 합니다.After you add the environment variable in Windows, you must start a new instance of the command window.

LinuxLinux

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

macOSmacOS

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

프로그램 다시 시작Restart programs

환경 변수가 추가되면 이 환경 변수를 읽어야 하는 실행 중인 프로그램을 다시 시작합니다.After you add the environment variable, restart any running programs that will need to read the environment variable. 예를 들어 개발 환경 또는 편집기를 다시 시작한 후에 계속합니다.For example, restart your development environment or editor before continuing.

개체 모델Object model

Azure Blob Storage는 대량의 비정형 데이터를 저장하도록 최적화되어 있습니다.Azure Blob storage is optimized for storing massive amounts of unstructured data. 비정형 데이터는 텍스트 또는 이진 데이터와 같은 특정 데이터 모델 또는 정의를 따르지 않는 데이터입니다.Unstructured data is data that does not adhere to a particular data model or definition, such as text or binary data. Blob Storage는 다음 세 가지 유형의 리소스를 제공합니다.Blob storage offers three types of resources:

  • 스토리지 계정The storage account
  • 스토리지 계정의 컨테이너A container in the storage account
  • 컨테이너의 blobA blob in the container

다음 다이어그램에서는 이러한 리소스 간의 관계를 보여줍니다.The following diagram shows the relationship between these resources.

Blob Storage 아키텍처 다이어그램

다음 Java 클래스를 사용하여 이러한 리소스와 상호 작용합니다.Use the following Java classes to interact with these resources:

  • BlobServiceClient: BlobServiceClient 클래스를 사용하여 Azure Storage 리소스 및 blob 컨테이너를 조작할 수 있습니다.BlobServiceClient: The BlobServiceClient class allows you to manipulate Azure Storage resources and blob containers. 스토리지 계정은 Blob Service에 대한 최상위 네임스페이스를 제공합니다.The storage account provides the top-level namespace for the Blob service.
  • BlobServiceClientBuilder: BlobServiceClientBuilder 클래스는 BlobServiceClient 개체의 구성과 인스턴스화를 지원하기 위한 뛰어난 작성기 API를 제공합니다.BlobServiceClientBuilder: The BlobServiceClientBuilder class provides a fluent builder API to help aid the configuration and instantiation of BlobServiceClient objects.
  • BlobContainerClient: BlobContainerClient 클래스를 사용하여 Azure Storage 컨테이너 및 해당 blob을 조작할 수 있습니다.BlobContainerClient: The BlobContainerClient class allows you to manipulate Azure Storage containers and their blobs.
  • BlobClient: BlobClient 클래스를 사용하여 Azure Storage blob을 조작할 수 있습니다.BlobClient: The BlobClient class allows you to manipulate Azure Storage blobs.
  • BlobItem: BlobItem 클래스는 listBlobsFlat 호출에서 반환된 개별 blob을 나타냅니다.BlobItem: The BlobItem class represents individual blobs returned from a call to listBlobsFlat.

코드 예제Code examples

이 예제 코드 조각은 Java용 Azure Blob 스토리지 클라이언트 라이브러리를 사용하여 다음을 수행하는 방법을 보여 줍니다.These example code snippets show you how to perform the following with the Azure Blob storage client library for Java:

연결 문자열 가져오기Get the connection string

아래 코드에서는 스토리지 연결 문자열 구성 섹션에서 만든 환경 변수에서 스토리지 계정에 대한 연결 문자열을 검색합니다.The code below retrieves the connection string for the storage account from the environment variable created in the Configure your storage connection string section.

다음 코드를 Main 메서드 내에 추가합니다.Add this code inside the Main method:

System.out.println("Azure Blob storage v12 - Java quickstart sample\n");

// 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. If the environment variable
// is created after the application is launched in a console or with
// Visual Studio, the shell or application needs to be closed and reloaded
// to take the environment variable into account.
String connectStr = System.getenv("AZURE_STORAGE_CONNECTION_STRING");

컨테이너 만들기Create a container

새 컨테이너의 이름을 결정합니다.Decide on a name for the new container. 아래 코드는 컨테이너 이름이 고유해지도록 이름에 UUID 값을 추가합니다.The code below appends a UUID value to the container name to ensure that it is unique.

중요

컨테이너 이름은 소문자여야 합니다.Container names must be lowercase. 컨테이너 및 Blob 이름 지정에 대한 자세한 내용은 컨테이너, Blob, 메타데이터 이름 지정 및 참조를 참조하세요.For more information about naming containers and blobs, see Naming and Referencing Containers, Blobs, and Metadata.

그런 다음, BlobContainerClient 클래스의 인스턴스를 만들고, create 메서드를 호출하여 스토리지 계정에 컨테이너를 실제로 만듭니다.Next, create an instance of the BlobContainerClient class, then call the create method to actually create the container in your storage account.

이 코드를 Main 메서드의 끝에 추가합니다.Add this code to the end of the Main method:

// Create a BlobServiceClient object which will be used to create a container client
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

//Create a unique name for the container
String containerName = "quickstartblobs" + java.util.UUID.randomUUID();

// Create the container and return a container client object
BlobContainerClient containerClient = blobServiceClient.createBlobContainer(containerName);

컨테이너에 Blob 업로드Upload blobs to a container

다음 코드 조각을 실행합니다.The following code snippet:

  1. 로컬 data 디렉터리에 텍스트 파일을 만듭니다.Creates a text file in the local data directory.
  2. 컨테이너 만들기 섹션에서 컨테이너에 대해 getBlobClient 메서드를 호출하여 BlobClient 개체에 대한 참조를 가져옵니다.Gets a reference to a BlobClient object by calling the getBlobClient method on the container from the Create a container section.
  3. uploadFromFile 메서드를 호출하여 로컬 텍스트 파일을 Blob에 업로드합니다.Uploads the local text file to the blob by calling the uploadFromFile method. 이 메서드는 Blob이 없는 경우 만들고, Blob이 있는 경우 덮어씁니다.This method creates the blob if it doesn't already exist, but will not overwrite it if it does.

이 코드를 Main 메서드의 끝에 추가합니다.Add this code to the end of the Main method:

// Create a local file in the ./data/ directory for uploading and downloading
String localPath = "./data/";
String fileName = "quickstart" + java.util.UUID.randomUUID() + ".txt";
File localFile = new File(localPath + fileName);

// Write text to the file
FileWriter writer = new FileWriter(localPath + fileName, true);
writer.write("Hello, World!");
writer.close();

// Get a reference to a blob
BlobClient blobClient = containerClient.getBlobClient(fileName);

System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());

// Upload the blob
blobClient.uploadFromFile(localPath + fileName);

컨테이너의 Blob 나열List the blobs in a container

listBlobs 메서드를 호출하여 컨테이너의 blob을 나열합니다.List the blobs in the container by calling the listBlobs method. 이 경우 하나의 Blob만 컨테이너에 추가되었으므로 나열된 작업은 하나의 해당 Blob만 반환합니다.In this case, only one blob has been added to the container, so the listing operation returns just that one blob.

이 코드를 Main 메서드의 끝에 추가합니다.Add this code to the end of the Main method:

System.out.println("\nListing blobs...");

// List the blob(s) in the container.
for (BlobItem blobItem : containerClient.listBlobs()) {
    System.out.println("\t" + blobItem.getName());
}

Blob 다운로드Download blobs

downloadToFile 메서드를 호출하여 이전에 만든 blob을 다운로드합니다.Download the previously created blob by calling the downloadToFile method. 예제 코드는 로컬 파일 시스템에서 두 파일을 볼 수 있도록 파일 이름에 "DOWNLOAD" 접미사를 추가합니다.The example code adds a suffix of "DOWNLOAD" to the file name so that you can see both files in local file system.

이 코드를 Main 메서드의 끝에 추가합니다.Add this code to the end of the Main method:

// Download the blob to a local file
// Append the string "DOWNLOAD" before the .txt extension so that you can see both files.
String downloadFileName = fileName.replace(".txt", "DOWNLOAD.txt");
File downloadedFile = new File(localPath + downloadFileName);

System.out.println("\nDownloading blob to\n\t " + localPath + downloadFileName);

blobClient.downloadToFile(localPath + downloadFileName);

컨테이너 삭제Delete a container

다음 코드는 delete 메서드로 전체 컨테이너를 제거하여 앱이 만든 리소스를 정리합니다.The following code cleans up the resources the app created by removing the entire container using the delete method. 또한 앱에서 만든 로컬 파일도 삭제합니다.It also deletes the local files created by the app.

앱은 blob, 컨테이너 및 로컬 파일을 삭제하기 전에 System.console().readLine()을 호출하여 사용자 입력을 일시 중지합니다.The app pauses for user input by calling System.console().readLine() before it deletes the blob, container, and local files. 리소스를 삭제하기 전에 올바르게 만들어졌는지 확인하는 것이 좋습니다.This is a good chance to verify that the resources were created correctly, before they are deleted.

이 코드를 Main 메서드의 끝에 추가합니다.Add this code to the end of the Main method:

// Clean up
System.out.println("\nPress the Enter key to begin clean up");
System.console().readLine();

System.out.println("Deleting blob container...");
containerClient.delete();

System.out.println("Deleting the local source and downloaded files...");
localFile.delete();
downloadedFile.delete();

System.out.println("Done");

코드 실행Run the code

이 앱은 로컬 폴더에 테스트 파일을 만들고 Blob 스토리지에 업로드합니다.This app creates a test file in your local folder and uploads it to Blob storage. 그런 다음, 컨테이너에 Blob을 나열하고 이전 파일과 새 파일을 비교할 수 있도록 새 이름으로 해당 파일을 다운로드합니다.The example then lists the blobs in the container and downloads the file with a new name so that you can compare the old and new files.

pom.xml 파일이 포함된 디렉터리로 이동한 후 다음 mvn 명령을 사용하여 프로젝트를 컴파일합니다.Navigate to the directory containing the pom.xml file and compile the project by using the following mvn command.

mvn compile

그런 다음, 패키지를 빌드합니다.Then, build the package.

mvn package

다음 mvn 명령을 실행하여 앱을 실행합니다.Run the following mvn command to execute the app.

mvn exec:java -Dexec.mainClass="com.blobs.quickstart.App" -Dexec.cleanupDaemonThreads=false

앱의 출력은 다음 예제 출력과 유사합니다.The output of the app is similar to the following example:

Azure Blob storage v12 - Java quickstart sample

Uploading to Blob storage as blob:
        https://mystorageacct.blob.core.windows.net/quickstartblobsf9aa68a5-260e-47e6-bea2-2dcfcfa1fd9a/quickstarta9c3a53e-ae9d-4863-8b34-f3d807992d65.txt

Listing blobs...
        quickstarta9c3a53e-ae9d-4863-8b34-f3d807992d65.txt

Downloading blob to
        ./data/quickstarta9c3a53e-ae9d-4863-8b34-f3d807992d65DOWNLOAD.txt

Press the Enter key to begin clean up

Deleting blob container...
Deleting the local source and downloaded files...
Done

정리 프로세스를 시작하기 전에 data 폴더에서 두 파일을 확인합니다.Before you begin the clean up process, check your data folder for the two files. 이 파일을 열어 동일한지 확인할 수 있습니다.You can open them and observe that they are identical.

파일을 확인한 후에 Enter 키를 눌러 테스트 파일을 삭제하고 데모를 완료합니다.After you've verified the files, press the Enter key to delete the test files and finish the demo.

다음 단계Next steps

이 빠른 시작에서는 Java를 사용하여 Blob을 업로드, 다운로드 및 나열하는 방법을 배웠습니다.In this quickstart, you learned how to upload, download, and list blobs using Java.

Blob 스토리지 샘플 앱을 보려면 다음을 계속 진행합니다.To see Blob storage sample apps, continue to: