Cloud Storage 실전 — 버킷 만들기부터 공개 설정·수명 주기까지

이 글은 「GCP 기초」 연재의 다섯 번째 글이자 2단계의 첫 글이다. 1단계에서 계정·비용·권한이라는 바닥을 깔았으니 이제 그 위에 서비스를 올린다. 첫 순서를 Cloud Storage로 잡은 이유는 단순하다. 어떤 프로젝트든 파일 둘 곳이 필요하고, 초보자가 가장 크게 사고를 내는 자리도 여기다. 이 글을 다 읽으면 버킷을 만들고, 공개 범위를 의도한 만큼만 열고, 안 쓰는 파일을 자동으로 치울 수 있다.

버킷과 객체 — 이름은 전 세계에 하나

버킷과 객체, 그리고 이름 전쟁

구조는 두 층뿐이다. 버킷이 그릇이고 객체가 그 안의 파일이다. 폴더처럼 보이는 images/2026/photo.jpg도 사실은 폴더가 아니라 객체 이름 전체다.

첫 관문은 이름이다. 버킷 이름은 내 프로젝트 안이 아니라 전 세계에서 유일해야 한다. backup 같은 이름이 안 된다고 나오는 것은 지구 어딘가에서 누가 쓰고 있다는 뜻이다.

가장 편한 해법은 프로젝트 ID를 접두어로 붙이는 것이다. your-project-id-assets 같은 이름은 거의 비어 있다. 그리고 버킷 이름도 만든 뒤에는 못 바꾼다.

버킷 만들기 화면
버킷 만들기. 위치와 스토리지 클래스를 고르면 오른쪽에 GB당 단가가 바로 표시된다

리전과 클래스는 만들 때 정해진다

위치는 단일·이중·멀티 리전 중에 고른다. 실습이면 단일 리전이다. 함정이 있는데, Cloud Storage의 상시 무료 5GB는 us-west1·us-central1·us-east1 세 리전에서만 적용된다. 서울 리전에 만들어 놓고 왜 요금이 붙느냐고 묻는 경우가 여기다. 무료 한도 전반은 GCP 무료로 어디까지 되나 — 무료 등급과 크레딧 활용법에 정리해 두었다.

스토리지 클래스 — 쌀수록 오래 둬야 한다

스토리지 클래스는 얼마나 자주 꺼내 볼 파일인가로 고른다. 저장 단가는 아래로 갈수록 싸지지만 꺼낼 때 검색 요금이 붙고 최소 보관 기간이 생긴다. 이 최소 기간이 가장 억울한 요금이다. Nearline에 올린 파일을 사흘 만에 지워도 30일치가 청구된다. 정리 주기가 한 달 미만이면 그냥 Standard가 싸다.

올리기 — gsutil은 이제 옛 이름이다

콘솔에서는 파일을 끌어다 놓으면 끝이다. 문제는 명령어인데, 검색하면 아직도 gsutil 예제가 대부분 나온다. 구글은 현재 gcloud storage를 권장 CLI로 안내하고 gsutil은 최소 유지되는 레거시로 분류했다. 앞으로는 gcloud CLI 패키지에 함께 설치되지도 않는다고 예고돼 있으니, 새로 배운다면 gcloud storage만 익히면 된다.

# 버킷 만들기
gcloud storage buckets create gs://your-project-id-assets \
  --location=us-central1 \
  --default-storage-class=STANDARD \
  --uniform-bucket-level-access

# 올리기 · 목록 보기
gcloud storage cp ./report.pdf gs://your-project-id-assets/
gcloud storage ls gs://your-project-id-assets/

공개 설정 — 사고가 나는 자리

버킷을 공개한다는 말은 정확히는 allUsers라는 특수한 주 구성원에게 객체 뷰어 역할을 준다는 뜻이다. GCP IAM 기초 — 서비스 계정과 권한, 최소 권한 원칙에서 본 "누구에게, 무엇을, 어디에서"가 그대로 쓰인다. allUsers는 로그인하지 않은 사람까지 포함하는 인터넷 전체다.

균일한 버킷 수준 액세스를 켜 두면 권한을 버킷 단위 IAM으로만 관리하고 객체마다 붙는 옛 방식(ACL)을 꺼 버린다. 다만 켠 지 90일이 지나면 되돌릴 수 없다.

공개 액세스 방지는 버킷을 만들 때 기본으로 선택돼 있다. 나중에 공개하려면 먼저 이 체크를 풀어야 하고, 풀지 않은 채 allUsers를 추가하면 요청이 거부된다. 막혔다는 건 안전장치가 걸려 있다는 뜻이다.

버킷 권한 화면
버킷 → 권한. "공개 액세스 방지"가 켜져 있으면 allUsers를 추가해도 공개되지 않는다. 공개하려면 이 방지를 먼저 삭제해야 한다
# 버킷 전체를 인터넷에 공개
gcloud storage buckets add-iam-policy-binding gs://your-bucket-name \
  --member=allUsers --role=roles/storage.objectViewer

서명된 URL — 열지 않고 건네는 법

서명된 URL은 특정 객체에 대해 기한이 정해진 주소를 만들어 준다. 받는 사람은 구글 계정이 없어도 되고 기한이 지나면 주소가 죽는다. 유효 기간은 공식 문서 기준 최대 7일이고, 공개 액세스 방지를 켜 둔 버킷에서도 그대로 쓸 수 있다.

gcloud storage sign-url gs://your-bucket-name/report.pdf \
  --duration=1h \
  --impersonate-service-account=your-sa@your-project-id.iam.gserviceaccount.com

수명 주기 규칙 — 알아서 치우게 하기

수명 주기 규칙 — 조건이 맞으면 작업이 돈다

구조는 간단하다. 조건이 전부 맞으면 작업 하나가 실행된다. 많이 쓰는 조합은 둘이다. 로그를 30일 뒤 지우는 규칙, 백업을 30일 뒤 Nearline·365일 뒤 Archive로 내리는 규칙. 반가운 예외가 있는데, 수명 주기 규칙으로 클래스를 바꿀 때는 조기 삭제 요금이 붙지 않는다.

다만 이 규칙은 비동기로 돌아서 조건이 맞는 순간 바로 지워지지는 않는다. 공식 문서는 규칙 변경이 반영되기까지 최대 24시간이 걸릴 수 있다고 안내한다.

수명 주기 규칙 추가
수명 주기 규칙. 클래스 전환과 객체 삭제 중에서 작업을 고르고, 다음 단계에서 조건(경과일 등)을 정한다

비용이 새는 네 곳

새는 곳무슨 일이막는 법
조기 삭제최소 기간 전에 지워도 청구된다짧게 쓸 파일은 Standard에
이그레스버킷에서 인터넷으로 나가는 양에 과금된다공개 버킷에 큰 파일 금지
작업 횟수업로드·목록 조회도 건수로 과금동기화를 자주 돌리지 않기
버전 관리지운 파일의 옛 버전이 계속 저장된다버전 개수 조건으로 규칙 걸기

상시 무료 한도는 세 리전 합산 월 5GB 저장과 일정 횟수의 작업, 북미 이그레스 100GB 정도다. 공개 버킷에 동영상을 두면 순식간에 넘어간다. 막는 방법은 GCP 요금 폭탄 막는 법 — 예산 알림·할당량·비용 통제에 있다.

마무리

버킷 이름은 전 세계에서 하나뿐이고 못 바꾼다. 공개는 allUsers에게 역할을 주는 IAM 작업이며, 대부분은 공개 대신 서명된 URL이 답이다.

지금 할 일 하나만 고르라면, 버킷 권한 탭을 열어 allUsers가 있는지 확인하는 것이다.

다음 편에서는 파일이 아니라 데이터를 다룬다. Firestore와 Cloud SQL, BigQuery는 셋 다 데이터베이스로 불리지만 성격도 요금 구조도 전혀 다르다.

· · · 연재 순서 · · ·

(이전) GCP IAM 기초 — 서비스 계정과 권한, 최소 권한 원칙

(다음) GCP 데이터베이스 선택 가이드 — Firestore·Cloud SQL·BigQuery 무엇을 쓸까

※ 이 글의 금액과 한도, 명령어는 2026년 8월 기준이며 요금·메뉴 구성은 자주 변경됩니다.

댓글

이 블로그의 인기 게시물

[AI입문]AI 용어 사전 — 토큰, 컨텍스트, 환각... 뜻만 알면 절반은 끝난다

메일 주소 하나 만들려다 브랜드를 세웠다 — 1인 스튜디오 브랜딩 실전기

클로드 Fable 5와 Opus 4.8 비교 - 차이점, 가격, 무료 기간 종료 후 변화까지 총정리 (7월 최신)