Go를 사용하여 블록 Blob 업로드
이 문서에서는 Go용 Azure Storage 클라이언트 모듈을 사용하여 Blob을 업로드하는 방법을 보여줍니다. 파일 경로, 스트림, 이진 개체 또는 텍스트 문자열에서 블록 Blob에 데이터를 업로드할 수 있습니다. 인덱스 태그를 사용하여 Blob을 업로드할 수도 있습니다.
필수 조건
- Azure 구독 - 체험 구독 만들기
- Azure Storage 계정 - 스토리지 계정 만들기
- Go 1.18+
환경 설정
기존 프로젝트가 없는 경우 이 섹션에서는 Go용 Azure Blob Storage 클라이언트 모듈을 사용하도록 프로젝트를 설정하는 방법을 보여 줍니다. 단계에는 모듈 설치, import
경로 추가 및 권한이 있는 클라이언트 개체 만들기가 포함됩니다. 자세한 내용은 Azure Blob Storage 및 Go 시작을 참조하세요.
모듈 설치
다음 명령을 사용하여 azblob 모듈을 설치합니다.
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Microsoft Entra ID로 인증(권장)하려면 다음 명령을 사용하여 azidentity
모듈을 설치합니다.
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
가져오기 경로 추가
코드 파일에 다음 가져오기 경로를 추가합니다.
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
이러한 가져오기 경로는 시작하는 데 필요한 최소한의 경로를 나타냅니다. 이 문서의 일부 코드 예제에는 추가 가져오기 경로가 필요할 수 있습니다. 구체적인 세부 정보와 사용 예를 보려면 코드 샘플을 참조하세요.
클라이언트 개체 만들기
앱을 Blob Storage에 연결하려면 azblob.NewClient를 사용하여 클라이언트 개체를 만듭니다. 다음 예에서는 권한 부여를 위해 DefaultAzureCredential
을 사용하여 클라이언트 개체를 만드는 방법을 설명합니다.
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
권한 부여
권한 부여 메커니즘에는 Blob을 업로드하는 데 필요한 권한이 있어야 합니다. Microsoft Entra ID로 권한을 부여하려면(권장) Azure RBAC 기본 제공 역할 Storage Blob 데이터 기여자 이상이 필요합니다. 자세한 내용은 Blob 배치(REST API) 및 블록 배치(REST API)에 대한 권한 부여 지침을 참조하세요.
블록 Blob에 데이터 업로드
Blob을 업로드하려면 클라이언트 개체에서 다음 메서드를 호출합니다.
업로드를 수행하기 위해 클라이언트 라이브러리는 Blob 배치를 사용하거나, Put Block List
가 따라오는 일련의 블록 배치 호출을 사용할 수 있습니다. 이 동작은 개체의 전체 크기와 데이터 전송 옵션을 설정한 방법에 따라 달라집니다.
로컬 파일 경로에서 블록 Blob 업로드
다음 예제에서는 블록 Blob에 로컬 파일을 업로드합니다.
func uploadBlobFile(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the file to the specified container with the specified blob name
_, err = client.UploadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
스트림에서 블록 Blob 업로드
다음 예제에서는 Reader
인스턴스를 만들고 문자열에서 바이트 스트림인 것처럼 읽습니다. 그러면 스트림이 블록 Blob에 업로드됩니다.
func uploadBlobStream(client *azblob.Client, containerName string, blobName string) {
data := "Hello, world!"
blobContentReader := strings.NewReader(data)
// Upload the file to the specified container with the specified blob name
_, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, nil)
handleError(err)
}
이진 데이터를 블록 Blob에 업로드
다음 예제에서는 블록 Blob에 이진 데이터를 업로드합니다.
func uploadBlobBuffer(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, nil)
handleError(err)
}
인덱스 태그를 사용하여 블록 Blob 업로드
다음 예제에서는 인덱스 태그가 있는 블록 Blob을 업로드합니다.
func uploadBlobWithIndexTags(client *azblob.Client, containerName string, blobName string) {
// Create a buffer with the content of the file to upload
data := []byte("Hello, world!")
// Upload the data to a block blob with index tags
_, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, &azblob.UploadBufferOptions{
Tags: map[string]string{
"key1": "value1",
"key2": "value2",
},
})
handleError(err)
}
구성 옵션을 사용하여 블록 Blob 업로드
Blob을 업로드할 때 클라이언트 라이브러리 구성 옵션을 정의할 수 있습니다. 이러한 옵션을 조정하여 성능을 개선하고 안정성을 향상시키고 비용을 최적화할 수 있습니다. 다음 코드 예제에서는 업로드 작업에 대한 구성 옵션을 정의하는 방법을 보여줍니다.
업로드를 위한 데이터 전송 옵션 지정
성능을 최적화하기 위해 Blob을 업로드할 때 구성 옵션을 설정할 수 있습니다. 업로드 작업에 사용할 수 있는 구성 옵션은 다음과 같습니다.
BlockSize
: 블록 Blob을 업로드할 때 각 블록의 크기입니다. 기본값은 4MB입니다.Concurrency
: 업로드하는 동안 사용할 최대 병렬 연결 수입니다. 기본 값은 5입니다.
이러한 구성 옵션은 다음 방법을 사용하여 업로드할 때 사용할 수 있습니다.
Upload 메서드는 이러한 옵션을 지원하지 않으며 단일 요청으로 데이터를 업로드합니다.
Blob Storage 전송 크기 제한에 대한 자세한 내용은 의 스케일링 대상을 참조하세요.
다음 코드 예제에서는 UploadFileOptions를 사용하여 데이터 전송 옵션을 지정하는 방법을 보여줍니다. 이 샘플에 제공된 값은 권장 사항이 아닙니다. 이러한 값을 올바르게 조정하려면 앱의 특정 요구 사항을 고려해야 합니다.
func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Open the file for reading
file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
handleError(err)
defer file.Close()
// Upload the data to a block blob with transfer options
_, err = client.UploadFile(context.TODO(), containerName, blobName, file,
&azblob.UploadFileOptions{
BlockSize: int64(4 * 1024 * 1024), // 4 MiB
Concurrency: uint16(2),
})
handleError(err)
}
데이터 전송 옵션 튜닝에 대한 자세한 내용은 Go를 사용하여 업로드 및 다운로드에 대한 성능 조정을 참조 하세요.
참고 항목
이 가이드의 코드 샘플은 Azure Blob Storage 및 Go를 시작하는 데 도움을 주기 위한 것입니다. 애플리케이션의 요구 사항에 맞게 오류 처리 및 Context
값을 수정해야 합니다.
리소스
Go용 Azure Blob Storage 클라이언트 모듈을 사용하여 Blob을 업로드하는 방법에 관해 자세히 알아보려면 다음 리소스를 참조하세요.
샘플 코드
- 이 문서의 코드 샘플 보기(GitHub)
REST API 작업
Go용 Azure SDK에는 Azure REST API를 기반으로 빌드되는 라이브러리가 포함되어 있어 익숙한 Go 패러다임을 통해 REST API 작업과 상호 작용할 수 있습니다. Blob을 업로드하기 위한 클라이언트 라이브러리 메서드는 다음 REST API 작업을 사용합니다.
클라이언트 모듈 리소스
참고 항목
관련 콘텐츠
- 이 문서는 Go용 Blob Storage 개발자 가이드의 일부입니다. 자세한 내용은 Go 앱 빌드에서 개발자 가이드 문서의 전체 목록을 참조하세요.