콘솔로 이동

Google Cloud Platform과 통합

Firebase용 Cloud Storage는 Google Cloud Platform과 긴밀하게 통합되어 있습니다. Cloud Storage용 Firebase SDK는 Google Cloud Storage 버킷에 직접 파일을 저장하므로 앱의 성장에 따라 App Engine, Cloud 함수와 같은 관리형 컴퓨팅 또는 Cloud Vision, Google 번역과 같은 기계 학습 API 등의 기타 Cloud 서비스를 손쉽게 통합할 수 있습니다.

Cloud Storage용 Firebase SDK는 Google App Engine 무료 등급의 기본 버킷을 사용합니다. 따라서 신용카드를 등록하거나 결제 계정을 사용 설정할 필요없이 Cloud Storage를 바로 사용할 수 있습니다. 또한 Firebase와 Google Cloud Platform 프로젝트 간에 손쉽게 데이터를 공유할 수 있습니다.

기존 Cloud Storage 버킷 가져오기를 포함하여 Google Cloud Platform과 통합하려면 Firebase 프로젝트에서 Blaze 요금제를 사용해야 합니다. 요금제에 관한 자세한 내용은 가격 책정 페이지를 참조하세요.

Google Cloud Storage

Google Cloud Storage API를 사용하여 Cloud Storage용 Firebase SDK를 통해 업로드된 파일에 액세스할 수 있으며 파일 복사나 이동, 참조 위치에서 사용 가능한 모든 파일 나열과 같은 복잡한 작업도 수행할 수 있습니다.

이러한 요청에서는 Firebase 인증 및 저장소 보안 규칙이 아닌 Google Cloud Storage 액세스 제어 옵션을 사용한다는 점에 주의하세요.

API

Cloud Storage용 Firebase SDK 이외에도 하려는 작업에 따라 다른 방법으로 Cloud Storage 버킷에 저장된 데이터에 액세스할 수 있습니다. 서버에서 데이터에 액세스하려면 서버측 라이브러리와 함께 JSON 및 S3 호환 XML RESTful API가 제공되며, 변경을 스크립트로 작성하거나 기타 관리 작업을 수행해야 하는 경우 편리하게 사용할 수 있는 명령줄 도구를 제공합니다.

Google Cloud 서버 SDK

Google Cloud Platform은 Cloud Storage를 비롯한 여러 GCP 제품에 대해 고품질 서버 SDK를 제공합니다. 이러한 라이브러리는 Node.js, 자바, Go, Python, PHP, Ruby로 제공됩니다. 설치 안내, 인증, 문제해결 등의 자세한 내용은 링크된 플랫폼별 문서를 참조하세요.

다음은 Google Cloud SDK의 사용 예입니다.

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

자바

    // Enable Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

Go

    // Enable Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

Ruby

    # Require gcloud
    require "google/cloud"

    # Enable Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

REST API

클라이언트 라이브러리가 없는 언어를 사용하거나, 클라이언트 라이브러리가 제공하지 않는 기능을 수행해야 하거나, 특정한 HTTP 클라이언트를 사용하고 싶은 경우 Cloud Storage가 제공하는 JSONXML API를 사용할 수 있습니다.

gsutil

gsutil은 Cloud Storage에 직접 액세스할 수 있는 명령줄 도구입니다. gsutil로 다음을 비롯하여 광범위한 버킷 및 객체 관리 작업을 수행할 수 있습니다.

  • 객체 업로드, 다운로드, 삭제
  • 버킷 및 객체 나열
  • 객체 이동, 복사 및 이름 바꾸기
  • 객체 및 버킷 ACL 수정

gsutil은 디렉토리 간 파일 이동, 특정 위치 아래의 모든 파일 삭제와 같은 고급 기능도 지원합니다.

다음과 같이 한 참조의 모든 파일을 다른 참조로 손쉽게 이동할 수 있습니다.

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

참조 위치 아래의 모든 파일을 일괄 삭제하는 방법도 매우 간단합니다.

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

객체 버전 관리

백업해 두지 않은 항목을 실수로 삭제한 적이 있으신가요? Cloud Storage 객체 버전 관리는 데이터를 자동으로 백업하고 복원하는 기능을 제공합니다. gsutil versioning set 명령을 사용하여 객체 버전 관리를 사용 설정할 수 있습니다.

gsutil versioning set on gs://<your-cloud-storage-bucket>

Firebase 저장소는 항상 가장 최근 버전을 선택하므로 객체를 복원하려는 경우 위 API 또는 도구 중 하나를 사용하여 원하는 객체를 가장 최근 객체로 설정해야 합니다.

객체 수명 주기 관리

비활성 파일을 자동으로 보관 처리하거나 삭제하는 기능은 여러 애플리케이션에서 매우 유용합니다. Cloud Storage가 제공하는 객체 수명 주기 관리로 특정 시간이 지난 객체를 삭제하거나 보관 처리할 수 있습니다.

사진 공유 애플리케이션에서 모든 사진을 하루 이내에 삭제해야 한다고 가정해 보겠습니다. 객체 수명 주기 정책을 아래와 같이 설정하면 됩니다.

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

그런 다음 gsutil lifecycle set 명령으로 정책을 배포합니다.

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

이 정책은 버킷의 모든 파일에 적용되므로 장기간 저장하려는 중요한 사용자 백업을 하루 만에 삭제하려는 사진과 함께 저장하는 경우 별도의 두 버킷을 사용하거나, gsutil에서 수동으로 삭제하거나, 자체 서버를 사용해야 합니다.

Google App Engine

Google App Engine은 백엔드 로직을 수신 트래픽의 양에 비례하여 자동으로 확장하는 '서비스로서의 플랫폼'(PaaS)입니다. 백엔드 코드만 업로드하면 Google에서 앱의 가용성을 관리해 주므로 개발자는 별도의 서버를 구축하거나 유지할 필요가 없습니다. App Engine은 빠르고 간편하게 Firebase 애플리케이션의 처리 능력을 높이거나 안정적인 실행을 보장하는 수단입니다.

Cloud Storage용 Firebase SDK는 Google App Engine 기본 버킷을 사용하므로, App Engine 앱을 빌드하는 경우 기본 제공되는 App Engine API를 사용하여 Firebase와 App Engine 간에 데이터를 공유할 수 있습니다. 이 방법은 오디오 인코딩, 동영상 트랜스코딩, 이미지 변환 등 막대한 연산 능력이 필요한 백그라운드 처리를 수행할 때 유용합니다.

Google App Engine을 위한 자바, Python, Go 표준 환경에 포함된 GAE Images API(자바, Python, Go)를 사용하여 이미지 크기 조절, 회전, 뒤집기, 자르기 등을 수행하고 Cloudinary 및 Imgix와 유사하게 클라이언트 측 변환을 허용하는 이미지 제공 URL을 반환할 수 있습니다.

Firebase에 기존 Google Cloud Platform 프로젝트를 가져올 때 기존 App Engine 객체를 Firebase에서 사용 가능하게 만들려면 gsutil에서 다음 명령을 실행하여 객체에 기본 액세스 제어를 설정하고 Firebase의 액세스를 허용해야 합니다.

gsutil -m acl ch -r -u firebase-storage@system.gserviceaccount.com:O gs://<your-cloud-storage-bucket>

알려진 문제

GAE 앱을 가져올 수 없는 두 가지 경우가 알려져 있습니다.

  1. 프로젝트에 기존의 App Engine Datastore 마스터/슬레이브 앱이 포함된 경우
  2. 프로젝트의 ID에 도메인 접두사가 포함된 경우. 예: domain.com:project-1234

이러한 두 가지 경우에 프로젝트는 Firebase용 Cloud Storage를 지원하지 않으므로 Cloud Storage를 사용하려면 Firebase 프로젝트를 새로 만들어야 합니다. 도움이 필요한 경우 지원팀에 문의하시기 바랍니다.

Google Cloud 함수(베타)

Google Cloud 함수는 이벤트 기반의 가벼운 비동기 컴퓨팅 솔루션으로, 서버나 런타임 환경을 관리할 필요없이 이벤트에 응답하는 것이 유일한 목적인 소형 함수를 만들 수 있습니다. 동영상 트랜스코딩, 기계 학습을 사용한 이미지 분류, Firebase 실시간 데이터베이스와의 메타데이터 동기화 등의 작업에 이러한 함수를 사용할 수 있습니다. Cloud 함수는 Google App Engine보다 오버헤드가 훨씬 낮으므로 Firebase 저장소의 변경에 반응하는 가장 빠른 방법입니다.

Google Cloud Vision API

개발자는 강력한 기계 학습 모델을 사용하기 쉬운 API로 통합한 Google Cloud Vision API를 사용하여 이미지의 내용을 파악할 수 있습니다. 이 API는 이미지를 수천 가지 카테고리로 빠르게 분류하고, 이미지 안의 개별 물체와 얼굴을 감지하고, 이미지에 포함된 글자를 찾아서 판독하고, 부적절한 콘텐츠를 식별하고, 이미지 감정 분석도 제공합니다.

Google Cloud Speech API

Google Cloud Speech API는 Vision API와 비슷하게 개발자에게 Cloud Storage에 저장된 오디오 파일에서 텍스트를 추출하는 기능을 제공합니다. 이 API는 글로벌 사용자층에 대응하여 80가지 이상의 언어와 방언을 인식합니다. 이 API를 Google Cloud Natural Language API와 결합하면 원시 텍스트를 추출하는 동시에 텍스트의 의미를 추론할 수 있습니다. 또한 전 세계 잠재고객에 대응하려는 경우 Google Translate API를 활용하여 텍스트를 90개 이상의 언어로 번역할 수 있습니다.