์ด ๋ฌธ์์์๋ ์ ์ ์ฝํ
์ธ ์์ฒญ์ Cloud Storage ๋ฒํท์ผ๋ก ๋ผ์ฐํ
ํ๊ธฐ ์ํด ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์
๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ฐฑ์๋ ๋ฒํท์ผ๋ก ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๊ตฌ์ฑํ๋ฉด /love-to-fetch๋ก ์์ํ๋ URL ๊ฒฝ๋ก ์์ฒญ์ us-east1 Cloud Storage ๋ฒํท์ผ๋ก ์ ์ก๋๊ณ ๋ค๋ฅธ ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์์ ๋ฆฌ์ ์ ๊ด๊ณ์์ด europe-north1 Cloud Storage ๋ฒํท์ผ๋ก ์ ์ก๋ฉ๋๋ค.
๋ฐฑ์๋๊ฐ HTTP(S)๋ฅผ ํตํด ๋์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ๋ฐฑ์๋ ๋ฒํท ๋์ ๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ธฐ์กด ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ ์ ์ญ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฐฐํฌ๋ฅผ ๊ณํํ ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ์๋ฅผ ๊ฒํ ํ์ธ์.Cloud Storage ๋ฒํท์ ๋ถํ ๋ถ์ฐ๊ธฐ ๋ฐฑ์๋๋ก ์ฌ์ฉ
์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ URL ๋งต์ ์ฌ์ฉํ์ฌ ์ง์ ๋ URL ๊ฒฝ๋ก์์ ํด๋น ๋ฐฑ์๋๋ก ํธ๋ํฝ์ ์ ๋ฌํฉ๋๋ค.
๋ค์ ๋ค์ด์ด๊ทธ๋จ์์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ /love-to-fetch/์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ us-east1 ๋ฆฌ์ ์ ์๋ Cloud Storage ๋ฒํท์ผ๋ก ํธ๋ํฝ์ ์ ์กํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์์ฒญ์ europe-north1 ๋ฆฌ์ ์ ์๋ Cloud Storage ๋ฒํท์ผ๋ก ์ด๋ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Cloud Storage๋ Cloud CDN์์ ์ฌ์ฉํ๋ ๋์ผํ ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐฑ์๋ ๋ฒํท์์ Cloud CDN์ ์ฌ์ฉ ์ค์ ํ๋ฉด ์ฝํ
์ธ ์ Cloud CDN ์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด Cloud CDN ์ ์ด์๋ ์บ์ ๋ชจ๋, ์๋ช
๋ URL, ๋ฌดํจํ๊ฐ ํฌํจ๋ฉ๋๋ค. Cloud CDN์ ์ฌ์ฉํ๋ฉด ๋์ฉ๋ ์ฝํ
์ธ (10MB ์ด๊ณผ)๋ฅผ ์บ์ํ ์๋ ์์ต๋๋ค. ๋ฐฑ์๋ ๋ฒํท์์ Cloud CDN์ ์ฌ์ฉํ์ง ์์ผ๋ฉด, Cloud Storage ๋ฉํ๋ฐ์ดํฐ์์ ์ค์ ํ ๋๋ก ๋ ์์ ์ฝํ
์ธ ์ ์บ์ฑ์ ์ ์ดํ๋ ๋ฐ ์๋ณธ 'Cache-Control' ํค๋๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
์ค์ ์ด ๋ค์ ๊ธฐ๋ณธ ์๊ฑด์ ์ถฉ์กฑํ๋์ง ํ์ธํฉ๋๋ค. gcloud storage ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ gcloud ๋๊ตฌ๋ก ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ํ์์ ์๋ด์ ๋ฐ๋ผ ์ค์นํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ํ๋ก์ ํธ ์ค์
์ฝ์
- Google Cloud ๊ณ์ ์ ๋ก๊ทธ์ธํฉ๋๋ค. Google Cloud๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ์ ์ ๋ง๋ค๊ณ Google ์ ํ์ ์ค์ ์ฑ๋ฅ์ ํ๊ฐํด ๋ณด์ธ์. ์ ๊ท ๊ณ ๊ฐ์๊ฒ๋ ์ํฌ๋ก๋๋ฅผ ์คํ, ํ ์คํธ, ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ $300์ ๋ฌด๋ฃ ํฌ๋ ๋ง์ด ์ ๊ณต๋ฉ๋๋ค.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
PROJECT_ID๋ฅผ ์ด ๊ฐ์ด๋์ ์ฌ์ฉ ์ค์ธ ํ๋ก์ ํธ๋ก ๋ฐ๊ฟ๋๋ค.
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
๊ถํ
์ด ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด๋ ค๋ฉด ํ๋ก์ ํธ์ Cloud Storage ๋ฒํท๊ณผ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ๋ก์ ํธ ์์ ์ ๋๋ ํธ์ง์์ด๊ฑฐ๋ ๋ค์ Compute Engine IAM ์ญํ ์ ๋ณด์ ํด์ผ ํฉ๋๋ค.
| ์์ | ํ์ํ ์ญํ |
|---|---|
| ๋ถํ ๋ถ์ฐ๊ธฐ ๊ตฌ์ฑ์์ ๋ง๋ค๊ธฐ | ๋คํธ์ํฌ ๊ด๋ฆฌ์ |
| Cloud Storage ๋ฒํท ๋ง๋ค๊ธฐ | ์คํ ๋ฆฌ์ง ๊ฐ์ฒด ๊ด๋ฆฌ์ |
์์ธํ ๋ด์ฉ์ ๋ค์ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
SSL ์ธ์ฆ์ ๋ฆฌ์์ค ์ค์
๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋์ ํ๋ก์์ ์ฐ๊ฒฐํ ์ ์๋ SSL ์ธ์ฆ์ ๋ฆฌ์์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. SSL ์ธ์ฆ์ ๋ฆฌ์์ค๋ ์ธ์ฆ์ ๋งต ๋๋ Compute Engine SSL ์ธ์ฆ์ (๊ธฐ๋ณธ ์ธ์ฆ์)์ผ ์ ์์ต๋๋ค.
์ธ์ฆ์ ๋งต
๋ค์ ๋ฌธ์ ์ค ํ๋์ ์ค๋ช ๋ ๋๋ก ์ธ์ฆ์ ๋งต์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ถํ ๋ถ์ฐ๊ธฐ ์น์ธ์ ์ฌ์ฉํ์ฌ ์ ์ญ Google ๊ด๋ฆฌํ ์ธ์ฆ์ ๋ฐฐํฌ
- DNS ์น์ธ์ ์ฌ์ฉํ์ฌ ์ ์ญ Google ๊ด๋ฆฌํ ์ธ์ฆ์ ๋ฐฐํฌ
- Certificate Authority Service๋ก ์ ์ญ Google ๊ด๋ฆฌํ ์ธ์ฆ์ ๋ฐฐํฌ
- ์ ์ญ ์์ฒด ๊ด๋ฆฌํ ์ธ์ฆ์ ๋ฐฐํฌ
Compute Engine SSL ์ธ์ฆ์
HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ ๋ค์ ๋ฌธ์ ์ค ํ๋์ ์ค๋ช ๋ ๋๋ก Compute Engine SSL ์ธ์ฆ์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ญ๋๋ค.
Google ๊ด๋ฆฌํ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
(์ ํ์ฌํญ) BYOIP ์ฃผ์ ์ฌ์ฉ
์ฌ์ฉ์ IP ์ฌ์ฉ(BYOIP)์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ๊ณต๊ฐ ์ฃผ์๋ฅผGoogle Cloud ๋ก ๊ฐ์ ธ์ Google Cloud ๋ฆฌ์์ค์ ํจ๊ป ์ฃผ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์์ IPv4 ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๊ตฌ์ฑํ ๋ ์ ๋ฌ ๊ท์น์ ํ๋๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์์ ์๋ด์ ๋ฐ๋ผ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค ๋ BYOIP ์ฃผ์๋ฅผ IP ์ฃผ์๋ก ์ ๊ณตํฉ๋๋ค.
BYOIP ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ IP ์ฃผ์ ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
Cloud Storage ๋ฒํท ๋ฐ ์ฝํ ์ธ ์ค๋น
Cloud Storage ๋ฒํท์ ์ค๋นํ๋ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฒํท์ ๋ง๋ญ๋๋ค.
๋ฒํท์ ์ฝํ ์ธ ๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๋ฒํท์ ๊ณต๊ฐ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Cloud Storage ๋ฒํท ๋ง๋ค๊ธฐ
์ด ์์์์๋ ๋ถํ ๋ถ์ฐ๊ธฐ๊ฐ ์ก์ธ์คํ ์ ์๋ Cloud Storage ๋ฒํท ๋ ๊ฐ๋ฅผ ๋ง๋ญ๋๋ค. ํ๋ก๋์ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ์ฌ๋ฌ Google Cloud ๋ฆฌ์ ์์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋ณต์ ํ๋ ๋ฉํฐ ๋ฆฌ์ ๋ฒํท์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝํ ์ธ ์ ๊ฐ์ฉ์ฑ์ด ํฅ์๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๋ด๊ฒฐํจ์ฑ์ด ๊ฐ์ ๋ฉ๋๋ค.
๋ง๋ Cloud Storage ๋ฒํท์ ์ด๋ฆ์ ๋์ค์ ์ฌ์ฉ๋๋ ๊ธฐ๋กํด ๋ก๋๋ค. ์ด ๊ฐ์ด๋์์๋ BUCKET_1_NAME ๋ฐ BUCKET_2_NAME์ด๋ผ๊ณ ํฉ๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ Cloud Storage ๋ฒํท ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ฒํท ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฒํท ์ด๋ฆ ์ง์ ์์์ ์ด๋ฆ ์ง์ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ผ ์ ์ญ์ ์ผ๋ก ๊ณ ์ ํ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
๋ฐ์ดํฐ ์ ์ฅ ์์น ์ ํ์ ํด๋ฆญํฉ๋๋ค.
์์น ์ ํ์ ๋ฆฌ์ ์ผ๋ก ์ค์ ํฉ๋๋ค.
์์น๋ฅผ europe-north1๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ BUCKET_1_NAME์ ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฒํท์ ํด๋ฆญํ์ฌ Cloud Storage ๋ฒํท ํ์ด์ง๋ก ๋์๊ฐ๋๋ค. ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ผ ๋ ๋ฒ์งธ ๋ฒํท์ ๋ง๋ค๋, ์์น๋ฅผ us-east1๋ก ์ค์ ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ BUCKET_2_NAME์ ๋๋ค.
gcloud
gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
BUCKET_1_NAME ๋ฐ BUCKET_2_NAME์ ๋ง๋ค๋ ค๋ ๋ฒํท์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
Terraform
๋ฒํท์ ๋ง๋ค๋ ค๋ฉด google_storage_bucket ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Terraform ๊ตฌ์ฑ์ ์ ์ฉํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ Terraform ๋ช ๋ น์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
Cloud Storage ๋ฒํท์ผ๋ก ์ฝํ ์ธ ์ ์ก
๋์ค์ ์ค์ ์ ํ ์คํธํ ์ ์๋๋ก ๋ค์ ์ด๋ฏธ์ง๋ฅผ ๊ณต๊ฐ Cloud Storage ๋ฒํท์์ ์์ฒด Cloud Storage ๋ฒํท์ผ๋ก ๋ณต์ฌํฉ๋๋ค.
gcloud
Cloud Shell ํ์ฑํ๋ฅผ ํด๋ฆญํฉ๋๋ค.
Cloud Shell์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฒํท ์ด๋ฆ ๋ณ์๋ฅผ Cloud Storage ๋ฒํท ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
Terraform
ํญ๋ชฉ์ ๋ฒํท์ ๋ณต์ฌํ๋ ค๋ฉด google_storage_bucket_object ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
๋๋ null_resource ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
resource "null_resource" "upload_cat_image" {
provisioner "local-exec" {
command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/"
}
}
resource "null_resource" "upload_dog_image" {
provisioner "local-exec" {
command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/"
}
}
Google Cloud ์ฝ์์์ ๊ฐ ๋ฒํท์ ์ธ๋ถ์ ๋ณด ํ์ด์ง์ ์๋ ์๋ก๊ณ ์นจ์ ํด๋ฆญํ์ฌ ํ์ผ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ณต์ฌ๋์๋์ง ํ์ธํฉ๋๋ค.
Cloud Storage ๋ฒํท์ ์ก์ธ์คํ ์ ์๋๋ก ์ค์
Cloud Storage ๋ฒํท์ ๊ณต๊ฐ์ ์ผ๋ก ์ฝ์ ์ ์๋๋ก ์ค์ ํ๊ฑฐ๋ ์ก์ธ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
Cloud Storage ๋ฒํท์ ๊ณต๊ฐ์ ์ผ๋ก ์ฝ์ ์ ์๋๋ก ์ค์
Cloud Storage ๋ฒํท์ ๊ณต๊ฐ์ ์ผ๋ก ์ฝ์ ์ ์๊ฒ ํ๋ฉด ์ธํฐ๋ท์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด๋ฅผ ๋์ดํ๊ณ ๋ณด๊ณ ๋ฉํ๋ฐ์ดํฐ(ACL ์ ์ธ)๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๊ณต๊ฐ ๋ฒํท์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํฌํจํ์ง ๋ง์ธ์.
๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ค์๋ก ๋ ธ์ถ๋๋ ๊ฐ๋ฅ์ฑ์ ์ค์ด๋ ค๋ฉด ๊ณต๊ฐ ๊ฐ์ฒด์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋์ผํ ๋ฒํท์ ์ ์ฅํ์ง ๋ง์ธ์.
์ฝ์
๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ณผ ์ ์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ฒํท๋ง๋ค ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
Google Cloud ์ฝ์์์ Cloud Storage ๋ฒํท ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ฒํท ์ด๋ฆ์ ํด๋ฆญํ ๋ค์ ๊ถํ ํญ์ ํด๋ฆญํฉ๋๋ค.
์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์ฃผ ๊ตฌ์ฑ์ ์์์
allUsers๋ฅผ ์ ๋ ฅํฉ๋๋ค.์ญํ ์ ํ ์์์์ Cloud Storage > ์คํ ๋ฆฌ์ง ๊ฐ์ฒด ๋ทฐ์ด๋ฅผ ์ ํํฉ๋๋ค.
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
๊ณต๊ฐ ์ก์ธ์ค ํ์ฉ์ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ณผ ์ ์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ณผ ์ ์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด google_storage_bucket_iam_member ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ allUsers ๊ตฌ์ฑ์์ ์ง์ ํฉ๋๋ค.
Cloud Storage ๋ฒํท์ ๋น๊ณต๊ฐ๋ก ์ค์
๋น๊ณต๊ฐ ๋ฒํท์ ๋ํ ์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ์๋น์ค ๊ณ์ service-PROJECT_NUM@https-lb.iam.gserviceaccount.com์ ํ์ํ IAM ์ญํ ์ ๋ถ์ฌํ์ธ์. ์ด ์๋น์ค ๊ณ์ ์ ๋ฐฑ์๋ ๋ฒํท์ด ์์ฑ๋ ๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
์ฝ์
์๋น์ค ๊ณ์ ์๋ง ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ณผ ์ ์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ฒํท๋ง๋ค ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
Google Cloud ์ฝ์์์ ๋ฒํท ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ก์ธ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ ๋ฒํท์ผ๋ก ์ด๋ํ์ฌ ๊ถํ ํญ์ ํด๋ฆญํฉ๋๋ค.
๊ถํ ์น์ ์ ์ฃผ ๊ตฌ์ฑ์๋ณ๋ก ๋ณด๊ธฐ ํญ์์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ฃผ ๊ตฌ์ฑ์ ์ถ๊ฐ ์น์ ์ ์ ์ฃผ ๊ตฌ์ฑ์ ํ๋์ ํธ์ถ ์๋น์ค ๊ณ์ ์ ์ด๋ฉ์ผ ์ฃผ์(
service-PROJECT_NUM@https-lb.iam.gserviceaccount.com)๋ฅผ ์ ๋ ฅํฉ๋๋ค.์ญํ ํ ๋น ์น์ ์ ์ญํ ์ ํ ํ๋์์ Cloud Storageย > ์คํ ๋ฆฌ์ง ๊ฐ์ฒด ๋ทฐ์ด๋ฅผ ์ ํํฉ๋๋ค. ์ด ์ญํ ์ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๊ถํ์ ์ ๊ณตํฉ๋๋ค.
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
๋ํ ๋ฒํท์์ ์ ๊ณต๋๋ ๋ชจ๋ ์ฝํ ์ธ ๊ฐ ์บ์๋๋๋ก ์บ์ ๋ชจ๋๋ฅผ ์ค์ ํ์ฌ ๋ชจ๋ ์ฝํ ์ธ ๊ฐ์ ์บ์๋ก ์ง์ ํ๊ณ ์ต๋ TTL ๊ฐ์ ์ง์ ํฉ๋๋ค.
gcloud
์๋น์ค ๊ณ์ ์๋ง ๋ฒํท์ ๊ฐ์ฒด๋ฅผ ๋ณผ ์ ์๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME \
--member=serviceAccount:service-PROJECT_NUM@https-lb.iam.gserviceaccount.com \
--role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME \
--member=serviceAccount:service-PROJECT_NUM@https-lb.iam.gserviceaccount.com \
--role=roles/storage.objectViewer
๋ค์์ ๋ฐ๊ฟ๋๋ค.
BUCKET_1_NAME๋ฐBUCKET_2_NAME: ์ฌ์ฉํ Cloud Storage ๋ฒํท์ ์ด๋ฆPROJECT_NUM: Google Cloud ํ๋ก์ ํธ ์
๋ํ ๋ฒํท์์ ์ ๊ณต๋๋ ๋ชจ๋ ์ฝํ ์ธ ๊ฐ ์บ์๋๋๋ก ์บ์ ๋ชจ๋๋ฅผ ์ค์ ํ์ฌ ๋ชจ๋ ์ฝํ ์ธ ๊ฐ์ ์บ์๋ก ์ง์ ํ๊ณ ์ต๋ TTL ๊ฐ์ ์ง์ ํฉ๋๋ค.
์ธ๋ถ IP ์ฃผ์ ์์ฝ
Cloud Storage ๋ฒํท์ ์ค์ ํ ํ์๋ ๋์์์ ๋ถํ ๋ถ์ฐ๊ธฐ์ ๋๋ฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ ์ญ ๊ณ ์ ์ธ๋ถ IP ์ฃผ์๋ฅผ ์์ฝํ ์ ์์ต๋๋ค.
์ ์ ์ธ๋ถ IP ์ฃผ์๋ ๋๋ฉ์ธ์ ๊ฐ๋ฆฌํค๋ ๋จ์ผ ์ฃผ์๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์ด ๋จ๊ณ๋ ์ ํ์ฌํญ์ด์ง๋ง ๊ถ์ฅ๋ฉ๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ ์ธ๋ถ IP ์ฃผ์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๊ณ ์ ์ฃผ์ ์์ฝ์ ํด๋ฆญํฉ๋๋ค.
์ด๋ฆ ์์์
example-ip๋ฅผ ์ ๋ ฅํฉ๋๋ค.๋คํธ์ํฌ ์๋น์ค ๋ฑ๊ธ์ ํ๋ฆฌ๋ฏธ์์ผ๋ก ์ค์ ํฉ๋๋ค.
IP ๋ฒ์ ์ IPv4๋ก ์ค์ ํฉ๋๋ค.
์ ํ์ ์ ์ญ์ผ๋ก ์ค์ ํฉ๋๋ค.
์์ฝ์ ํด๋ฆญํฉ๋๋ค.
gcloud
gcloud compute addresses create example-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
์์ฝ๋ IPv4 ์ฃผ์๋ฅผ ํ์ธํฉ๋๋ค.
gcloud compute addresses describe example-ip \
--format="get(address)" \
--global
Terraform
์ธ๋ถ IP ์ฃผ์๋ฅผ ์์ฝํ๋ ค๋ฉด google_compute_global_address ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฑ์๋ ๋ฒํท์ผ๋ก ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ ๋ง๋ค๊ธฐ
์ด ์๋ด์์๋ HTTP ๋๋ HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด SSL ์ธ์ฆ์ ๋ฆฌ์์ค๋ฅผ ๋ถํ ๋ถ์ฐ๊ธฐ์ ํ๋ฐํธ์๋์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ SSL ์ธ์ฆ์ ๊ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฝ์
๋ถํ ๋ถ์ฐ๊ธฐ ์ ํ ์ ํ
Google Cloud ์ฝ์์์ ๋ถํ ๋ถ์ฐ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๋ถํ ๋ถ์ฐ๊ธฐ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ถํ ๋ถ์ฐ๊ธฐ ์ ํ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ(HTTP/HTTPS)๋ฅผ ์ ํํ๊ณ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ๊ณต๊ฐ ๋๋ ๋ด๋ถ์์ ๊ณต๊ฐ(์ธ๋ถ)๋ฅผ ์ ํํ๊ณ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ์ ์ญ ๋๋ ๋จ์ผ ๋ฆฌ์ ๋ฐฐํฌ์์ ์ ์ญ ์ํฌ๋ก๋์ ์ ํฉ์ ์ ํํ๊ณ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ๋ถํ ๋ถ์ฐ๊ธฐ ์์ฑ์์ ์ ์ญ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ์ ํํ๊ณ ๋ค์์ ํด๋ฆญํฉ๋๋ค.
- ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์ฑ
- ์ด๋ฆ ์์์
http-lb๋ฅผ ์ ๋ ฅํฉ๋๋ค.
๋ฐฑ์๋ ๊ตฌ์ฑ
๋ฐฑ์๋ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
๋ฐฑ์๋ ์๋น์ค ๋ฐ ๋ฐฑ์๋ ๋ฒํท ์์๋ฅผ ํด๋ฆญํ๊ณ ๋ฐฑ์๋ ๋ฒํท ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฐฑ์๋ ๋ฒํท ์ด๋ฆ ์์์
cats๋ฅผ ์ ๋ ฅํฉ๋๋ค.Cloud Storage ๋ฒํท ์์์์ ์ฐพ์๋ณด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
BUCKET_1_NAME์ ์ ํํ๊ณ ์ ํ์ ํด๋ฆญํฉ๋๋ค. ๋จผ์
cats๋ฐฑ์๋ ๋ฒํท์ ๋ง๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์นํ์ง ์๋ ๋ชจ๋ ํธ๋ํฝ ์์ฒญ์ด ์ ๋ฌ๋ฉ๋๋ค. ๋ถํ ๋ถ์ฐ๊ธฐ์์ ๊ธฐ๋ณธ ๋ฐฑ์๋ ๋ฒํท์ ๋ฆฌ๋๋ ์ ๊ท์น์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ฐ์ ํ๋ก์ธ์ค๋ก
dogs๋ผ๋ ๋ฐฑ์๋ ๋ฒํท์ ๋ง๋ค๊ณ BUCKET_2_NAME์ ์ ํํฉ๋๋ค.ํ์ธ์ ํด๋ฆญํฉ๋๋ค.
๋ผ์ฐํ ๊ท์น ๊ตฌ์ฑ
๋ผ์ฐํ ๊ท์น์ ํธ๋ํฝ์ ์ ๋ฌ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค. ๋ผ์ฐํ ์ ๊ตฌ์ฑํ๋ ค๋ฉด ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ์ URL ๋งต์ ๊ตฌ์ฑ ๊ตฌ์ฑ์์์ ํด๋นํ๋ ํธ์คํธ ๊ท์น ๋ฐ ๊ฒฝ๋ก ์ผ์น์๋ฅผ ์ค์ ํฉ๋๋ค. ์ด ์์์ ๋ํ ๊ท์น์ ์ค์ ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- ๋ผ์ฐํ ๊ท์น์ ํด๋ฆญํฉ๋๋ค.
dogs์ ๊ฒฝ์ฐ ํธ์คํธ ํ๋์*๋ฅผ, ๊ฒฝ๋ก ํ๋์/love-to-fetch/*๋ฅผ ์ ๋ ฅํฉ๋๋ค.
ํ๋ฐํธ์๋ ๊ตฌ์ฑ
ํ๋ฐํธ์๋ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
๋ค์ ์ต์ ์ด ์ด๋ฌํ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
์์ฑ ๊ฐ(๊ฐ ์ ๋ ฅ ๋๋ ์ง์ ๋ ์ต์ ์ ํ) ํ๋กํ ์ฝ HTTP ๋คํธ์ํฌ ์๋น์ค ๋ฑ๊ธ ํ๋ฆฌ๋ฏธ์ IP ๋ฒ์ IPv4 IP ์ฃผ์ example-ipํฌํธ 80์ ํ์ฌํญ: HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ 5~1,200์ด ์ฌ์ด์ ์ ํ ์๊ฐ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 610์ด์ ๋๋ค. HTTP ๋ถํ ๋ถ์ฐ๊ธฐ ๋์ HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด SSL ์ธ์ฆ์๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์์ฑ ๊ฐ(๊ฐ ์ ๋ ฅ ๋๋ ์ง์ ๋ ์ต์ ์ ํ) ํ๋กํ ์ฝ HTTP(S) ๋คํธ์ํฌ ์๋น์ค ๋ฑ๊ธ Premium IP ๋ฒ์ IPv4 IP ์ฃผ์ example-ipํฌํธ 443์ ํ์ฌํญ: HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ 5~1,200์ด ์ฌ์ด์ ์ ํ ์๊ฐ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 610์ด์ ๋๋ค. ์ธ์ฆ์ ์ธ์ฆ์ ์ ์ฅ์ ์ ํ์์ ์ธ์ฆ์ ๋งต ์ฌ์ฉ ๋๋ ๊ธฐ์กด ์ธ์ฆ์ ์ฌ์ฉ์ ์ ํํฉ๋๋ค. ์ ํ์ ๋ฐ๋ผ ์ธ์ฆ์ ๋งต ๋๋ ๊ธฐ์กด ์ธ์ฆ์๋ฅผ ์ ํํฉ๋๋ค. (์ ํ์ฌํญ) HTTP-HTTPS ๋ฆฌ๋๋ ์ ์ฌ์ฉ ์ค์ ์ด ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ๋๋ ์ ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์ด ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ฉด HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๋์ผํ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ ์ถ๊ฐ์ ์ธ ๋ถ๋ถ HTTP ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๊ณ HTTP ์์ฒญ์ ๋ถํ ๋ถ์ฐ๊ธฐ์ HTTPS ํ๋ฐํธ์๋๋ก ๋ฆฌ๋๋ ์ ํฉ๋๋ค.
์ด ์ฒดํฌ๋ฐ์ค๋ HTTPS ํ๋กํ ์ฝ์ด ์ ํ๋์๊ณ ์์ฝ๋ IP ์ฃผ์๊ฐ ์ฌ์ฉ๋ ๋๋ง ์ ํํ ์ ์์ต๋๋ค.
์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
๊ตฌ์ฑ ๊ฒํ
๊ฒํ ๋ฐ ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ๋ฐํธ์๋, ํธ์คํธ ๋ฐ ๊ฒฝ๋ก ๊ท์น, ๋ฐฑ์๋ ๋ฒํท์ ๊ฒํ ํฉ๋๋ค.
๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ๋ถํ ๋ถ์ฐ๊ธฐ๊ฐ ์์ฑ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋ถํ ๋ถ์ฐ๊ธฐ์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค(http-lb).
๋ค์ ์์ ์ ์ํด ๋ถํ ๋ถ์ฐ๊ธฐ์ IP ์ฃผ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ IP_ADDRESS๋ผ๊ณ ํฉ๋๋ค.
gcloud
๋ฐฑ์๋ ๊ตฌ์ฑ
gcloud compute backend-buckets create cats \ --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \ --gcs-bucket-name=BUCKET_2_NAME
URL ๋งต ๊ตฌ์ฑ
gcloud compute url-maps create http-lb \ --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \ --path-matcher-name=path-matcher-2 \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=dogs" \ --default-backend-bucket=cats
๋์ ํ๋ก์ ๊ตฌ์ฑ
HTTP ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ ๋์ HTTP ํ๋ก์๋ฅผ ๋ง๋ค์ด ์์ฒญ์ URL ๋งต์ผ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
gcloud compute target-http-proxies create http-lb-proxy \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=http-lb
HTTP_KEEP_ALIVE_TIMEOUT_SEC๋ฅผ 5~1,200์ด์ ํด๋ผ์ด์ธํธ HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 610์ด์
๋๋ค. ์ด ํ๋๋ ์ ํ์ฌํญ์
๋๋ค.
HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ ๋์ HTTPS ํ๋ก์๋ฅผ ๋ง๋ค์ด ์์ฒญ์ URL ๋งต์ผ๋ก ๋ผ์ฐํ ํฉ๋๋ค. ๋์ ํ๋ก์๋ HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ SSL ์ธ์ฆ์ ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํ๋ฏ๋ก ์ด ๋จ๊ณ์์ ์ธ์ฆ์ ๋๋ ์ธ์ฆ์ ๋งต์ ์ฐ๊ฒฐํฉ๋๋ค.
gcloud compute target-https-proxies create https-lb-proxy \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --url-map=http-lb \ --ssl-certificates=SSL_CERTIFICATE_NAME
๋ค์์ ๋ฐ๊ฟ๋๋ค.
HTTP_KEEP_ALIVE_TIMEOUT_SEC: 5~1,200์ด์ ํด๋ผ์ด์ธํธ HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ ๊ฐ ๊ธฐ๋ณธ๊ฐ์ 610์ด์ ๋๋ค. ์ด ํ๋๋ ์ ํ์ฌํญ์ ๋๋ค.SSL_CERTIFICATE_NAME: Compute Engine SSL ์ธ์ฆ์์ ์ด๋ฆ์ ๋๋ค. ๋์ ์ธ์ฆ์ ๊ด๋ฆฌ์ ์ธ์ฆ์ ๋งต์ ๋ง๋ ๊ฒฝ์ฐ--ssl-certificates=SSL_CERTIFICATE_NAME์--certificate-map=CERTIFICATE_MAP_NAME์ผ๋ก ๋ฐ๊ฟ๋๋ค.
์ ๋ฌ ๊ท์น ๊ตฌ์ฑ
HTTP ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ ํฌํธ 80์ ์์ HTTP ์์ฒญ์ ๋์ HTTP ํ๋ก์๋ก ๋ผ์ฐํ
ํ๋ ์ ์ญ ์ ๋ฌ ๊ท์น์ ๋ง๋ญ๋๋ค.
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ ํฌํธ 443์ ์์ HTTPS ์์ฒญ์ ๋์ HTTPS ํ๋ก์๋ก ๋ผ์ฐํ
ํ๋ ์ ์ญ ์ ๋ฌ ๊ท์น์ ๋ง๋ญ๋๋ค.
gcloud compute forwarding-rules create https-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
Terraform
๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ Terraform ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐฑ์๋ ๊ตฌ์ฑ
๋ฐฑ์๋ ์๋น์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด google_compute_backend_bucket ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
URL ๋งต ๊ตฌ์ฑ
URL ๋งต์ ๋ง๋ค๋ ค๋ฉด google_compute_url_map ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋์ ํ๋ก์ ๊ตฌ์ฑ
๋์ HTTP ํ๋ก์๋ฅผ ๋ง๋ค๋ ค๋ฉด google_compute_target_http_proxy ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ๋ฌ ๊ท์น ๊ตฌ์ฑ
์ ๋ฌ ๊ท์น์ ๋ง๋ค๋ ค๋ฉด google_compute_global_forwarding_rule ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ : ๋ชจ๋๋ฅผ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์
๋ถํ ๋ถ์ฐ๊ธฐ๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด load_balancing_scheme ์์ฑ์ "EXTERNAL_MANAGED" ๋์ "EXTERNAL"๋ก ์ค์ ํฉ๋๋ค.
Terraform ๊ตฌ์ฑ์ ์ ์ฉํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ Terraform ๋ช ๋ น์ด๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ถํ ๋ถ์ฐ๊ธฐ๋ก ํธ๋ํฝ ์ ์ก
๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ๊ตฌ์ฑํ ํ ๋ช ๋ถ ํ์ ํธ๋ํฝ์ ๋ถํ ๋ถ์ฐ๊ธฐ์ IP ์ฃผ์๋ก ์ ์กํ ์ ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์ ์ง์๋์ง ์์ต๋๋ค.
gcloud
curl ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ URL์ ์๋ต์ ํ
์คํธํฉ๋๋ค. HTTP ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ IP_ADDRESS๋ฅผ ๋ถํ ๋ถ์ฐ๊ธฐ์ IPv4 ์ฃผ์๋ก ๋ฐ๊ฟ๋๋ค. HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ http://IP_ADDRESS๋ฅผ https://DOMAIN๋ก ๋ฐ๊ฟ๋๋ค. ์ฌ๊ธฐ์ DOMAIN๋ ๋ถํ ๋ถ์ฐ๊ธฐ์ IP ์ฃผ์๋ก ํ์ธ๋๋ SSL ์ธ์ฆ์์ ์ฐ๊ฒฐ๋ ๋๋ฉ์ธ ์ด๋ฆ์
๋๋ค.
curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
์ถ๊ฐ ๊ตฌ์ฑ
์ด ์น์ ์์๋ ๋์ฒด ๋ฐ ์ถ๊ฐ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ดํด๋ด ๋๋ค. ๋ชจ๋ ํ์คํฌ๋ ์ ํ์ฌํญ์ ๋๋ค. ์ํ๋ ์์๋๋ก ์ํํ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ ์ ๋ฐ์ดํธ
์ด์ ๋จ๊ณ์์ ๋ง๋ ๋ถํ ๋ถ์ฐ๊ธฐ๋ ํด๋ผ์ด์ธํธ HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์์ต๋๋ค.ํด๋ผ์ด์ธํธ HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ์ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
Google Cloud ์ฝ์์์ ๋ถํ ๋ถ์ฐ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์์ ํ ๋ถํ ๋ถ์ฐ๊ธฐ์ ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- ์์ ์ ํด๋ฆญํฉ๋๋ค.
- ํ๋ฐํธ์๋ ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.
- ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํผ์นฉ๋๋ค. HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ์ ์ ํ ์๊ฐ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
- ์ ๋ฐ์ดํธ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ณ๊ฒฝ์ฌํญ์ ๊ฒํ ํ๋ ค๋ฉด ๊ฒํ ๋ฐ ์๋ฃ๋ฅผ ํด๋ฆญํ ๋ค์ ์ ๋ฐ์ดํธ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
HTTP ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ gcloud compute target-http-proxies update ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋์ HTTP ํ๋ก์๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
--http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
--global
HTTPS ๋ถํ ๋ถ์ฐ๊ธฐ์ ๊ฒฝ์ฐ gcloud compute target-https-proxies update ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋์ HTTPS ํ๋ก์๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
--http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
--global
๋ค์์ ๋ฐ๊ฟ๋๋ค.
TARGET_HTTP_PROXY_NAME: ๋์ HTTP ํ๋ก์์ ์ด๋ฆ์ ๋๋ค.TARGET_HTTPS_PROXY_NAME: ๋์ HTTPS ํ๋ก์์ ์ด๋ฆ์ ๋๋ค.HTTP_KEEP_ALIVE_TIMEOUT_SEC: HTTP ์ฐ๊ฒฐ ์ ์ง ์ ํ ์๊ฐ ๊ฐ(5~600์ด ์ฌ์ด)
Cloud Storage XML API์ ์ฟผ๋ฆฌ ๋ฌธ์์ด ํ๋ผ๋ฏธํฐ
์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ํตํด ๋ฐฑ์๋ ๋ฒํท์ผ๋ก ์ ์ก๋ ์์ฒญ์ ํน์ ์ฟผ๋ฆฌ ๋ฌธ์์ด ํ๋ผ๋ฏธํฐ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ '์ง์๋์ง ์๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ' ์ค๋ฅ์ ํจ๊ป HTTP 404 ์๋ต์ ์์ ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ ์์ฒญ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ์์ ์ค๋ ๊ฒฝ์ฐ Cloud Storage XML API์์ ์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
๋ค์ ํ์๋ ์์ฒญ์ด ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ฅผ ํตํด ๋ผ์ฐํ ๋ ๋ Cloud Storage XML API์์ ๋ค์ํ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ์๋ตํ๋ ๋ฐฉ์์ด ์์ฝ๋์ด ์์ต๋๋ค. ํ๋ผ๋ฏธํฐ๋ ๊ด์ฐฐ๋ ๋์๋ณ๋ก ๊ทธ๋ฃนํ๋์ด ์ด ์ปจํ ์คํธ์์ ์ง์, ๋ฌด์ ๋๋ ๊ฑฐ๋ถ๋๋์ง ํ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
| ๋งค๊ฐ๋ณ์ ์ ํ | ๋งค๊ฐ๋ณ์ | ๊ด์ฐฐ๋ ๋์ |
|---|---|---|
| ์ง์๋๋ ๋งค๊ฐ๋ณ์ |
generation,
prefix,
marker,
max-keys
|
์ด๋ฌํ ํ๋ผ๋ฏธํฐ(์ ์ ํ ๊ฐ ํฌํจ) ์ถ๊ฐ๋ Cloud Storage XML API ์ฐธ๊ณ ๋ฆฌ์์ค์ ์ค๋ช ๋๋ก ์๋ํฉ๋๋ค. API๋ ํ์ค HTTP ์๋ต์ ๋ฐํํฉ๋๋ค. |
| ๋ฌด์๋ ํ๋ผ๋ฏธํฐ |
acl,
billing,
compose,
delimiter,
encryption,
encryptionConfig,
response-content-disposition,
response-content-type,
tagging,
versions,
websiteConfig
|
์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํด๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ๋ถํ ๋ถ์ฐ๊ธฐ๊ฐ ์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ Cloud Storage์ ์ ๋ฌํ๋ฉด Cloud Storage XML API๋ ์ด๋ฅผ ๋ฌด์ํ๊ณ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์๋ตํฉ๋๋ค. |
| ๊ฑฐ๋ถ๋ ํ๋ผ๋ฏธํฐ |
cors,
lifecycle,
location,
logging,
storageClass,
versioning
|
Cloud Storage XML API์์ '์ง์๋์ง ์๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ' ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. |
์ ํ์ฌํญ
- ๋ฐฑ์๋ ๋ฒํท์ ์ ์ญ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ ๋ฐ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ์์๋ง ์ง์๋ฉ๋๋ค. ๋ฆฌ์ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ ๋๋ ๊ธฐํ ๋ถํ ๋ถ์ฐ๊ธฐ ์ ํ์์๋ ์ง์๋์ง ์์ต๋๋ค.
- ๋ฐฑ์๋ ๋ฒํท์ IAP(Identity-Aware Proxy)์์ ์ง์๋์ง ์์ต๋๋ค.
- ์ ์ญ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํ ๋ถ์ฐ๊ธฐ๋ Cloud Storage ๋ฒํท์ ์ ๋ก๋๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
Cloud CDN์ด ์ฌ์ฉ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ์๋ ๋ถํ ๋ถ์ฐ๊ธฐ์์ ์๋ช ๋ URL์ ์ฌ์ฉํ ์ ์์ต๋๋ค.