gRPC는 Google에서 개발한 고성능 오픈소스 범용 RPC 프레임워크로, 프로토콜 버퍼를 사용하여 서비스를 정의하는 데 사용할 수 있습니다. gRPC를 사용하여 Cloud Storage와 상호작용할 수 있습니다. gRPC는 Google 프런트엔드 (GFEs)를 우회하여 Compute Engine과 Cloud Storage 버킷 간의 직접 연결을 활용합니다.
gRPC를 직접 사용하여 Cloud Storage에 연결하는 것은 지원되지 않지만 다음과 같이 지원되는 클라이언트를 통해 gRPC를 사용하여 Cloud Storage에 연결할 수 있습니다.
- Dataproc의 Cloud Storage 커넥터
- 읽기 및 쓰기 요청을 위한 Dataflow의 Apache Beam I/O 커넥터
- Cloud Storage C++, Go, Java 클라이언트 라이브러리 이러한 클라이언트 라이브러리에 gRPC를 사용 설정하는 방법은 클라이언트 라이브러리에서 gRPC 사용 설정을 참고하세요.
클라이언트 라이브러리에서 gRPC 사용 설정
C++
시작하기 전에
다음 버전이 설치되어 있는지 확인합니다.
- gRPC 버전 1.65.1 이상
- C++ 클라이언트 라이브러리 버전 v2.30.0 이상
- C++ 버전 14 이상
설치 안내는 C++ 개발 환경 설정을 참고하세요.
C++ 클라이언트 라이브러리 구성
gcs::MakeGrpcClient()
를 사용하여 gRPC 클라이언트를 만듭니다.namespace gcs = google::cloud::storage; void App() { auto client = gcs::MakeGrpcClient(); // application code }
C++ 클라이언트 라이브러리는 애플리케이션이 Google Cloud에서 실행 중임을 감지하면 자동으로 직접 연결을 사용합니다.
gRPC를 사용하도록 C++ 클라이언트 라이브러리를 구성하려면 Cloud Storage gRPC 클라이언트를 사용 설정하여
CMake
및Bazel
의 빌드 시스템 구성을 업데이트합니다.CMake
컴파일 시 Cloud Storage gRPC 클라이언트 플러그인 사용 설정
cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
코드베이스에서
target_link_libraries()
명령어의google-cloud-cpp::storage
를google-cloud-cpp::storage_grpc
로 바꿉니다.예를 들어 gRPC의 빠른 시작 프로그램은 다음 코드를 사용합니다.
add_executable(quickstart_grpc quickstart_grpc.cc) target_link_libraries(quickstart_grpc google-cloud-cpp::storage_grpc)
Bazel
종속 항목을
@google_cloud_cpp//:storage
에서@google_cloud_cpp//:storage_grpc
로 바꿉니다.예를 들어 gRPC의 빠른 시작 프로그램은 다음 코드를 사용합니다.
cc_binary( name = "quickstart", srcs = [ "quickstart.cc", ], deps = [ "@com_github_googleapis_google_cloud_cpp//:storage_grpc", ], )
자바
시작하기 전에
다음 버전이 설치되어 있는지 확인합니다.
Java 클라이언트 라이브러리:
com.google.cloud:google-cloud-storage:2.43.1
이상com.google.cloud:libraries-bom:26.48
이상
Java 8 이상
설치 안내는 Java 개발 환경 설정을 참고하세요.
BOM을 사용하도록 프로젝트 업데이트
프로젝트에 호환 가능한 Google Cloud 클라이언트 라이브러리 버전이 있는지 확인하려면 Google Cloud 라이브러리 BOM (Bill of Materials)에 명시된 버전을 사용하세요. BOM을 사용하도록 프로젝트를 업데이트하려면 다음 방법 중 하나를 사용하세요.
독립형 Cloud Storage
다른 Google Cloud 라이브러리 없이 Cloud Storage 클라이언트 라이브러리를 독립적으로 사용하는 경우 Cloud Storage 클라이언트 라이브러리별 BOM을 사용하세요.
Maven
pom.xml
파일의 dependencyManagement
섹션에서 BOM을 가져옵니다.
다음 예는 BOM을 가져오고 google-cloud-storage
아티팩트를 포함하는 방법을 보여줍니다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage-bom</artifactId>
<version>2.43.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
</dependencies>
Gradle
com.google.cloud:google-cloud-storage-bom
에 플랫폼 종속 항목을 추가합니다.
implementation platform('com.google.cloud:google-cloud-storage-bom:2.43.1')
implementation 'com.google.cloud:google-cloud-storage'
다른 Google Cloud 라이브러리를 갖춘 Cloud Storage
Cloud Storage 클라이언트 라이브러리를 다른 Google Cloud 라이브러리와 함께 사용하는 경우 Google Cloud 클라이언트 라이브러리 BOM을 사용하세요.
Maven
pom.xml
파일의 dependencyManagement
섹션에서 BOM을 가져옵니다.
다음 예는 BOM을 가져오고 libraries-bom
아티팩트를 포함하는 방법을 보여줍니다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.48.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
</dependency>
</dependencies>
Gradle
com.google.cloud:libraries-bom
에 플랫폼 종속 항목을 추가합니다.
implementation platform('com.google.cloud:libraries-bom:26.48.0')
implementation 'com.google.cloud:google-cloud-storage'
gRPC 클라이언트 만들기
다음 샘플에서는 gRPC 중심 빌더를 사용합니다. gRPC Java 클라이언트는 애플리케이션이 Google Cloud에서 실행 중임을 감지하면 자동으로 직접 연결을 사용합니다.
Go
시작하기 전에
Cloud Storage Go 클라이언트 라이브러리 버전 1.46.0 이상을 사용해야 합니다.
gRPC 클라이언트 만들기
클라이언트를 사용하려면 애플리케이션에서 NewClient
대신 NewGRPCClient
생성자를 호출해야 합니다.
import (
"context"
"fmt"
"log"
"time"
"cloud.google.com/go/storage"
)
func main() {
ctx := context.Background()
// The project ID and bucket name
projectID := "project-id"
bucketName := "bucket-name"
// Creates a gRPC enabled client.
client, err := storage.NewGRPCClient(ctx)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
defer client.Close()
// Creates the new bucket.
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
if err := client.Bucket(*bucketName).Create(ctx, *projectID, nil); err != nil {
log.Fatalf("Failed to create bucket: %v", err)
}
fmt.Printf("Bucket %v created.\n", *bucketName)
}
Go 클라이언트 라이브러리는 애플리케이션이 Google Cloud에서 실행 중임을 감지하면 자동으로 직접 연결을 사용합니다.
gRPC 클라이언트를 사용하는 방법에 관한 자세한 내용은 gRPC API를 참고하세요.
VPC 서비스 제어를 구성합니다.
네트워크 보안을 강화하기 위해 제한된 가상 IP 주소 ( VPC 서비스 제어)가 있는 Virtual Private Cloud를 사용하는 경우 Compute Engine 가상 머신 인스턴스와 Cloud Storage 간에 최적의 성능을 위해 직접 연결을 사용 설정하도록 방화벽 규칙을 업데이트해야 합니다.
이렇게 하려면 다음 CIDR 블록의 모든 포트에서 트래픽을 허용하는 허용 목록 방화벽 규칙을 추가합니다.
- IPv4 트래픽:
34.126.0.0/18
- IPv6 트래픽:
2001:4860:8040::/42
위의 규칙 외에도 199.36.153.4/30
의 기존 허용 목록 규칙을 유지합니다.
방화벽 규칙 수정에 제한사항이 있고 이를 업데이트할 수 없는 경우 google-c2p://storage.googleapis.com
대신 storage.googleapis.com
를 Cloud Storage 엔드포인트로 사용하여 트래픽이 직접 연결을 피하도록 강제할 수 있습니다.
예를 들어 C++의 경우 google-c2p:///storage.googleapis.com
대신 .set<google::cloud::EndpointOption>(storage.googleapis.com)
를 사용합니다.
gRPC 관련 요청의 관측 가능성 사용 설정
Cloud Storage 클라이언트 라이브러리를 구성하여 Cloud Monitoring에서 gRPC 관련 측정항목을 생성할 수 있습니다. gRPC 관련 측정항목을 사용하면 다음을 수행할 수 있습니다.
Cloud Storage에 대한 gRPC 요청의 성능을 모니터링하고 최적화합니다.
문제 해결 및 디버깅
애플리케이션의 사용 및 동작에 대한 유용한 정보를 파악합니다.
gRPC 관련 측정항목을 생성하는 방법에 관한 자세한 내용은 클라이언트 측 측정항목 사용을 참고하세요.
사용 사례에 측정항목 수집이 필요하지 않은 경우 측정항목 수집을 선택 해제할 수 있습니다. 자세한 내용은 클라이언트 측 측정항목 선택 해제를 참고하세요.
제한사항
기존 네트워크를 통해 IPv6 요청을 전송할 수 없습니다.
gRPC를 사용하여 Cloud Storage에 연결하면 컴퓨팅 VM과 Cloud Storage 버킷이 동일한 리전에 있는 경우에만 Google Cloud에서 실행되는 분석 워크로드의 읽기 성능이 개선될 것으로 예상됩니다. 멀티 리전 및 이중 리전의 버킷에는 gRPC를 사용하지 않는 것이 좋습니다.
IPv4 전용 클러스터에서 다음 GKE 버전을 사용하는 경우 직접 연결이 지원되지 않습니다.
- 1.28, 1.28.0-gke.100 이상(1.28.5-gke.1199000까지)
- 1.27, 1.27.4-gke.1900 이상
- 1.26, 1.26.10-gke.1238000 이상
- 1.25, 1.25.15-gke.1045000 이상
gRPC는 notifications, hmacKeys, serviceAccount 메서드를 지원하지 않습니다.
WithHTTPClient와 같은 HTTP별 클라이언트 생성자 옵션은 Go 클라이언트 라이브러리에서 지원되지 않습니다.