gRPC를 사용하여 Cloud Storage에 연결

gRPC는 Google에서 개발한 고성능 오픈소스 범용 RPC 프레임워크로, 프로토콜 버퍼를 사용하여 서비스를 정의하는 데 사용할 수 있습니다. gRPC를 사용하여 Cloud Storage와 상호작용할 수 있습니다. gRPC는 Google 프런트엔드 (GFEs)를 우회하여 Compute Engine과 Cloud Storage 버킷 간의 직접 연결을 활용합니다.

gRPC를 직접 사용하여 Cloud Storage에 연결하는 것은 지원되지 않지만 다음과 같이 지원되는 클라이언트를 통해 gRPC를 사용하여 Cloud Storage에 연결할 수 있습니다.

클라이언트 라이브러리에서 gRPC 사용 설정

C++

시작하기 전에

  1. 다음 버전이 설치되어 있는지 확인합니다.

    • gRPC 버전 1.65.1 이상
    • C++ 클라이언트 라이브러리 버전 v2.30.0 이상
    • C++ 버전 14 이상

    설치 안내는 C++ 개발 환경 설정을 참고하세요.

  2. 인증 설정

C++ 클라이언트 라이브러리 구성

  1. gcs::MakeGrpcClient()를 사용하여 gRPC 클라이언트를 만듭니다.

      namespace gcs = google::cloud::storage;
      void App() {
       auto client = gcs::MakeGrpcClient();
    
      // application code
    
      }
    

    C++ 클라이언트 라이브러리는 애플리케이션이 Google Cloud에서 실행 중임을 감지하면 자동으로 직접 연결을 사용합니다.

  2. gRPC를 사용하도록 C++ 클라이언트 라이브러리를 구성하려면 Cloud Storage gRPC 클라이언트를 사용 설정하여 CMakeBazel의 빌드 시스템 구성을 업데이트합니다.

    CMake

    1. 컴파일 시 Cloud Storage gRPC 클라이언트 플러그인 사용 설정

      cmake -DGOOGLE_CLOUD_CPP_ENABLE=storage_grpc [other options here]
      
    2. 코드베이스에서 target_link_libraries() 명령어의 google-cloud-cpp::storagegoogle-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",
          ],
      )
    

자바

시작하기 전에

  1. 다음 버전이 설치되어 있는지 확인합니다.

    • Java 클라이언트 라이브러리:

      • com.google.cloud:google-cloud-storage:2.43.1 이상
      • com.google.cloud:libraries-bom:26.48 이상
    • Java 8 이상

    설치 안내는 Java 개발 환경 설정을 참고하세요.

  2. 인증 설정

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에서 실행 중임을 감지하면 자동으로 직접 연결을 사용합니다.

// Imports the Google Cloud client library
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class QuickstartGrpcSample {
  public static void main(String... args) throws Exception {

    // Create an instance of options which will use the Google Cloud Storage gRPC API for all
    // operations
    StorageOptions options = StorageOptions.grpc().build();

    // Instantiates a client in a try-with-resource to automatically cleanup underlying resources
    try (Storage storage = options.getService()) {
      // The name for the new bucket
      String bucketName = args[0]; // "my-new-bucket";

      // Creates the new bucket using a request to the gRPC API
      Bucket bucket = storage.create(BucketInfo.of(bucketName));

      System.out.printf("Bucket %s created.%n", bucket.getName());
    }
  }
}

Go

시작하기 전에

  1. 개발 환경을 설정합니다.

  2. Cloud Storage Go 클라이언트 라이브러리 버전 1.46.0 이상을 사용해야 합니다.

  3. 인증 설정

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)를 사용합니다.

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 클라이언트 라이브러리에서 지원되지 않습니다.

다음 단계