이 가이드에서는 소유한 도메인의 정적 웹사이트를 호스팅하도록 Cloud Storage 버킷을 구성하는 방법을 설명합니다. 정적 웹페이지에는 HTML, CSS, 자바스크립트와 같은 클라이언트 측 기술이 포함될 수 있습니다. 반면 PHP와 같은 서버 측 스크립트를 비롯한 동적 콘텐츠는 포함될 수 없습니다.
이 가이드에서는 HTTP를 통해 콘텐츠를 제공하는 방법을 보여줍니다. HTTPS를 사용하는 가이드는 정적 웹사이트 호스팅을 참조하세요.
동적 웹사이트의 정적 애셋을 호스팅하는 방법을 비롯하여 정적 웹페이지에 대한 예시와 도움말은 정적 웹사이트 페이지를 참조하세요.
목표
이 가이드에서는 다음 단계를 진행합니다.CNAME
레코드를 사용하여 도메인을 Cloud Storage로 지정합니다.- 도메인에 연결된 버킷을 만듭니다.
- 사이트의 파일을 업로드하고 공유합니다.
- 웹사이트를 테스트합니다.
비용
이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Cloud Storage
정적 웹사이트 호스팅 시 발생할 수 있는 요금에 대한 자세한 내용은 스토리지 요금 모니터링 팁을 참조하세요. Cloud Storage 비용에 대한 자세한 내용은 가격 책정 페이지를 참조하세요.
시작하기 전에
-
Google 계정으로
로그인합니다.
아직 계정이 없으면 새 계정을 등록하세요.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
- 자신이 소유하거나 관리하는 도메인이 있어야 합니다. 기존 도메인이 없는 경우, Google Domains와 같은 다양한 서비스를 이용하여 새 도메인을 등록할 수 있습니다.
이 가이드는
example.com
도메인을 사용합니다. - 사용할 도메인을 소유 또는 관리하고 있는지 확인합니다.
www.example.com
과 같은 하위 도메인이 아니라example.com
과 같은 최상위 도메인을 확인해야 합니다.참고: 버킷에 연결된 도메인을 소유하고 있는 경우, 이전에 이 단계를 이미 수행했을 수 있습니다. Google Domains를 통해 도메인을 구입한 경우, 자동으로 확인이 수행됩니다.
Cloud Storage에 도메인 연결
Cloud Storage에 도메인을 연결하려면 도메인 등록 서비스를 통해 CNAME
레코드를 만듭니다. CNAME
레코드는 DNS 레코드의 한 유형입니다. 이 레코드는 URL을 요청하는 트래픽을 도메인에서 제공할 리소스(이 경우 Cloud Storage 버킷에 있는 객체)로 전달합니다.
www.example.com
의 경우, CNAME
레코드에는 다음 정보가 포함될 수 있습니다.
NAME TYPE DATA www.example.com CNAME c.storage.googleapis.com.
CNAME
리디렉션에 대한 자세한 내용은 CNAME
별칭 URI를 참조하세요.
도메인을 Cloud Storage에 연결하려면 다음을 수행합니다.
c.storage.googleapis.com.
을 가리키는CNAME
레코드를 만듭니다.도메인 등록 서비스에는
CNAME
레코드 추가가 포함된 도메인 관리 방법이 있어야 합니다. 예를 들어 Google Domains를 사용하는 경우, Google Domains 도움말 페이지에서CNAME
레코드를 추가하는 방법을 확인할 수 있습니다.
버킷 만들기
도메인용으로 만든 CNAME
과 이름이 일치하는 버킷을 만듭니다.
예를 들어 www.example.com
을 가리키는 CNAME
레코드를 c.storage.googleapis.com.
에 추가한 경우 이름이 'www.example.com'인 버킷을 만듭니다.
버킷을 만드는 방법은 다음과 같습니다.
Console
- Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
Cloud Storage 브라우저 열기 버킷 생성을 클릭하여 버킷 생성 양식을 엽니다.
각 단계를 완료하려면 버킷 정보를 입력하고 계속을 클릭합니다.
만들기를 클릭합니다.
성공하면 '이 버킷에 객체가 없습니다'라는 텍스트와 함께 버킷 페이지로 이동합니다.
gsutil
gsutil mb
명령어를 사용합니다.
gsutil mb gs://www.example.com
성공하면 명령어가 다음을 반환합니다.
Creating gs://www.example.com/...
코드 샘플
C++
자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.
C#
자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.
Go
자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.
자바
자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.
Node.js
자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.
PHP
자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
Ruby
자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.
REST API
JSON API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
웹사이트 이름을
name
속성에 할당하는.json
파일을 만듭니다.{ "name": "www.example.com" }
cURL
을 사용하여 JSON API를 호출합니다. www.example.com의 경우는 다음과 같습니다.curl -X POST --data-binary @website-bucket-name.json \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b?project=my-static-website"
XML API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
cURL
을 사용하여 웹사이트 이름으로 버킷을 만드는 XML API를 호출합니다. www.example.com의 경우는 다음과 같습니다.curl -X PUT \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "x-goog-project-id: my-static-website" \ "https://storage.googleapis.com/www.example.com"
사이트 파일 업로드
웹사이트가 제공할 파일을 버킷에 추가하려면 다음을 따르세요.
Console
- Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
Cloud Storage 브라우저 열기 버킷 목록에서 앞서 만든 버킷의 이름을 클릭합니다.
객체 탭에서 파일 업로드 버튼을 클릭합니다.
파일 대화상자에서 원하는 파일을 탐색하고 선택합니다.
업로드가 완료되면 버킷에 표시된 파일 정보와 함께 파일 이름이 표시됩니다.
gsutil
gsutil cp
명령어를 사용하여 파일을 버킷으로 복사합니다. 예를 들어 현재 위치 Desktop
에서 index.html
파일을 복사하려면 다음을 사용하세요.
gsutil cp Desktop/index.html gs://www.example.com
성공하면 명령어가 다음을 반환합니다.
Copying file://Desktop/index.html [Content-Type=text/html]... Uploading gs://www.example.com/index.html: 0 B/2.58 KiB Uploading gs://www.example.com/index.html: 2.58 KiB/2.58 KiB
코드 샘플
C++
자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.
C#
자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.
Go
자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.
자바
자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.
Node.js
자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.
PHP
자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
Blob.upload_from_file(), Blob.upload_from_filename() 또는 Blob.upload_from_string() 메서드를 사용하여 객체를 업로드합니다.Ruby
자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.
REST API
JSON API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
cURL
을 사용하여POST
객체 요청으로 JSON API를 호출합니다. www.example.com 색인 페이지의 경우 다음과 같습니다.curl -X POST --data-binary @index.html \ -H "Content-Type: text/html" \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ "https://storage.googleapis.com/upload/storage/v1/b/www.example.com/o?uploadType=media&name=index.html"
XML API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
cURL
을 사용하여PUT
객체 요청으로 XML API를 호출합니다. www.example.com 색인 페이지의 경우 다음과 같습니다.curl -X PUT --data-binary @index.html \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: text/html" \ "https://storage.googleapis.com/www.example.com/index.html"
파일 공유
공개 인터넷의 모든 사용자가 버킷의 모든 객체를 읽을 수 있도록 하려면 다음 단계를 따르세요.
Console
- Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
Cloud Storage 브라우저 열기 버킷 목록에서 공개하려는 버킷의 이름을 클릭합니다.
페이지 상단의 권한 탭을 선택합니다.
구성원 추가 버튼을 클릭합니다.
구성원 추가 대화상자가 나타납니다.
새 구성원 필드에
allUsers
를 입력합니다.역할 선택 드롭다운에서 Cloud Storage 하위 메뉴를 선택하고 Storage Object Viewer 옵션을 클릭합니다.
저장을 클릭합니다.
공개 액세스 허용을 클릭합니다.
버킷이 공개적으로 공유되면 공개 액세스 열에 각 객체의 링크 아이콘이 나타납니다. 이 아이콘을 클릭하여 객체의 URL을 가져올 수 있습니다.
gsutil
gsutil iam ch
명령어를 사용합니다.
gsutil iam ch allUsers:objectViewer gs://www.example.com
코드 샘플
C++
자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.
C#
자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.
자바
자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
REST API
JSON API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
다음 정보가 포함된 .json 파일을 만듭니다.
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":["allUsers"] } ] }
cURL
을 사용하여PUT
버킷 요청으로 JSON API를 호출합니다.curl -X PUT --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
각 항목의 의미는 다음과 같습니다.
JSON_FILE_NAME
은 2단계에서 만든 파일의 이름입니다.OAUTH2_TOKEN
은 1단계에서 생성한 액세스 토큰입니다.BUCKET_NAME
은 객체를 공개할 버킷의 이름입니다. 예를 들면my-bucket
입니다.
XML API
XML API에서는 버킷의 모든 객체를 공개적으로 읽을 수 있게 설정할 수 없습니다. 대신 gsutil 또는 JSON API를 사용하세요.
버킷의 객체 그룹을 공개적으로 액세스 가능하게 설정할 수 있지만 일반적으로 버킷의 모든 파일을 공개적으로 액세스 가능하게 설정하는 것이 더 쉽고 빠릅니다.
방문자가 비공개 파일이나 존재하지 않는 파일의 URL을 요청하면 http 403
응답 코드를 받습니다. http 404
응답 코드를 사용하는 오류 페이지를 추가하는 방법에 대한 자세한 내용은 다음 섹션을 참조하세요.
권장사항: 특수 페이지 할당
MainPageSuffix
속성으로 제어되는 색인 페이지 서픽스와 NotFoundPage
속성으로 제어되는 커스텀 오류 페이지를 할당할 수 있습니다. 이 중 원하는 한 가지를 할당할 수 있지만 색인 페이지가 없을 경우에는 사용자가 http://www.example.com
과 같은 최상위 사이트에 액세스할 때 아무것도 제공되지 않습니다. 자세한 내용은 웹사이트 구성 예를 참조하세요.
다음 샘플에서 MainPageSuffix
는 index.html
로 설정되고 NotFoundPage
는 404.html
로 설정됩니다.
Console
- Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
Cloud Storage 브라우저 열기 버킷 목록에서 앞서 만든 버킷을 찾습니다.
버킷과 연관된 버킷 오버플로 메뉴(
)를 클릭하고 웹사이트 구성 수정을 선택합니다.
웹사이트 구성 대화상자에서 기본 페이지와 오류 페이지를 지정합니다.
저장을 클릭합니다.
gsutil
gsutil web set
명령어를 사용하여 -m
플래그가 지정된 MainPageSuffix
속성과 -e
플래그가 지정된 NotFoundPage
속성을 설정합니다.
gsutil web set -m index.html -e 404.html gs://www.example.com
성공하면 명령어가 다음을 반환합니다.
Setting website config on gs://www.example.com/...
코드 샘플
C++
자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.
자바
자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
REST API
JSON API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
website
객체에서mainPageSuffix
및notFoundPage
속성을 원하는 페이지로 설정하는.json
파일을 만듭니다.{ "website":{ "mainPageSuffix": "index.html", "notFoundPage": "404.html" } }
cURL
을 사용하여PATCH
버킷 요청으로 JSON API를 호출합니다. www.example.com의 경우는 다음과 같습니다.curl -X PATCH --data-binary @web-config.json \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/www.example.com"
XML API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
WebsiteConfiguration
요소에서MainPageSuffix
및NotFoundPage
요소를 원하는 페이지로 설정하는.xml
파일을 만듭니다.<WebsiteConfiguration> <MainPageSuffix>index.html</MainPageSuffix> <NotFoundPage>404.html</NotFoundPage> </WebsiteConfiguration>
cURL
을 사용하여PUT
버킷 요청 및websiteConfig
쿼리 문자열 매개변수로 XML API를 호출합니다. www.example.com의 경우는 다음과 같습니다.curl -X PUT --data-binary @web-config.xml \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ https://storage.googleapis.com/www.example.com?websiteConfig
웹사이트 테스트
브라우저에서 도메인 이름을 요청하여 버킷에서 콘텐츠가 제공되는지 확인합니다. MainPageSuffix
속성을 설정하는 경우 객체 경로나 도메인 이름으로 이 작업을 수행할 수 있습니다.
예를 들어 www.example.com
이름의 버킷에 저장된 test.html
이라는 객체가 있는 경우, 브라우저에서 www.example.com/test.html
로 이동하여 액세스할 수 있는지 확인합니다.
삭제
정적 웹사이트 호스팅 가이드를 완료했으면 Google Cloud에서 만든 리소스가 할당량을 소모하여 이후에 요금이 청구되지 않도록 이 리소스를 삭제할 수 있습니다. 다음 섹션에서는 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.
프로젝트 삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.
프로젝트를 삭제하는 방법은 다음과 같습니다.
- Cloud Console에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
버킷 삭제
전체 프로젝트를 삭제하지 않으려는 경우, 웹사이트 호스팅에 사용된 버킷을 삭제할 수 있습니다.
Console
- Google Cloud Console에서 Cloud Storage 브라우저를 엽니다.
Cloud Storage 브라우저 열기 www.example.com
에 연결된 체크박스를 선택합니다.삭제를 클릭합니다.
표시되는 오버레이 창에서 삭제를 클릭하여 버킷과 콘텐츠를 삭제합니다.
gsutil
-r
플래그가 지정된 gsutil rm
명령어를 사용하여 버킷의 콘텐츠와 버킷 자체를 삭제합니다.
gsutil rm -r gs://www.example.com
응답은 다음 예시와 같습니다.
Removing gs://www.example.com/...
코드 샘플
C++
자세한 내용은 Cloud Storage C++ API 참조 문서를 확인하세요.
C#
자세한 내용은 Cloud Storage C# API 참조 문서를 확인하세요.
Go
자세한 내용은 Cloud Storage Go API 참조 문서를 확인하세요.
자바
자세한 내용은 Cloud Storage 자바 API 참조 문서를 확인하세요.
Node.js
자세한 내용은 Cloud Storage Node.js API 참조 문서를 확인하세요.
PHP
자세한 내용은 Cloud Storage PHP API 참조 문서를 확인하세요.
Python
자세한 내용은 Cloud Storage Python API 참조 문서를 확인하세요.
Ruby
자세한 내용은 Cloud Storage Ruby API 참조 문서를 확인하세요.
REST API
JSON API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
cURL
을 사용하여DELETE
버킷 요청으로 JSON API를 호출합니다.curl -X DELETE \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ "https://storage.googleapis.com/storage/v1/b/www.example.com"
성공하면 응답에 204 상태 코드가 포함됩니다.
XML API
- OAuth 2.0 Playground에서 승인 액세스 토큰을 가져옵니다. 자체 OAuth 사용자 인증 정보를 사용하도록 플레이그라운드를 구성합니다.
cURL
을 사용하여DELETE
버킷 요청으로 XML API를 호출합니다.curl -X DELETE \ -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg" \ "https://storage.googleapis.com/www.example.com"