시뮬레이션된 폴더

이 페이지에서는 Cloud Storage의 폴더를 간략히 설명합니다.

폴더 개요

관리 폴더를 제외하고 Cloud Storage는 단일 구조 네임스페이스로 작동합니다. 즉, 실제로 폴더가 Cloud Storage 내에 있지 않습니다. your-bucket 버킷에 folder1/file.txt라는 객체를 만들 때 객체 경로는 your-bucket/folder1/file.txt이지만, folder1이라는 폴더가 없습니다. 대신 folder1 문자열이 객체 이름의 일부입니다.

하지만 Google Cloud 콘솔과 Cloud Storage CLI는 계층적 파일 트리의 일종을 제공합니다.

  • Google Cloud 콘솔은 로컬 파일 브라우저와 유사하게 폴더를 시각적으로 표현합니다.

  • Cloud Storage CLI는 다양한 규칙을 사용하여 일반적인 명령줄 디렉터리 환경을 시뮬레이션합니다.

/storage/images/folders.svg

도구

다음 탭을 클릭하여 각 도구가 폴더를 처리하는 방식을 확인합니다.

콘솔

Google Cloud 콘솔에서 버킷에 빈 폴더를 만들거나 기존 폴더를 업로드할 수 있습니다.

기존 폴더를 업로드하면 폴더 이름이 폴더에 포함된 모든 객체의 경로에 포함됩니다. 모든 하위 폴더 및 하위 폴더에 포함된 객체도 업로드에 포함됩니다.

폴더를 만드는 방법은 다음과 같습니다.

  1. Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.

    버킷으로 이동

  2. 버킷으로 이동합니다.

  3. 폴더 만들기를 클릭하여 비어 있는 새 폴더를 만들거나 폴더 업로드를 클릭하여 기존 폴더를 업로드합니다.

명령줄

계층적 파일 트리를 갖춘 것 같은 효과를 내기 위해 gcloud storagegsutil 명령어는 다음 규칙을 적용하여 명령어의 대상 URL을 객체 이름으로 취급할지 또는 폴더로 취급할지 여부를 결정합니다.

  1. 대상 URL이 / 문자로 끝나면 CLI 명령어는 대상 URL을 폴더로 처리합니다. 예를 들어 다음 명령어를 가정해 보겠습니다. 여기서 your-file은 파일 이름입니다.

    gcloud storage cp your-file gs://your-bucket/abc/

    이 명령어의 결과로 Cloud Storage는 your-bucket 버킷에 abc/your-file이라는 객체를 만듭니다.

  2. 소스 파일 여러 개를 대상 URL 한 개에 복사하면 CLI에서 대상 URL을 폴더로 처리합니다. 예를 들어 다음 명령어를 가정해 보겠습니다. 여기서 your-dirfile1file2와 같은 파일이 포함된 폴더입니다.

    gcloud storage cp your-dir gs://your-bucket/abc --recursive

    이 명령어의 결과로 Cloud Storage는 your-bucket 버킷에서 abc/your-dir/file1abc/your-dir/file2 객체를 만듭니다.

  3. 위 규칙 중 어느 규칙도 적용되지 않으면 CLI가 버킷의 객체를 검사하여 대상 URL이 객체 이름인지 폴더인지 확인합니다. 예를 들어 다음 명령어를 가정해 보겠습니다. 여기서 your-file은 파일 이름입니다.

    gcloud storage cp your-file gs://your-bucket/abc

    CLI는 경로가 abc/로 시작하는 your-bucket에 객체가 있는지 확인하기 위해 / 구분 기호와 프리픽스=abc를 사용하여 your-bucket에 객체 나열 요청을 수행합니다. 이런 경우 CLI는 abc/를 폴더 이름으로 취급하고 위의 명령어는 your-bucket 버킷에 abc/your-file 객체를 만듭니다. 그렇지 않으면 CLI가 your-bucketabc 객체를 만듭니다.

이 규칙 기반 접근 방식은 폴더 존재를 표시하기 위해 0바이트 객체를 만드는 많은 도구 작동 방식과 다릅니다. Cloud Storage CLI는 0바이트 객체 이름 끝에 _$folder$을 추가하는 규칙과 같이 이러한 도구에서 사용되는 여러 규칙을 이해하지만 CLI에는 필요하지 않습니다. 이러한 마커 객체를 사용하여 UNIX 명령어와 일치하는 이름 지정 동작을 구현할 수 있습니다.

재시도 및 이름 지정

Cloud Storage CLI가 중단된 요청을 재시도할 때 첫 번째 시도에서 파일의 하위 집합을 복사하면 이후 시도에 이미 존재하는 대상 폴더가 발생하고 이로 인해 객체 이름이 잘못 지정되는 문제가 생길 수 있습니다.

예를 들어 your-dir/ 아래에 dir1dir2와 같은 하위 폴더가 있고 두 하위 폴더에 abc 파일이 포함되어 있다고 가정해 보겠습니다.

gcloud storage cp ./your-dir gs://your-bucket/new --recursive

gs://your-bucket/new 경로가 아직 없으면 CLI가 첫 번째 성공적인 시도에서 다음 객체를 만듭니다.

new/dir1/abc
new/dir2/abc

하지만 다음 명령어를 성공적으로 시도하면 CLI에서 다음 객체를 만듭니다.

new/your-dir/dir1/abc
new/your-dir/dir2/abc

모든 시도에서 CLI가 일관되게 작동하도록 하려면 다음을 시도해 보세요.

  1. 대상 URL 끝에 슬래시를 추가하여 CLI에서 항상 폴더로 처리하도록 합니다.

  2. gcloud storage rsync 또는 gsutil rsync를 사용합니다. rsync는 Unix cp 정의 폴더 이름 지정 규칙을 사용하지 않으므로 대상 하위 폴더 존재 여부에 관계없이 일관되게 작동합니다.

이름 구성 방법에 대한 자세한 내용은 cp를 사용하여 이름 구성을 참조하세요.

기타 참고사항

  • Cloud Storage CLI를 사용하여 빈 폴더를 모방하도록 0바이트 객체를 만들 수 없습니다.

  • 스크립트를 사용하여 하위 경로를 결합하여 파일 경로를 만드는 경우 /는 객체 이름에 발생하는 문자이므로 CLI는 gs://my-bucket/folder/gs://my-bucket//folder에 있는 다른 객체로 해석합니다.

REST API

JSON API

폴더는 JSON API에 존재하지 않습니다. 나열하는 객체의 범위를 좁히려면 prefixdelimiter 쿼리 매개변수를 사용합니다.

예를 들어 프리픽스 folder/subfolder/가 있는 my-bucket 버킷의 모든 객체를 나열하려면 다음 URL을 사용하여 객체 나열 요청을 보냅니다.

"https://storage.googleapis.com/storage/v1/b/my-bucket/o?prefix=folder/subfolder/"

XML API

폴더는 XML API에 없지만 prefixdelimiter 쿼리 매개변수를 사용하여 나열하는 객체를 좁힐 수 있습니다.

예를 들어 프리픽스 folder/subfolder/가 있는 my-bucket 버킷의 모든 객체를 나열하려면 다음 URL을 사용하여 객체 나열 요청을 보냅니다.

"https://storage.googleapis.com/my-bucket?prefix=folder/subfolder/"

다음 단계