이 문서에서는 Cloud Run, Pub/Sub, 워크플로, Datastore 모드의 Firestore(Datastore)를 사용하여 예시 애플리케이션을 배포하는 방법을 설명합니다. 이 문서는 마이크로서비스 기반 애플리케이션에서 트랜잭션 워크플로를 구현하려는 애플리케이션 개발자를 대상으로 작성되었습니다.
이 문서는 다음으로 구성된 시리즈의 일부입니다.
- Google Cloud의 마이크로서비스 아키텍처에 대한 트랜잭션 워크플로: 이 튜토리얼에서 배포하는 트랜잭션 워크플로 애플리케이션의 아키텍처 개요입니다.
- Google Cloud의 마이크로서비스 아키텍처에 트랜잭션 워크플로 애플리케이션 예시 배포(이 문서)
이 튜토리얼에서 배포하는 이 예시 애플리케이션은 두 가지 아키텍처 패턴으로 마이크로서비스를 구현합니다.
- 코레오그래피 기반 saga
- 동기식 조정
애플리케이션에는 웹 클라이언트가 포함되어 있습니다. Google Cloud CLI와 웹 클라이언트에서 이러한 두 패턴을 모두 실험할 수 있습니다.
목표
- 코레오그래피 기반 saga 아키텍처를 위한 서버 측 구성요소 배포
- 동기식 조정 아키텍처를 위한 서버 측 구성요소 배포
curl
명령어로 서버 측 구성요소 테스트- 웹 애플리케이션을 배포하고 이를 통해 워크플로 실행
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
API Cloud Services, Cloud Run, Workflows, Cloud Build, and Cloud Scheduler 사용 설정
소스 코드 클론
이 섹션에서는 프로젝트 ID를 설정하고 Cloud Shell에서 소스 코드를 클론합니다.
Cloud Shell에서 프로젝트 ID를 설정합니다.
PROJECT_ID=PROJECT_ID
PROJECT_ID
를 이전에 만든 Google Cloud 프로젝트의 프로젝트 ID로 바꿉니다.프로젝트 ID를 설정합니다.
gcloud config set project $PROJECT_ID
튜토리얼 저장소를 클론합니다.
cd $HOME git clone https://github.com/GoogleCloudPlatform/transactional-microservice-examples
코레오그래피 기반 saga 아키텍처를 위한 서버 측 구성요소 배포
이 섹션에서는 예시 애플리케이션의 서버 측 구성요소를 배포합니다. 이 애플리케이션은 Cloud Run의 마이크로서비스, Cloud Scheduler의 이벤트 게시 일정, Pub/Sub 주제와 같은 코레오그래피 기반 SAG 아키텍처를 구현합니다.
컨테이너 이미지 빌드 및 배포
Cloud Shell에서
order-async
라는Order
서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/order-async gcloud builds submit --tag gcr.io/$PROJECT_ID/order-service-async gcloud run deploy order-service-async \ --image gcr.io/$PROJECT_ID/order-service-async \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
customer-async
라는Customer
서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/customer-async gcloud builds submit --tag gcr.io/$PROJECT_ID/customer-service-async gcloud run deploy customer-service-async \ --image gcr.io/$PROJECT_ID/customer-service-async \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
event-publisher
서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/event-publisher gcloud builds submit --tag gcr.io/$PROJECT_ID/event-publisher gcloud run deploy event-publisher \ --image gcr.io/$PROJECT_ID/event-publisher \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated \ --set-env-vars "PROJECT_ID=$PROJECT_ID"
Datastore 색인 만들기
이 섹션에서는 Datastore의 색인을 만듭니다. 이 색인은 event-publisher
서비스에서 게시해야 하는 이벤트를 선택하는 데 사용됩니다.
Google Cloud 콘솔의 Datastore 메뉴에서 Datastore 모드를 선택합니다 .
데이터 저장 위치 선택을 클릭하고
us-east1
을 위치로 선택합니다. 그런 다음 데이터베이스 만들기를 클릭합니다.Datastore의 색인을 만듭니다.
cd $HOME/transactional-microservice-examples/services/event-publisher gcloud datastore indexes create index.yaml --quiet
Google Cloud 콘솔의 Datastore 메뉴에서 색인을 선택하고 색인 상태가 색인 생성(Indexing)에서 제공(Serving)으로 변경될 때까지 기다립니다. 이 과정은 몇 분 정도 걸릴 수 있습니다.
Cloud Run에서 마이크로서비스를 호출하는 서비스 계정 만들기
Cloud Shell에서
cloud-run-invoker
서비스 계정을 만듭니다.SERVICE_ACCOUNT_NAME="cloud-run-invoker" SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --display-name "Cloud Run Invoker"
이 튜토리얼의 뒷부분에서 이 서비스 계정을 사용하여 Cloud Run에서 실행되는 마이크로서비스의 REST API를 호출합니다.
이벤트 게시자 서비스를 호출하는 일정 정의
이 섹션에서는 event-publisher
라는 이벤트 게시자를 1분 간격으로 호출하는 일정을 정의합니다.
Cloud Shell에서
run.invoker
역할을event publisher
서비스에 할당하세요.SERVICE_NAME="event-publisher" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
cloud-run-invoker
서비스 계정을 사용하여event-publisher
라는Event publisher
서비스 호출 일정을 1분 간격으로 정의합니다.SERVICE_NAME="event-publisher" SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/event/publish" gcloud scheduler jobs create http event-publisher-scheduler \ --schedule='* * * * *' \ --http-method=GET \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE_ACCOUNT_EMAIL \ --oidc-token-audience=$SERVICE_URL \ --location=us-central1
Pub/Sub 주제 만들기
Cloud Shell에서 다음 Pub/Sub 주제를 만듭니다.
gcloud pubsub topics create order-service-event gcloud pubsub topics create customer-service-event
order-service-event
주제는 Order
서비스 및 event-publisher
서비스에서 Order
서비스의 이벤트를 게시하는 데 사용됩니다. customer-service-event
주제는 Customer
서비스에서 이벤트를 게시하는 데 사용됩니다.
마이크로서비스에 이벤트 알림을 전송할 주제 정의
이 섹션에서는 Pub/Sub 주제의 메시지를 마이크로서비스로 전송하도록 push-subscription
주제를 정의합니다.
Cloud Shell에서
iam.serviceAccountTokenCreator
역할을 프로젝트 Pub/Sub 서비스 계정에 할당합니다.PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format "value(projectNumber)") gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
이 명령어를 사용하면 서비스 계정이 Cloud Run에서 마이크로서비스를 호출하는 액세스 토큰을 만들 수 있습니다.
run.invoker
역할을customer-service-async
서비스에 할당합니다.SERVICE_NAME="customer-service-async" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
push-subscription
주제를 만듭니다.SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/customer/pubsub" gcloud pubsub subscriptions create push-order-to-customer \ --topic order-service-event \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=$SERVICE_ACCOUNT_EMAIL
이 주제에서는
cloud-run-invoker
서비스 계정을 사용하여order-service-event
주제의 메시지를Customer
서비스로 전달합니다.run.invoker
역할을order-service-async
서비스에 할당합니다.SERVICE_NAME="order-service-async" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1
push-subscription
주제를 만듭니다.SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_URL="${SERVICE_URL}/api/v1/order/pubsub" gcloud pubsub subscriptions create push-customer-to-order \ --topic customer-service-event \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=$SERVICE_ACCOUNT_EMAIL
push-subscription
주제는cloud-run-invoker
서비스 계정을 사용하여customer-service-event
주제의 메시지를Order
서비스로 전달합니다.
동기식 조정 아키텍처를 위한 서버 측 구성요소 배포
이 섹션에서는 예시 애플리케이션의 서버 측 구성요소를 배포합니다. 이러한 구성요소는 Cloud Run에서 동기식 조정 아키텍처와 Workflows로 실행되는 워크플로를 구현합니다.
컨테이너 이미지 빌드 및 배포
이 섹션에서는 마이크로서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.
Cloud Shell에서
order-sync
라는Order
서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/order-sync gcloud builds submit --tag gcr.io/$PROJECT_ID/order-service-sync gcloud run deploy order-service-sync \ --image gcr.io/$PROJECT_ID/order-service-sync \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
customer-sync
라는Customer
서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/customer-sync gcloud builds submit --tag gcr.io/$PROJECT_ID/customer-service-sync gcloud run deploy customer-service-sync \ --image gcr.io/$PROJECT_ID/customer-service-sync \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated
order-processor
라는Order
프로세서 서비스의 컨테이너 이미지를 빌드하고 Cloud Run에 배포합니다.cd $HOME/transactional-microservice-examples/services/order-processor gcloud builds submit --tag gcr.io/$PROJECT_ID/order-processor-service gcloud run deploy order-processor-service \ --image gcr.io/$PROJECT_ID/order-processor-service \ --platform=managed --region=us-central1 \ --no-allow-unauthenticated \ --set-env-vars "PROJECT_ID=$PROJECT_ID"
Cloud Run에서 마이크로서비스를 호출하는 서비스 계정 만들기
이 섹션에서는 Cloud Run에서 마이크로서비스를 호출하기 위한 서비스 계정 만들기에서 만든 cloud-run-invoker
서비스 계정을 재사용합니다.
주문 처리 워크플로 배포
Cloud Shell에서
run.invoker
및run.viewer
역할을order-service-sync
서비스의cloud-run-invoker
서비스 계정에 할당합니다.SERVICE_NAME="order-service-sync" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1 gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.viewer \ --platform=managed --region=us-central1
run.invoker
및run.viewer
역할을customer-service-sync
서비스의cloud-run-invoker
서비스 계정에 할당합니다.SERVICE_NAME="customer-service-sync" gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.invoker \ --platform=managed --region=us-central1 gcloud run services add-iam-policy-binding $SERVICE_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/run.viewer \ --platform=managed --region=us-central1
cloud-run-invoker
서비스 계정을 사용하여 워크플로를 배포합니다.SERVICE_NAME="order-service-sync" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="customer-service-sync" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") cd $HOME/transactional-microservice-examples/services/order-processor cp order_workflow.yaml.template order_workflow.yaml sed -i "s#ORDER-SERVICE-URL#${ORDER_SERVICE_URL}#" order_workflow.yaml sed -i "s#CUSTOMER-SERVICE-URL#${CUSTOMER_SERVICE_URL}#" order_workflow.yaml gcloud beta workflows deploy order_workflow \ --source=order_workflow.yaml \ --service-account=$SERVICE_ACCOUNT_EMAIL
코레오그래피 기반 SAG 아키텍처 구성요소 테스트
이 섹션에서는 curl
명령어를 사용하여 코레오그래피 기반 SAG 아키텍처에 배포된 구성요소를 테스트합니다.
Cloud Shell에서
customer-service-async
및order-service-async
마이크로서비스에 API 엔드포인트의 URL을 가리키는 환경 변수를 설정하세요.SERVICE_NAME="customer-service-async" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-service-async" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}")
고객 항목 만들기
Cloud Shell에서
customer-service-async
라는Customer
서비스에 API 요청을 전송하여customer01
이라는 고객 ID를 만듭니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01", "limit":10000}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/limit | jq .
출력은 다음과 비슷합니다.
{ "credit": 0, "customer_id": "customer01", "limit": 10000 }
주문 제출
이 섹션에서는 주문을 제출하고 해당 주문에 대한 주문 ID 할당을 트리거합니다.
Cloud Shell에서 API 요청을
order-service-async
라는Order
서비스로 전송하여 주문을 제출합니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01", "number":10}' \ -s ${ORDER_SERVICE_URL}/api/v1/order/create | jq .
이 경우
"number": 10
을 지정하여 10개의 항목을 주문합니다.출력은 다음과 비슷합니다.
{ "customer_id": "customer01", "number": 10, "order_id": "720d1305-b6fd-4f57-aaf4-fd2ca5bdfe1e", "status": "pending" }
출력의
"order_id"
플래그는 주문에 할당된 고유한 주문 ID를 표시합니다. 이 ID는 다음 단계에서 사용되므로 복사합니다.환경 변수로 주문 ID를 설정하세요.
ORDER_ID=ORDER_ID
ORDER_ID
을 이전 단계에서 복사한"order_id"
플래그로 바꿉니다.
주문 상태 확인
이 섹션에서는 주문 상태가 어떻게 변경되는지 확인합니다.
Cloud Shell에서 API 요청을
order-service-async
이라는Order
서비스로 전송하여 주문 상태를 가져옵니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d "{\"customer_id\":\"customer01\", \"order_id\":\"$ORDER_ID\"}" \ -s ${ORDER_SERVICE_URL}/api/v1/order/get | jq .
다음과 유사한 결과가 출력됩니다.
{ "customer_id": "customer01", "number": 10, "order_id": "720d1305-b6fd-4f57-aaf4-fd2ca5bdfe1e", "status": "pending" }
출력의
"status"
플래그는 주문 상태를 표시합니다. 트랜잭션 프로세스가 아직 실행 중이면 상태는"pending"
입니다. 이 경우 몇 분 정도 기다린 후 동일한 명령어를 실행하여 상태를 다시 확인하세요. 트랜잭션 프로세스가 완료되면 상태가"accepted"
로 표시됩니다.customer01
고객 ID의 고객 정보를 가져옵니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer01"}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/get | jq .
다음과 유사한 결과가 출력됩니다.
{ "credit": 1000, "customer_id": "customer01", "limit": 10000 }
"credit"
플래그는 고객의 현재 크레딧 사용량을 표시합니다. 이 트랜잭션의 비즈니스 로직은 한 항목의 크레딧을 100씩 늘리는 것이기 때문에 1,000이 증가합니다.주문 제출 단계를 반복하여 주문 프로세스를 반복할 수 있습니다.
"number": 100
를 지정하여 100개의 항목을 주문하면 크레딧 사용량이 한도를 초과하므로 주문 최종 상태는"rejected"
입니다.
동기식 조정 아키텍처 구성요소 테스트
이 섹션에서는 curl
명령어를 사용하여 동기식 조정 아키텍처의 배포된 구성요소를 테스트합니다.
Cloud Shell에서
customer-service-sync
,order-service-sync
,order-processor-service
마이크로서비스의 API 엔드포인트 URL을 가리키는 환경 변수를 설정합니다.SERVICE_NAME="customer-service-sync" CUSTOMER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-service-sync" ORDER_SERVICE_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}") SERVICE_NAME="order-processor-service" ORDER_PROCESSOR_URL=$(gcloud run services list --platform managed \ --format="table[no-heading](URL)" --filter="SERVICE:${SERVICE_NAME}")
고객 항목 만들기
Cloud Shell에서
customer-service-sync
라는Customer
서비스에 API 요청을 보내customer02
라는 고객 ID를 만듭니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02", "limit":10000}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/limit | jq .
다음과 유사한 결과가 출력됩니다.
{ "credit": 0, "customer_id": "customer02", "limit": 10000 }
주문 제출
이 섹션에서는 주문을 제출하고 결과를 확인합니다.
Cloud Shell에서 API 요청을
Order
서비스order-processor-service
에 전송하여 주문을 제출합니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02", "number":10}' \ -s ${ORDER_PROCESSOR_URL}/api/v1/order/process | jq .
이 경우
"number": 10
를 지정하여 10개의 항목을 주문합니다.출력은 다음과 비슷합니다.
{ "customer_id": "customer02", "number": 10, "order_id": "fb6d5087-dd99-4d5a-84c2-0e381016b9d3", "status": "accepted" }
트랜잭션 워크플로는 동기적으로 수행되므로 클라이언트가 즉시 결과를 확인합니다. 이 경우 최종 상태는
"accepted"
입니다.고객 ID가
customer02
인 고객 정보를 가져옵니다.curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{"customer_id":"customer02"}' \ -s ${CUSTOMER_SERVICE_URL}/api/v1/customer/get | jq .
출력은 다음과 비슷합니다.
{ "credit": 1000, "customer_id": "customer02", "limit": 10000 }
고객의 크레딧 사용량이 1,000 증가합니다. 주문 프로세스를 반복하려면 이 단계를 반복하세요.
"number": 100
값을 지정하여 항목 100개를 주문하면 크레딧 사용량이 한도를 초과하므로 클라이언트가 즉시"rejected"
결과를 가져옵니다.
선택사항: 웹 애플리케이션 배포
이 섹션에서는 튜토리얼에 대한 확장으로 이전 섹션에서 배포한 마이크로서비스를 기반으로 트랜잭션 워크플로를 실행하는 웹 애플리케이션 예시를 배포합니다. Firebase 호스팅을 사용하여 Cloud Run에서 실행되는 백엔드 마이크로서비스와 상호작용하는 웹 애플리케이션을 배포합니다.
Firebase 호스팅에는 Cloud Run 통합 기능이 내장되어 있어 웹 애플리케이션과 백엔드 마이크로서비스 서비스를 동일한 도메인에서 호스팅할 수 있습니다. 다른 유형의 배포에서는 교차 출처 리소스 공유(CORS) 문제가 발생할 수 있습니다. 자세한 내용은 최종 사용자 인증을 참조하세요.
Firebase 호스팅 통합은 다음을 수행합니다.
- 웹 애플리케이션의 정적 애셋을 호스팅합니다.
- API에 대한 액세스를 Cloud Run의 다음 백엔드 서비스로 리디렉션합니다.
/customer-service-sync/*
>customer-service-sync
/customer-service-async/*
~customer-service-async
/order-service-sync/*
~order-service-sync
/order-service-async/*
~order-service-async
/order-processor-service/*
>order-processor-service
- 웹 애플리케이션의 정적 애셋을 반환합니다.
Firebase 설정
이 섹션에서는 Firebase 호스팅에서 웹 애플리케이션을 호스팅하도록 Firebase를 설정합니다.
Firebase CLI를 사용하려면 Cloud Shell에서 Node.js를 최신 LTS 버전으로 업데이트합니다.
nvm install lts/gallium
Firebase 리소스를 기존 Google Cloud 프로젝트에 추가합니다.
firebase projects:addfirebase $PROJECT_ID
Firebase CLI의 기본 프로젝트 별칭을 추가합니다.
jq -n --arg project_id $PROJECT_ID \ '{"projects": {"default":$project_id}}' > \ $HOME/transactional-microservice-examples/frontend/.firebaserc
웹 애플리케이션 배포
이 섹션에서는 Firebase 호스팅에 웹 애플리케이션을 배포합니다.
Cloud Shell에서 웹 프런트엔드 애플리케이션을 빌드합니다.
cd $HOME/transactional-microservice-examples/frontend yarn install && yarn build
Firebase 호스팅에 웹 애플리케이션을 배포합니다.
firebase deploy
웹 애플리케이션 사용
- 이전 섹션에서 복사한 호스팅 URL을 브라우저에 입력합니다. 웹 애플리케이션의 홈페이지가 표시됩니다.
ID 토큰으로 웹 애플리케이션 초기화
이 섹션에서는 ID 토큰으로 웹 애플리케이션을 초기화하고 쇼핑 페이지로 이동합니다.
Cloud Shell에서 ID 토큰을 출력합니다.
gcloud auth print-identity-token
이전 명령어의 출력을 복사하여 텍스트 상자에 붙여넣습니다.
계속을 클릭합니다. ID 토큰이 유효하면 쇼핑 페이지로 리디렉션됩니다.
장바구니에 항목 추가
- 웹 애플리케이션에서 Add to cart를 클릭하여 장바구니에 항목을 추가합니다.
장바구니의 상품 확인
- 웹 애플리케이션에서 탐색 메뉴의 장바구니 아이콘을 클릭하여 결제 페이지로 이동합니다. 장바구니에 항목이 표시됩니다.
비동기 서비스를 사용하여 주문 제출
- 웹 애플리케이션에서 탐색 메뉴의 장바구니 아이콘을 클릭하여 결제 페이지로 이동합니다.
- 주문 제출(비동기)을 클릭합니다. 주문이 성공적으로 제출되면 주문 내역 페이지로 리디렉션됩니다.
동기 서비스를 사용하여 주문 제출
- 웹 애플리케이션에서 탐색 메뉴의 장바구니 아이콘을 클릭하여 결제 페이지로 이동합니다.
- 주문 제출(동기화)을 클릭합니다. 주문이 성공적으로 제출되면 주문 내역 페이지로 리디렉션됩니다.
주문 내역 확인
- 웹 애플리케이션의 탐색 메뉴에서 주문을 클릭하여 주문 내역 페이지로 이동합니다.
완료되지 않은 주문 상태 업데이트
- 웹 애플리케이션의 탐색 메뉴에서 주문을 클릭하여 주문 내역 페이지로 이동합니다.
- 개별 주문의 새로고침 아이콘을 클릭합니다. 주문이 비동기식으로 처리되고 상태가
pending
인 경우에만 아이콘이 표시됩니다.
고객의 현재 예산 확인
- 웹 애플리케이션에서 탐색 메뉴의 고객 이름(customer-number)을 클릭하여 프로필 페이지로 이동합니다.
웹 애플리케이션에서 상태 재설정
- 브라우저에서 웹 애플리케이션을 다시 로드합니다. 장바구니의 항목, 주문 내역, 고객 정보가 재설정되고 홈페이지로 리디렉션됩니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
- Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.
개별 리소스 삭제
이 섹션에서는 이 튜토리얼에서 사용하는 개별 리소스를 삭제합니다.
Firebase 호스팅 비활성화
Cloud Shell에서 다음 명령어를 실행하여 Firebase 호스팅 트래픽 제공을 중지하세요.
firebase hosting:disable -f
Cloud Run에서 서비스 삭제
Cloud Shell에서 Cloud Run의 서비스를 삭제합니다.
gcloud run services delete order-service-async \ --platform=managed --region=us-central1 --quiet gcloud run services delete customer-service-async \ --platform=managed --region=us-central1 --quiet gcloud run services delete order-service-sync \ --platform=managed --region=us-central1 --quiet gcloud run services delete customer-service-sync \ --platform=managed --region=us-central1 --quiet gcloud run services delete order-processor-service \ --platform=managed --region=us-central1 --quiet gcloud run services delete event-publisher \ --platform=managed --region=us-central1 --quiet
Cloud Run에서 사용하는 컨테이너 이미지 삭제
Cloud Shell에서 이 가이드용으로 만든 컨테이너 이미지를 삭제합니다.
gcloud container images delete \ gcr.io/$PROJECT_ID/order-service-async --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/customer-service-async --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/event-publisher --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/order-service-sync --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/customer-service-sync --force-delete-tags --quiet gcloud container images delete \ gcr.io/$PROJECT_ID/order-processor-service --force-delete-tags --quiet
워크플로 삭제
Cloud Shell에서 워크플로를 삭제합니다.
gcloud beta workflows delete order_workflow --quiet
Pub/Sub 구독 및 주제 삭제
Cloud Shell에서 Pub/Sub 구독을 삭제합니다.
gcloud pubsub subscriptions delete push-customer-to-order --quiet gcloud pubsub subscriptions delete push-order-to-customer --quiet
Pub/Sub 주제를 삭제합니다.
gcloud pubsub topics delete order-service-event --quiet gcloud pubsub topics delete customer-service-event --quiet
Datastore에서 레코드 삭제
- Google Cloud 콘솔의 Datastore 메뉴에서 항목을 엽니다.
Customer
필드의 모든 항목을 확인합니다.- 삭제를 클릭한 다음 확인을 클릭하여 항목을 영구 삭제합니다.
- 이 절차의 2단계와 3단계를 다음 필드에 반복합니다.
Event
Order
ProcessedEvent
Cloud Scheduler에서 작업 삭제
Cloud Shell에서 Cloud Scheduler에서 실행 중인 작업을 삭제합니다.
gcloud scheduler jobs delete event-publisher-scheduler --quiet \ --location=us-central1
서비스 계정 삭제
Cloud Shell에서 서비스 계정을 삭제합니다.
gcloud iam service-accounts delete $SERVICE_ACCOUNT_EMAIL --quiet
튜토리얼 애셋 삭제
Cloud Shell에서 이 튜토리얼에 사용한 애셋을 삭제합니다.
cd $HOME rm -rf transactional-microservice-examples
다음 단계
- 다음 시리즈를 참조하여 마이크로서비스의 설계, 빌드, 배포에 대한 자세한 내용 알아보기
- 모놀리식 및 마이크로서비스의 이점과 문제점 알아보기
- 서비스 경계를 정의하고 모놀리식을 리팩토링하는 방법 알아보기
- 마이크로서비스 간 트랜잭션 분산 방법 알아보기
- Polyglot 환경에서 분산 추적을 설정하는 방법 알아보기
- 마이크로서비스 아키텍처에서 서비스 메시 구현 방법 읽어보기
- Cloud 아키텍처 센터에서 참조 아키텍처, 다이어그램, 권장사항 자세히 살펴보기