이 문서는 서버리스 컴퓨팅을 사용한 전자상거래 플랫폼 솔루션을 이해하고, 배포하고, 사용하는 데 도움이 되는 가이드입니다. 이 솔루션에서는 공개적으로 표시되는 온라인 상점 웹사이트를 사용하여 소매업체를 위한 간단한 전자상거래 애플리케이션을 빌드하고 실행하는 방법을 보여줍니다. 이를 통해 사용량 급증을 처리하기 위해 확장되고(예: 시즌별 세일과 같은 최대 규모의 이벤트) 방문자의 위치를 기반으로 요청을 관리할 수 있는 애플리케이션을 만드는 방법을 알 수 있습니다. 이 설계는 온라인 상점에서 지리적으로 분산된 고객에게 일관된 서비스를 제공하는 데 도움이 됩니다.
이 솔루션은 서버리스 기능으로 확장 가능한 전자상거래 웹 앱을 배포하는 방법을 알아보려는 경우에 좋은 시작점입니다. 세부적인 운영 관리를 원하는 경우 Kubernetes에 배포된 전자상거래 웹 앱 솔루션을 확인하세요.
이 문서에서는 사용자가 Google Cloud는 아니더라도 기본 클라우드 개념에 익숙하다고 가정합니다. Terraform 사용 경험이 도움이 됩니다.
목표
이 솔루션 가이드는 다음을 수행하는 데 도움이 됩니다.
- 전자상거래 웹사이트의 시스템 아키텍처를 설계하는 방법을 알아봅니다.
- 성능, 확장성, 응답성을 위해 전자상거래 웹사이트를 최적화합니다.
- 부하 제한을 모니터링하고 예측합니다.
- 추적 및 오류 보고를 사용하여 문제를 파악하고 관리합니다.
제품
이 솔루션에는 다음과 같은 Google Cloud 제품이 사용됩니다.
- Cloud Run: 서버리스 컨테이너화된 앱을 빌드하고 배포할 수 있는 완전 관리형 서비스입니다. Google Cloud에서 확장과 기타 인프라 태스크를 처리하여 코드의 비즈니스 로직에 집중할 수 있습니다.
- Cloud SQL: Google Cloud 인프라에서 완전하게 관리되는 클라우드 기반 PostgreSQL 데이터베이스입니다.
- Secret Manager: 보안 비밀을 바이너리 blob 또는 텍스트 문자열로 저장, 관리, 액세스할 수 있는 서비스입니다. Secret Manager를 사용하여 런타임 시 애플리케이션에 필요한 데이터베이스 비밀번호, API 키 또는 TLS 인증서를 저장할 수 있습니다.
- Cloud Storage: 다양한 데이터 유형에 맞게 저비용, 무제한 객체 스토리지를 제공하는 엔터프라이즈급 서비스입니다. Google Cloud 내부 및 외부에서 데이터에 액세스할 수 있고 지리적으로 중복되도록 데이터를 복제할 수 있습니다.
- Firebase 호스팅: 웹 애플리케이션 및 정적 콘텐츠를 배포하고 제공하는 완전 관리형 호스팅 서비스입니다.
- Cloud Logging: Google Cloud와 다른 클라우드의 로깅 데이터 및 이벤트를 저장, 검색, 분석, 모니터링하고 알림을 받을 수 있는 서비스입니다.
- Cloud Trace: Google Cloud용 분산 추적 시스템을 사용하면 애플리케이션이 사용자 또는 다른 애플리케이션으로부터 들어오는 요청을 처리하는 데 걸리는 시간과 요청 처리 시 수행된 RPC 호출과 같은 작업을 완료하는 데 걸리는 시간을 파악할 수 있습니다.
- Error Reporting: 이 서비스는 실행 중인 클라우드 서비스에서 발생한 오류를 집계하고 표시합니다. Error Reporting은 근본 원인이 동일한 것으로 간주되는 오류를 그룹화합니다.
아키텍처
다음 다이어그램은 솔루션의 아키텍처를 보여줍니다.
요청 흐름
다음은 전자상거래 플랫폼의 요청 처리 흐름입니다. 흐름의 단계에는 앞의 아키텍처 다이어그램에 표시된 대로 번호가 지정되어 있습니다.
- Firebase 호스팅 클라이언트 프런트엔드입니다. 프런트엔드는 API 데이터의 클라이언트 측 렌더링을 위해 Lit 및 웹 구성요소를 사용합니다.
- 웹 클라이언트는 Cloud Run 서비스로 실행되는 API 백엔드를 호출합니다. Cloud Run API 서버는 Django REST Framework를 사용하여 Django로 작성됩니다.
- Python 애플리케이션의 구성 및 기타 보안 비밀은 Secret Manager에 저장됩니다.
- 애플리케이션의 정적 애셋은 Cloud Storage에 저장됩니다.
- PostgreSQL을 사용하는 Cloud SQL 데이터베이스는 Python 애플리케이션의 관계형 데이터베이스 백엔드로 사용됩니다.
- Cloud Logging, Cloud Trace, Error Reporting은 다른 Cloud 제품 및 Cloud Run API 서버에서 전송한 로그, OpenTelemetry trace, 오류 보고서를 저장합니다. 이 데이터를 사용하면 올바른 애플리케이션 동작을 모니터링하고 예기치 않은 동작 문제를 해결할 수 있습니다.
비용
서버리스 컴퓨팅 솔루션이 포함된 전자상거래 플랫폼에서 사용하는 Google Cloud 리소스의 예상 비용은 Google Cloud 가격 계산기에서 미리 계산된 예상 비용을 참조하세요.
예상 비용을 시작점으로 배포 비용을 계산합니다. 솔루션에 사용된 리소스에 적용할 모든 구성 변경사항을 반영하도록 예상 비용을 수정할 수 있습니다.
사전 계산된 예상 비용은 다음과 같은 특정 요소에 대한 가정을 기반으로 합니다.
- 리소스가 배포된 Google Cloud 위치
- 리소스가 사용된 시간의 양
솔루션 배포
이 섹션에서는 솔루션 배포 과정을 안내합니다.
Google Cloud 프로젝트 만들기 또는 선택
솔루션을 배포할 때 리소스가 배포되는 Google Cloud 프로젝트를 선택합니다. 기존 프로젝트를 사용할지 아니면 새 프로젝트를 만들지 결정할 때는 다음 요소를 고려하세요.
- 솔루션에 대한 프로젝트를 만들 경우 배포가 더 이상 필요하지 않으면 프로젝트를 삭제하고 비용이 계속 청구되지 않도록 할 수 있습니다. 기존 프로젝트를 사용하는 경우 더 이상 필요하지 않을 때 배포를 삭제해야 합니다.
- 새 프로젝트를 사용하면 프로덕션 워크로드에 사용되는 리소스와 같이 이전에 프로비저닝된 리소스와의 충돌을 방지할 수 있습니다.
새 프로젝트에 솔루션을 배포하려면 배포를 시작하기 전에 프로젝트를 만듭니다.
프로젝트를 만들려면 다음 단계를 수행합니다.
-
In the Google Cloud console, go to the project selector page.
-
Click Create project.
-
Name your project. Make a note of your generated project ID.
-
Edit the other fields as needed.
-
Click Create.
필수 IAM 권한 가져오기
배포 프로세스를 시작하려면 다음 표에 나온 Identity and Access Management(IAM) 권한이 필요합니다. 솔루션을 배포하려는 프로젝트에 대한 roles/owner
기본 역할이 있으면 이미 모든 필수 권한을 갖춘 것입니다. roles/owner
역할이 없으면 관리자에게 연락하여 해당 권한(또는 이러한 권한이 포함된 역할)을 부여해 달라고 요청하세요.
필수 IAM 권한 | 필수 권한이 포함된 사전 정의된 역할 |
---|---|
|
서비스 사용량 관리자 ( roles/serviceusage.serviceUsageAdmin ) |
|
서비스 계정 관리자 ( roles/iam.serviceAccountAdmin ) |
|
프로젝트 IAM 관리자 ( roles/resourcemanager.projectIamAdmin ) |
config.deployments.create config.deployments.list |
Cloud Infrastructure Manager 관리자 ( roles/config.admin ) |
솔루션을 위해 생성된 서비스 계정
콘솔을 통해 배포 프로세스를 시작하면 Google이 솔루션 배포를 위해 서비스 계정을 자동으로 생성합니다(이후 필요할 때 배포 삭제 가능). 이 서비스 계정에는 특정 일시적으로 IAM 권한이 할당됩니다. 즉, 솔루션 배포 및 삭제 작업이 완료되면 권한이 자동으로 취소됩니다. 이 가이드 뒷부분에서 설명한 대로 배포를 삭제한 후에는 서비스 계정을 삭제하는 것이 좋습니다.
서비스 계정에 할당된 역할 보기
Google Cloud 프로젝트 또는 조직 관리자에게 이 정보가 필요한 경우를 대비해 여기에 역할을 나열해 두었습니다.
- Cloud SQL 관리자(
roles/cloudsql.admin
) - Compute Engine 관리자(
roles/compute.admin
) - Compute Engine 네트워크 관리자(
roles/compute.networkAdmin
) - Firebase Service Management 서비스 에이전트(
roles/firebase.managementServiceAgent
) - Firebase 호스팅 관리자(
roles/firebasehosting.admin
) - 서비스 계정 관리자(
roles/iam.serviceAccountAdmin
) - 서비스 계정 사용자(
roles/iam.serviceAccountUser
) - 프로젝트 IAM 관리자(
roles/resourcemanager.projectIamAdmin
) - Cloud Run 관리자(
roles/run.admin
) - Secret Manager 관리자(
roles/secretmanager.admin
) - Cloud Storage 관리자(
roles/storage.admin
)
배포 방법 선택
최소한의 노력으로 이 솔루션을 배포할 수 있도록 GitHub에서 Terraform 구성을 제공합니다. Terraform 구성은 솔루션에 필요한 모든 Google Cloud 리소스를 정의합니다.
다음 방법 중 하나를 사용하여 솔루션을 배포할 수 있습니다.
콘솔을 통해: 기본 구성으로 솔루션을 사용해 보고 작동 방식을 확인하려면 이 방법을 사용합니다. Cloud Build에서 솔루션에 필요한 모든 리소스를 배포합니다. 배포된 솔루션이 더 이상 필요하지 않으면 콘솔을 통해 이 솔루션을 삭제할 수 있습니다. 솔루션을 배포한 후 만든 모든 리소스를 개별적으로 삭제해야 할 수도 있습니다.
이 배포 방법을 사용하려면 콘솔을 통해 배포의 안내를 따르세요.
Terraform CLI 사용: 솔루션을 맞춤설정하거나 코드형 인프라(IaC) 방식을 사용하여 리소스 프로비저닝과 관리를 자동화하려면 이 방법을 사용합니다. GitHub에서 Terraform 구성을 다운로드하고 원하는 경우 필요에 따라 코드를 맞춤설정한 후 Terraform CLI를 사용하여 솔루션을 배포합니다. 솔루션을 배포한 후에도 계속 Terraform을 사용하여 솔루션을 관리할 수 있습니다.
이 배포 방법을 사용하려면 Terraform CLI를 사용하여 배포의 안내를 따르세요.
콘솔을 통해 배포
사전 구성된 솔루션을 배포하려면 다음 단계를 완료하세요.
Google Cloud 점프 스타트 솔루션 카탈로그에서 서버리스 컴퓨팅을 사용하는 전자상거래 플랫폼 솔루션으로 이동합니다.
솔루션의 예상 비용 및 예상 배포 시간 등 페이지에 제공된 정보를 검토합니다.
솔루션 배포를 시작할 준비가 되면 배포를 클릭합니다.
단계별 대화형 가이드가 표시됩니다.
대화형 가이드의 단계를 완료합니다.
배포에 입력하는 이름을 기록해 둡니다. 이 이름은 나중에 배포를 삭제할 때 필요합니다.
배포를 클릭하면 솔루션 배포 페이지가 표시됩니다. 이 페이지의 상태 필드에 배포 중이 표시됩니다.
솔루션이 배포될 때까지 기다립니다.
배포가 실패하면 상태 필드에 실패가 표시됩니다. Cloud Build 로그를 사용하여 오류를 진단할 수 있습니다. 자세한 내용은 콘솔을 통해 배포 시 오류를 참조하세요.
배포가 완료되면 상태 필드가 배포됨으로 변경됩니다.
배포된 전자상거래 웹 앱을 보고 사용하려면 Avocano 배포 살펴보기의 안내를 따르세요.
배포된 Google Cloud 리소스와 구성을 보려면 대화형 둘러보기를 사용합니다.
솔루션이 더 이상 필요하지 않으면 Google Cloud 리소스 비용이 계속 청구되지 않도록 배포를 삭제할 수 있습니다. 자세한 내용은 배포 삭제를 참조하세요.
Terraform CLI를 사용하여 배포
이 섹션에서는 솔루션을 맞춤설정하거나 Terraform CLI를 사용하여 솔루션 프로비저닝과 관리를 자동화하는 방법을 설명합니다. Terraform CLI를 사용하여 배포하는 솔루션은 Google Cloud 콘솔의 솔루션 배포 페이지에 표시되지 않습니다.
Terraform 클라이언트 설정
Cloud Shell 또는 로컬 호스트에서 Terraform을 실행할 수 있습니다. 이 가이드에서는 Google Cloud에서 인증을 수행하기 위해 Terraform이 사전 설치되어 구성된 Cloud Shell에서 Terraform을 실행하는 방법을 설명합니다.
이 솔루션의 Terraform 코드는 GitHub 저장소에서 사용할 수 있습니다.
GitHub 저장소를 Cloud Shell에 클론합니다.
GitHub 저장소를 Cloud Shell로 다운로드하는 것을 확인하는 메시지가 표시됩니다.
확인을 클릭합니다.
Cloud Shell이 별도의 브라우저 탭에서 시작되고 Terraform 코드가 Cloud Shell 환경의
$HOME/cloudshell_open
디렉터리에 다운로드됩니다.Cloud Shell에서 현재 작업 디렉터리가
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
인지 확인합니다. 이 디렉터리에 솔루션에 대한 Terraform 구성 파일이 포함되어 있습니다. 해당 디렉터리로 변경해야 하는 경우 다음 명령어를 실행합니다.cd $HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
다음 명령어를 실행하여 Terraform을 초기화합니다.
terraform init
다음 메시지가 표시될 때까지 기다립니다.
Terraform has been successfully initialized!
Terraform 변수 구성
다운로드한 Terraform 코드에는 요구사항에 따라 배포를 맞춤설정하는 데 사용할 수 있는 변수가 포함되어 있습니다. 예를 들어 Google Cloud 프로젝트와 솔루션을 배포할 리전을 지정할 수 있습니다.
현재 작업 디렉터리가
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.동일한 디렉터리에서
terraform.tfvars
라는 텍스트 파일을 만듭니다.terraform.tfvars
파일에서 다음 코드 스니펫을 복사하고 필수 변수의 값을 설정합니다.- 코드 스니펫에서 주석으로 제공된 안내를 따릅니다.
- 이 코드 스니펫에는 값을 설정해야 하는 변수만 포함됩니다. Terraform 구성에는 기본값이 있는 다른 변수가 포함됩니다. 모든 변수 및 기본값을 검토하려면
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
디렉터리에서 사용할 수 있는variables.tf
파일을 참조하세요. terraform.tfvars
파일에 설정한 각 값이variables.tf
파일에 선언된 변수 유형과 일치하는지 확인합니다. 예를 들어variables.tf
파일의 변수에 정의된 유형이bool
인 경우terraform.tfvars
파일에서 해당 변수 값으로true
또는false
를 지정해야 합니다.# This is an example of the terraform.tfvars file. # The values in this file must match the variable types declared in variables.tf. # The values in this file override any defaults in variables.tf. # ID of the project in which you want to deploy the solution project_id = "PROJECT_ID" # Google Cloud region where you want to deploy the solution # Example: us-central1 region = "REGION" # Google Cloud zone where you want to deploy the solution # Example: us-central1-a zone = "ZONE" # Container Registry that hosts the client image client_image_host = "hsa-public/serverless-ecommerce" # Container Registry that hosts the server image server_image_host = "hsa-public/serverless-ecommerce"
필수 변수에 할당할 수 있는 값에 대한 자세한 내용은 다음을 참조하세요.
- PROJECT_ID: 프로젝트 식별
- REGION 및 ZONE: 사용 가능한 리전 및 영역
Terraform 구성 검증 및 검토
현재 작업 디렉터리가
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.Terraform 구성에 오류가 없는지 확인합니다.
terraform validate
명령어가 오류를 반환하면 구성에서 수정이 필요한 항목을 변경한 후
terraform validate
명령어를 다시 실행합니다. 명령어가 다음 메시지를 반환할 때까지 이 단계를 반복합니다.Success! The configuration is valid.
구성에서 정의된 리소스를 검토합니다.
terraform plan
앞에서 설명한 대로
terraform.tfvars
파일을 만들지 않은 경우 Terraform에서 기본값이 없는 변수의 값을 입력하라는 메시지를 표시합니다. 필수 값을 입력합니다.terraform plan
명령어 출력은 구성을 적용할 때 Terraform이 프로비저닝하는 리소스 목록입니다.변경하려면 구성을 수정한 후
terraform validate
및terraform plan
명령어를 다시 실행합니다.
리소스 프로비저닝
Terraform 구성을 더 이상 변경할 필요가 없으면 리소스를 배포합니다.
현재 작업 디렉터리가
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.Terraform 구성을 적용합니다.
terraform apply
앞에서 설명한 대로
terraform.tfvars
파일을 만들지 않은 경우 Terraform에서 기본값이 없는 변수의 값을 입력하라는 메시지를 표시합니다. 필수 값을 입력합니다.Terraform에서 생성될 리소스 목록을 표시합니다.
작업을 수행하라는 메시지가 표시되면
yes
를 입력합니다.Terraform에서 배포 진행 상황을 보여주는 메시지가 표시됩니다.
배포를 완료할 수 없으면 Terraform에서 실패를 일으킨 오류가 표시됩니다. 오류 메시지를 검토하고 구성을 업데이트하여 오류를 해결합니다. 그런 후
terraform apply
명령어를 다시 실행합니다. Terraform 오류 해결에 도움이 필요하면 Terraform CLI를 사용하여 솔루션 배포 시 오류를 참조하세요.모든 리소스가 만들어지면 Terraform에 다음 메시지가 표시됩니다.
Apply complete!
배포된 전자상거래 웹 앱을 보고 사용하려면 Avocano 배포 살펴보기의 안내를 따르세요.
배포된 Google Cloud 리소스와 구성을 보려면 대화형 둘러보기를 사용합니다.
솔루션이 더 이상 필요하지 않으면 Google Cloud 리소스 비용이 계속 청구되지 않도록 배포를 삭제할 수 있습니다. 자세한 내용은 배포 삭제를 참조하세요.
Avocano 배포 살펴보기
이제 Avocano 웹사이트 애플리케이션이 배포되었습니다. Avocano 웹사이트를 방문하여 Google Cloud 콘솔에서 솔루션이 어떻게 작동하는지 살펴볼 수 있습니다. 제공된 주소에 사이트가 표시되려면 애플리케이션을 배포한 후 몇 분 정도 걸릴 수 있습니다.
Avocano란 무엇인가요?
이 솔루션은 Avocano라는 샘플 애플리케이션을 사용하여 서버리스 애플리케이션에 사용되는 여러 도구와 제품이 포함된 웹 앱의 배포와 관리를 보여줍니다. Avocano는 전자상거래 웹 앱의 실제 구현을 모방하는 애플리케이션입니다.
Avocano 프런트엔드는 장바구니에 상품을 추가하고 결제 프로세스를 완료하려고 시도할 때 매장에서 가짜라고 표시되는(Avoca--no!) 허위 오프라인 매장을 제공합니다. 아보카도를 실제로 구매할 수는 없지만 애플리케이션에서 사용 가능한 제품의 양을 하나씩 줄여 인벤토리 관리를 시연합니다.
프런트엔드 살펴보기
솔루션 배포의 프런트엔드를 실행하려면 다음 단계를 따르세요.
- Firebase Console을 엽니다.
- 기존 프로젝트를 선택합니다.
- 빌드 > 호스팅 섹션으로 이동합니다.
- web.app으로 끝나는 도메인을 선택합니다. 샘플 애플리케이션의 프런트엔드가 새 브라우저 창에서 열립니다.
이제 고객이 보는 것처럼 Avocano 웹사이트와 상호작용할 수 있습니다. 여기에는 제품 탐색, 장바구니에 제품 추가, 게스트로 결제 등이 포함됩니다.
자동 확장 및 동시 실행 구성 보기
Cloud Run은 트래픽에 따라 0에서부터 컨테이너 인스턴스를 자동으로 확장하거나 축소하여 앱에 빠른 시작 시간을 제공합니다.
자동 확장 및 동시 실행 설정 이해하기
Cloud Run의 자동 확장 및 동시 실행 설정이 앱의 성능과 비용에 영향을 미칠 수 있다는 점을 이해하는 것이 중요합니다. 이러한 설정은 아래에 설명되어 있습니다.
최소 인스턴스: 서비스에 유휴 인스턴스를 사용 설정하도록 최소 인스턴스 설정을 설정할 수 있습니다. 더 높은 트래픽을 예상하여 최소 인스턴스 설정을 늘리면 처음 N명의 사용자에 대한 응답 시간을 최소화할 수 있습니다. 특히 활성 인스턴스 0개에서 확장할 때 서비스의 지연 시간을 단축해야 하는 경우 웜 상태로 유지하고 요청 처리를 위해 준비할 최소 컨테이너 인스턴스 수를 지정할 수 있습니다.
최대 인스턴스: Cloud Run에서 최대 인스턴스 설정을 늘리면 예상되는 매우 높은 트래픽을 처리하는 데 도움이 될 수 있습니다. 이러한 시나리오에서는 현재 할당량도 평가하고 증가 요청을 고려해야 합니다. 최대 인스턴스 설정을 줄이면 예기치 않은 비용이 발생하거나 기본 지원 인프라(예: 데이터베이스 용량)의 활용도가 높아지는 것을 방지할 수 있습니다.
동시 실행: Cloud Run 동시 실행 설정은 특정 컨테이너 인스턴스가 동시에 처리할 수 있는 최대 요청 수를 지정합니다. 애플리케이션 동작에 대해 메모리, CPU, 동시 실행을 최적화하면 각 컨테이너 인스턴스의 사용률이 극대화되고, 새 인스턴스로 확장할 필요성이 최소화됩니다. 자세한 내용은 동시 실행 최적화를 참조하세요.
자동 확장 및 동시 실행 설정 보기
Cloud Run 서비스의 현재 최소 및 최대 인스턴스 설정과 동시 실행 설정을 보려면 다음 안내를 따르세요.
- Cloud Run으로 이동
- 관심이 있는 서비스를 클릭하여 서비스 세부정보 페이지를 엽니다.
- 버전 탭을 클릭합니다.
- 오른쪽의 세부정보 패널에서 현재 최소 인스턴스, 최대 인스턴스, 동시 실행 설정이 컨테이너 탭 아래에 표시됩니다.
이러한 설정을 조정하여 앱 성능을 최적화하는 방법을 알아보려면 Cloud Run 문서의 일반 개발 팁을 참조하세요.
트래픽 로그 보기
Cloud Run의 로깅 도구를 사용하여 앱 트래픽을 감시하고 문제가 발생하면 알림을 받을 수 있습니다.
Cloud Run 서비스의 로그를 보려면 다음 안내를 따르세요.
- Cloud Run으로 이동
- 표시되는 목록에서 원하는 서비스를 클릭합니다.
- 로그 탭을 클릭하여 이 서비스의 모든 버전에 대한 요청 및 컨테이너 로그를 가져옵니다. 로그 심각도 수준으로 필터링할 수 있습니다.
Cloud Run은 표준 출력 및 표준 오류에 기록된 모든 항목, /var/log/
의 모든 항목 등 여러 위치에서 로그를 자동으로 캡처합니다.
Cloud Logging 라이브러리로 수행되는 모든 수동 로깅도 캡처됩니다.
로그 탐색기에서 보기를 클릭하여 Cloud Logging에서 이 서비스의 로그를 직접 볼 수도 있습니다.
Avocano 앱에서 다음 사용자 작업을 시도하여 로그에서 볼 수 있는 해당 출력을 트리거합니다.
사용자 작업 | 로그 출력 |
---|---|
결제 유형으로 수집을 사용하여 장바구니를 구매하고 장바구니의 제품 양이 인벤토리 수를 초과하지 않습니다. | 로그 출력에 httpRequest 상태가 200인 정보 로그가 표시됩니다. |
수집을 결제 유형으로 사용하여 장바구니를 구매하지만 장바구니의 제품 양이 인벤토리 수를 초과합니다. | 로그 출력에 httpRequest 상태가 400인 경고 로그가 표시됩니다. |
크레딧을 결제 유형으로 사용하여 장바구니를 구매합니다. | 로그 출력에 httpRequest 상태가 501인 오류 로그가 표시됩니다. |
serializers.py
파일에서 400/501
HTTP 응답으로 이어지는 오류를 발생시키는 코드를 볼 수 있습니다. Cloud Run이 응답을 기록하고 해당 요청 로그 항목을 생성합니다.
로그 기반 알림을 사용하면 포함된 로그에 특정 메시지가 나타날 때마다 알림을 받을 수 있습니다.
trace 계측 및 캡처된 trace 보기
이 솔루션은 Open Telemetry Python 자동 계측을 사용하여 Avocano 애플리케이션의 원격 분석 데이터를 캡처합니다.
추적 구현 방법 이해
이 솔루션은 자동 계측을 사용하여 trace를 생성하기 위해 다음 코드 및 구성 설정을 구현합니다.
- 다음을 포함하여 requirements.txt 파일에 Cloud Trace의 종속 항목을 추가합니다.
opentelemetry-distro
: Open Telemetry API, SDK, 명령줄 도구를 설치합니다.opentelemetry-instrumentation
: Python 자동 계측에 대한 지원을 추가합니다.opentelemetry-exporter-gcp-trace
: trace를 Cloud Trace로 내보내기 위한 지원을 제공합니다.opentelemetry-resource-detector
: Google Cloud 리소스 감지를 지원합니다.opentelemetry-instrumentation-django
: Django 애플리케이션에 대한 추적 요청을 허용합니다.
- 서버가 Cloud Trace에 쓸 수 있도록
iam.tf
파일에서 IAM 바인딩을 설정합니다. - Cloud Trace로 내보내기를 사용하려면
services.tf
파일에서OTEL_TRACES_EXPORTER
환경 변수를 구성합니다. server/Procfile
에서는 Avocano 앱에서opentelemetry-instrument
명령어를 실행하도록 서버를 구성합니다. 이 명령어는 Avocano의 패키지를 감지하고 가능한 경우 자동 추적 계측을 적용합니다.
Python용 Cloud Trace 데이터를 수집하는 방법에 대한 자세한 내용은 Python 및 OpenTelemetry를 참조하세요.
지연 시간 데이터 보기
요청의 지연 시간 데이터를 보려면 다음 단계를 따르세요.
- Cloud Trace로 이동
- Trace 목록 페이지의 trace 선택 섹션에서 캡처된 trace를 나타내는 파란색 점을 클릭합니다. 지연 시간 열에는 캡처된 trace의 지연 시간이 표시됩니다.
Trace 목록 페이지에서 다음 시각화를 사용하여 trace 데이터도 확인할 수 있습니다.
- 폭포식 그래프: 애플리케이션을 통해 전송되는 전체 요청을 나타냅니다. 타임라인의 각 단계가 스팬이며 스팬을 클릭하여 세부정보를 볼 수 있습니다. Cloud Run은 요청 처리 및 부하 분산과 같은 내부 작업을 위한 스팬을 자동으로 만듭니다. 이 스팬은 Avocano에서 생성한 스팬과 동일한 폭포식 그래프에 표시되므로 요청의 전체 기간을 볼 수 있습니다.
- 스팬 세부정보: trace용으로 계측할 때 앱 코드에 추가한 모든 라벨 또는 주석을 표시합니다.
맞춤설정된 trace를 추가하려면 Open Telemetry 문서의 수동 계측을 참조하세요.
설계 권장사항
이 섹션에서는 서버리스 컴퓨팅 솔루션과 함께 전자상거래 플랫폼을 사용하여 보안, 안정성, 비용, 성능에 대한 요구사항을 충족하는 아키텍처를 개발하기 위한 권장사항을 제공합니다.
각 영역의 설계 권장사항을 보려면 적절한 탭을 클릭하세요.
보안 강화
설계 중점 | 권장사항 |
---|---|
데이터 암호화 |
기본적으로 Cloud Run은 Google 관리 암호화 키를 사용하여 데이터를 암호화합니다. 사용자가 제어하는 키를 사용하여 컨테이너를 보호하려면 고객 관리 암호화 키를 사용하면 됩니다. 자세한 내용은 고객 관리 암호화 키 사용을 참조하세요. |
소프트웨어 공급망 보안 | 승인된 컨테이너 이미지만 Cloud Run 서비스에 배포되도록 하려면 Binary Authorization을 사용하면 됩니다. |
안정성 개선
설계 중점 | 권장사항 |
---|---|
앱 확장 | 이 솔루션의 Cloud Run 서비스는 요청 부하에 따라 컨테이너 인스턴스를 수평으로 자동 확장하도록 구성됩니다. 자동 확장 매개변수를 검토하고 요구사항에 따라 조정합니다. 자세한 내용은 컨테이너 인스턴스 자동 확장 정보를 참조하세요. |
요청 처리 | 컨테이너 인스턴스에 클라이언트별 상태를 저장하는 Cloud Run 서비스의 응답성을 개선하려면 세션 어피니티를 사용하면 됩니다. 동일한 클라이언트의 요청은 최선의 방식으로 동일한 컨테이너 인스턴스로 라우팅됩니다. 자세한 내용은 세션 어피니티 설정(서비스)을 참조하세요. |
데이터 내구성 | 데이터가 손실되지 않도록 보호하려면 Cloud SQL 데이터베이스의 자동 백업을 사용하면 됩니다. 자세한 내용은 Cloud SQL 백업 정보를 참조하세요. |
데이터베이스 고가용성(HA) | 이 솔루션의 Cloud SQL 데이터베이스는 단일 영역에 배포됩니다. HA를 위해 멀티 영역 구성을 사용할 수 있습니다. 자세한 내용은 고가용성 정보를 참조하세요. 데이터베이스 HA가 중요한 요구사항인 경우 PostgreSQL용 AlloyDB를 대체 Google Cloud 서비스로 고려할 수 있습니다. |
데이터베이스 안정성 | 이 솔루션의 Cloud SQL 인스턴스는 4GB 메모리의 CPU 2개를 사용하는
|
할당량 및 한도 | Cloud Run 리소스 수는 제한되어 있습니다. 연휴 또는 할인 이벤트 등으로 인해 트래픽이 급증할 것으로 예상되는 경우 할당량 증가를 요청해야 합니다. 자세한 내용은 할당량을 늘리는 방법을 참조하세요. 일부 할당량 요청은 수동 승인이 필요하므로 미리 계획해야 합니다. 할당량 도달 진행률을 기반으로 알림을 설정할 수도 있습니다. |
비용 최적화
설계 중점 | 권장사항 |
---|---|
Resource efficiency | Cloud Run은 CPU 사용량과 메모리 사용량에 따라 컨테이너 인스턴스로 전송해야 하는 요청 수를 결정합니다. 최대 동시 실행 설정을 늘리면 Cloud Run에서 만들어야 하는 컨테이너 인스턴스 수를 줄여 비용을 줄일 수 있습니다. 자세한 내용은 인스턴스당 최대 동시 요청(서비스)을 참조하세요. 이 솔루션의 Cloud Run 서비스는 요청 처리 중에만 CPU를 할당하도록 구성됩니다. Cloud Run 서비스가 요청 처리를 완료하면 컨테이너 인스턴스의 CPU 액세스가 중지됩니다. 이 구성의 비용 및 성능 영향에 대한 자세한 내용은 CPU 할당(서비스)을 참조하세요. |
성능 개선
설계 중점 | 권장사항 |
---|---|
앱 시작 시간 | 콜드 스타트가 성능에 미치는 영향을 줄이려면 Cloud Run 컨테이너 인스턴스의 최소 개수를 0이 아닌 값으로 구성하면 됩니다. 자세한 내용은 Cloud Run의 일반적인 개발 팁을 참조하세요. |
동시 실행 조정 | 이 솔루션은 개별 컨테이너 처리량을 극대화하도록 미세 조정됩니다. Cloud Run은 여러 요청을 처리하도록 동시 실행을 자동으로 조정합니다. 하지만 컨테이너가 많은 동시 요청을 처리할 수 없거나 컨테이너가 더 많은 양의 요청을 처리할 수 있는 경우 기본 최대 동시 실행을 조정해야 합니다. 자세한 내용은 동시 실행 최적화를 참조하세요. |
데이터베이스 성능 | 성능에 민감한 애플리케이션의 경우 더 큰 머신 유형을 사용하고 스토리지 용량을 늘려 Cloud SQL의 성능을 향상시킬 수 있습니다. 데이터베이스 성능이 중요한 요구사항인 경우 PostgreSQL용 AlloyDB를 대체 Google Cloud 서비스로 고려할 수 있습니다. |
다음에 유의하세요.
- 설계를 변경하기 전에 비용 영향을 평가하고 다른 기능과의 잠재적 장단점을 고려하세요. Google Cloud 가격 계산기를 사용하여 설계 변경으로 인한 비용 영향을 평가할 수 있습니다.
- 솔루션의 설계 변경사항을 구현하려면 Terraform 코딩에 대한 전문 지식과 솔루션에 사용되는 Google Cloud 서비스에 대한 고급 지식이 필요합니다.
- Google 제공 Terraform 구성을 수정한 후 오류가 발생하면 GitHub에서 문제를 만듭니다. GitHub 문제는 최선을 다해 검토되며 일반적인 사용 질문을 위한 것이 아닙니다.
- Google Cloud에서 프로덕션용 환경을 설계하고 설정하는 방법에 대한 자세한 내용은 Google Cloud에서 시작 영역 설계 및 Google Cloud 설정 체크리스트를 참조하세요.
솔루션 배포 삭제
솔루션 배포가 더 이상 필요하지 않으면 만든 리소스에 대해 요금이 계속 청구되지 않도록 배포를 삭제합니다.
콘솔을 통해 삭제
콘솔을 통해 솔루션을 배포한 경우 다음 절차를 따릅니다.
Google Cloud 콘솔에서 솔루션 배포 페이지로 이동합니다.
삭제할 배포가 포함된 프로젝트를 선택합니다.
삭제할 배포를 찾습니다.
작업을 클릭한 다음 삭제를 선택합니다.
배포 이름을 입력한 후 확인을 클릭합니다.
상태 필드에 삭제 중이 표시됩니다.
삭제가 실패하면 배포 삭제 시 오류의 문제 해결 안내를 참조하세요.
솔루션에 사용한 Google Cloud 프로젝트가 더 이상 필요하지 않으면 프로젝트를 삭제할 수 있습니다. 자세한 내용은 선택사항: 프로젝트 삭제를 참조하세요.
Terraform CLI를 사용하여 삭제
Terraform CLI를 사용하여 솔루션을 배포한 경우 다음 절차를 수행합니다.
Cloud Shell에서 현재 작업 디렉터리가
$HOME/cloudshell_open/terraform-dynamic-python-webapp/infra
인지 확인합니다. 그렇지 않으면 해당 디렉터리로 이동합니다.Terraform에서 프로비저닝한 리소스를 삭제합니다.
terraform destroy
Terraform에서 소멸될 리소스 목록을 표시합니다.
작업을 수행하라는 메시지가 표시되면
yes
를 입력합니다.Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.
Destroy complete!
삭제가 실패하면 배포 삭제 시 오류의 문제 해결 안내를 참조하세요.
솔루션에 사용한 Google Cloud 프로젝트가 더 이상 필요하지 않으면 프로젝트를 삭제할 수 있습니다. 자세한 내용은 선택사항: 프로젝트 삭제를 참조하세요.
선택사항: 프로젝트 삭제
새 Google Cloud 프로젝트에 솔루션을 배포했고 프로젝트가 더 이상 필요 없으면 다음 단계에 따라 이를 삭제합니다.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 프롬프트에서 프로젝트 ID를 입력한 후 종료를 클릭합니다.
프로젝트를 보존하기로 결정한 경우에는 다음 섹션에 설명된 대로 이 솔루션을 위해 만든 서비스 계정을 삭제합니다.
선택사항: 서비스 계정 삭제
솔루션에 사용한 프로젝트를 삭제한 경우에는 이 섹션을 건너뜁니다.
이 가이드의 앞에서 설명한 것처럼 솔루션을 배포할 때 서비스 계정이 자동으로 생성되었습니다. 서비스 계정에 일시적으로 특정 IAM 권한이 할당되었습니다. 즉, 솔루션 배포 및 삭제 작업이 완료된 후 권한이 자동으로 취소되었지만 서비스 계정은 삭제되지 않았습니다. 이 서비스 계정을 삭제하는 것이 좋습니다.
Google Cloud 콘솔을 통해 솔루션을 배포했으면 솔루션 배포 페이지로 이동합니다. 이미 해당 페이지에 있으면 브라우저를 새로고침합니다. 백그라운드에서 프로세스가 트리거되어 서비스 계정이 삭제됩니다. 추가 작업은 필요 없습니다.
Terraform CLI를 사용하여 솔루션을 배포한 경우 다음 단계를 완료합니다.
Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.
솔루션에 사용한 프로젝트를 선택합니다.
삭제하려는 서비스 계정을 선택합니다.
솔루션에서 만든 서비스 계정의 이메일 ID 형식은 다음과 같습니다.
goog-sc-DEPLOYMENT_NAME-NNN@PROJECT_ID.iam.gserviceaccount.com
이메일 ID에는 다음 값이 포함됩니다.
- DEPLOYMENT_NAME: 배포 이름입니다.
- NNN: 임의의 3자리 숫자입니다.
- PROJECT_ID: 솔루션을 배포한 프로젝트의 ID입니다.
삭제를 클릭합니다.
오류 문제 해결
오류 진단 및 해결을 위해 수행할 수 있는 작업은 배포 방법 및 오류 복잡성에 따라 달라집니다.
콘솔을 통해 배포 시 오류
콘솔을 사용할 때 배포가 실패하면 다음을 수행합니다.
솔루션 배포 페이지로 이동합니다.
배포가 실패하면 상태 필드에 실패가 표시됩니다.
실패를 일으킨 오류에 대한 세부정보를 보려면 다음 안내를 따르세요.
작업을 클릭합니다.
Cloud Build 로그 보기를 선택합니다.
Cloud Build 로그를 검토하고 적절한 조치에 따라 실패를 일으킨 문제를 해결합니다.
Terraform CLI를 사용하여 배포 시 오류
Terraform 사용 시 배포가 실패하면 terraform
apply
명령어 출력에 문제 진단을 위해 검토할 수 있는 오류 메시지가 포함됩니다.
다음 섹션의 예시에서는 Terraform을 사용할 때 발생할 수 있는 배포 오류를 보여줍니다.
API가 사용 설정되지 않음 오류
프로젝트를 만든 후 솔루션을 새 프로젝트에 즉시 배포하려고 하면 다음과 같은 오류가 표시되면서 배포가 실패할 수 있습니다.
Error: Error creating Network: googleapi: Error 403: Compute Engine API has not
been used in project PROJECT_ID before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/compute.googleapis.com/overview?project=PROJECT_ID
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.
이 오류가 발생하면 몇 분 정도 기다린 후 terraform apply
명령어를 다시 실행합니다.
요청한 주소를 할당하지 못하는 오류
terraform apply
명령어를 실행하면 다음과 같은 메시지와 함께 cannot assign requested address
오류가 발생할 수 있습니다.
Error: Error creating service account:
Post "https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts:
dial tcp [2001:db8:ffff:ffff::5f]:443:
connect: cannot assign requested address
이 오류가 발생하면 terraform apply
명령어를 다시 실행합니다.
배포 삭제 시 오류
경우에 따라 배포를 삭제하려는 시도가 실패할 수 있습니다.
- 콘솔을 통해 솔루션을 배포한 후 솔루션에서 프로비저닝한 리소스를 변경한 후 배포를 삭제하려고 하면 삭제가 실패할 수 있습니다. 솔루션 배포 페이지의 상태 필드에 실패가 표시되고 Cloud Build 로그에 오류의 원인이 표시됩니다.
- Terraform CLI를 사용하여 솔루션을 배포한 후 Terraform이 아닌 인터페이스(예: 콘솔)를 사용하여 리소스를 변경한 후 배포를 삭제하려고 하면 삭제가 실패할 수 있습니다.
terraform destroy
명령어 출력의 메시지에 오류 원인이 표시됩니다.
오류 로그와 메시지를 검토하고 오류를 일으킨 리소스를 식별 및 삭제한 후 배포를 다시 삭제합니다.
콘솔 기반 배포가 삭제되지 않고 Cloud Build 로그를 사용하여 오류를 진단할 수 없으면 다음 섹션의 설명대로 Terraform CLI를 사용하여 배포를 삭제할 수 있습니다.
Terraform CLI를 사용하여 콘솔 기반 배포 삭제
이 섹션에서는 콘솔을 통해 삭제를 시도할 때 오류가 발생하는 경우 콘솔 기반 배포를 삭제하는 방법을 설명합니다. 이 방법에서는 삭제하려는 배포의 Terraform 구성을 다운로드한 후 Terraform CLI를 사용하여 배포를 삭제합니다.
배포의 Terraform 코드, 로그 및 기타 데이터가 저장된 리전을 식별합니다. 이 리전은 솔루션 배포 중 선택한 리전과 다를 수 있습니다.
Google Cloud 콘솔에서 솔루션 배포 페이지로 이동합니다.
삭제할 배포가 포함된 프로젝트를 선택합니다.
배포 목록에서 삭제하려는 배포에 대한 행을 식별합니다.
모든 행 콘텐츠 보기를 클릭합니다.
위치 열에서 다음 예시에 강조 표시된 두 번째 위치를 기록해 둡니다.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
프로젝트 ID, 리전, 삭제하려는 배포 이름에 대해 환경 변수를 만듭니다.
export REGION="REGION" export PROJECT_ID="PROJECT_ID" export DEPLOYMENT_NAME="DEPLOYMENT_NAME"
이 명령어에서 다음 항목을 바꿉니다.
- REGION: 이 절차의 앞 부분에서 기록해 둔 위치
- PROJECT_ID: 솔루션을 배포한 프로젝트의 ID
- DEPLOYMENT_NAME: 삭제하려는 배포의 이름
삭제하려는 배포의 최신 버전에 대한 ID를 가져옵니다.
export REVISION_ID=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .latestRevision -r) echo $REVISION_ID
출력은 다음과 비슷합니다.
projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME/revisions/r-0
배포에 대한 Terraform 구성의 Cloud Storage 위치를 가져옵니다.
export CONTENT_PATH=$(curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/${REVISION_ID}" \ | jq .applyResults.content -r) echo $CONTENT_PATH
다음은 이 명령어의 출력 예시입니다.
gs://PROJECT_ID-REGION-blueprint-config/DEPLOYMENT_NAME/r-0/apply_results/content
Cloud Storage에서 Cloud Shell로 Terraform 구성을 다운로드합니다.
gsutil cp -r $CONTENT_PATH $HOME cd $HOME/content/infra
다음 예시에 표시된 것처럼
Operation completed
메시지가 표시될 때까지 기다립니다.Operation completed over 45 objects/268.5 KiB
Terraform을 초기화합니다.
terraform init
다음 메시지가 표시될 때까지 기다립니다.
Terraform has been successfully initialized!
배포된 리소스를 삭제합니다.
terraform destroy
Terraform에서 소멸될 리소스 목록을 표시합니다.
선언되지 않은 변수에 대한 경고가 표시되면 경고를 무시합니다.
작업을 수행하라는 메시지가 표시되면
yes
를 입력합니다.Terraform에서 진행 상황을 보여주는 메시지가 표시됩니다. 모든 리소스가 삭제되면 Terraform에 다음 메시지가 표시됩니다.
Destroy complete!
배포 아티팩트를 삭제합니다.
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}?force=true&delete_policy=abandon"
몇 초 정도 기다린 후 배포 아티팩트가 삭제되었는지 확인합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://config.googleapis.com/v1alpha2/projects/${PROJECT_ID}/locations/${REGION}/deployments/${DEPLOYMENT_NAME}" \ | jq .error.message
출력에
null
이 표시되면 몇 초 정도 기다린 후 명령어를 다시 실행합니다.배포 아티펙트가 삭제된 후 다음 예시와 같은 메시지가 표시됩니다.
Resource 'projects/PROJECT_ID/locations/REGION/deployments/DEPLOYMENT_NAME' was not found
의견 보내기
점프 스타트 솔루션은 정보 제공만을 목적으로 하며 공식적으로 지원되는 제품은 아닙니다. Google은 사전 통지 없이 솔루션을 변경하거나 삭제할 수 있습니다.
오류를 해결하려면 Cloud Build 로그 및 Terraform 출력을 검토합니다.
의견을 제출하려면 다음을 수행합니다.
- 문서, 콘솔 내 튜토리얼, 솔루션의 경우 페이지에서 의견 보내기 버튼을 사용합니다.
수정되지 않은 코드의 경우 적절한 GitHub 저장소에서 문제를 만듭니다.
GitHub 문제는 최선을 다해 검토되며 일반적인 사용 질문을 위한 것이 아닙니다.
- 솔루션에서 사용되는 제품 관련 문제는 Cloud Customer Care에 문의하세요.
다음 단계
이 솔루션은 Cloud Run을 사용하여 전자상거래 웹 애플리케이션을 배포하는 방법을 보여줍니다. Google Cloud 제품 및 기능에 대해 더 알아보려면 다음을 참조하세요.
- Cloud Run에 대한 일반적인 개발 팁
- Cloud Run 부하 테스트 권장사항
- Cloud Run용 최종 사용자 인증 튜토리얼
- Firebase 호스팅을 사용하여 동적 콘텐츠 제공 및 마이크로서비스 호스팅