파일에 대한 공개 액세스 제공

일반적으로는 웹을 통해 파일 액세스를 공개할 수 있습니다. 이 작업은 PHP 5 표준 환경에서 다음 방법으로 수행할 수 있습니다.

  • 스크립트를 사용하여 Google Cloud Storage에 파일 제공: 앱이 파일을 제공합니다.
  • 파일을 직접 제공하여 Google Cloud Storage에서 파일을 제공합니다.
  • app.yaml에서 정적 핸들러를 사용하여 앱을 통해 업로드된 파일을 제공합니다.

마지막 방법에는 Cloud Storage가 사용되지 않습니다.

스크립트에서 파일 제공

앱에서 파일을 제공하려면 App Engine CloudStorageTools 클래스를 가져옵니다.

use google\appengine\api\cloud_storage\CloudStorageTools;

이제 CloudStorageTools::serve를 사용해서 Google Cloud Storage에서 파일을 제공합니다.

CloudStorageTools::serve("gs://${my_bucket}/serve.txt");

이 방식으로 앱에서 파일을 제공하면 개발자가 사용자 ID를 확인하고 허가된 사용자만 파일에 액세스하도록 보장할 수 있습니다. 이 방식의 단점은 파일 제공을 위해 애플리케이션이 이 코드를 실행해야 하기 때문에 인스턴스 시간이 소비되고 그로 인한 비용이 발생하는 것입니다.

Google Cloud Storage에서 직접 파일 제공

위 설명처럼 HTTP를 통해 Cloud Storage에서 파일을 직접 제공하면 앱에서 파일을 제공하는 것보다 속도와 경제성이 높아집니다. 파일을 기록할 때는 익명 사용자가 읽을 수 있도록 파일을 구성해야 합니다. 아래 스니펫에서 볼 수 있듯이 acl 스트림 옵션을 public-read로 설정합니다.

파일이 공개적으로 읽을 수 있도록 Cloud Storage에 작성되면 CloudStorageTools::getPublicUrl을 사용하여 파일의 공개 URL을 구해야 합니다.

다음 예시에서는 일부 난수가 포함된 공개적으로 읽을 수 있는 파일을 만들고 이를 Cloud Storage 버킷에 기록하며 Cloud Storage에서 해당 파일로 리디렉션합니다.

$options = ['gs' => ['acl' => 'public-read']];
$context = stream_context_create($options);
$fileName = "gs://${my_bucket}/public_file.txt";
file_put_contents($fileName, $publicFileText, 0, $context);

$publicUrl = CloudStorageTools::getPublicUrl($fileName, false);

이 방식의 단점은 파일을 누구나 읽을 수 있기 때문에 파일에 액세스할 수 있는 사람을 제어할 수 없다는 점입니다.

앱을 사용하여 업로드된 파일 제공

파일을 읽고 쓰는 다른 방법이 있나요?에서 이 옵션을 자세하게 설명합니다.