Pub/Sub 및 GKE와 마이크로서비스 통합

이 가이드에서는 사진 공유 앱을 Google Kubernetes Engine(GKE)에 배포하여 Pub/Sub를 사용해서 장기 실행 프로세스를 비동기적으로 호출하는 방법을 알아봅니다. 또한 Cloud Storage용 Pub/Sub 알림을 사용해서 앱의 애플리케이션 코드를 수정하지 않고 부가 작업을 추가하는 방법을 알아봅니다. 이 앱은 Cloud Build로 컨테이너화되고 Container Registry에 저장되어 있습니다. 이 앱에는 부적절한 이미지 인식을 위해 Cloud Vision이 사용됩니다.

마이크로서비스 아키텍처를 기반으로 웹 앱을 설계할 때는 앱 기능을 마이크로서비스로 분할하는 방법과 앱에서 이러한 마이크로서비스를 호출하는 방법을 결정해야 합니다. 시간이 오래 걸리는 서비스의 경우에는 비동기 서비스 호출을 사용해야 할 수 있습니다. 이 가이드는 GKEPub/Sub를 포함하여 현대적인 기술을 사용해서 비동기 방식으로 마이크로서비스를 구현하려는 개발자 및 설계자를 대상으로 합니다.

State of DevOps 보고서에는 소프트웨어 제공 성능을 향상시키는 기능이 나와 있습니다. 이 가이드는 아키텍처 기능을 이해하는 데 도움을 줍니다.

미리보기 이미지 생성 앱을 위한 아키텍처 패턴

다음 다이어그램은 앱이 미리보기 이미지를 생성하는 시나리오 예시를 보여줍니다.

Compute Engine에 배포된 앱 아키텍처

앞의 다이어그램에서 앱은 클라이언트로부터 이미지 파일을 수신한 후 자동으로 미리보기 이미지를 생성합니다. 현재 이 앱은 Compute Engine의 가상 머신(VM) 인스턴스와 Cloud Storage의 백엔드 파일 스토리지로 구현되어 있습니다. Cloud Load Balancing은 요청을 여러 VM에 분산합니다.

VM 유지 관리를 위해 운영 오버헤드를 줄이기 위해서는 VM을 사용하지 않는 새 아키텍처로 이 시스템을 마이그레이션할 수 있습니다.

다음 다이어그램에 표시된 새 아키텍처는 몇 가지 관리형 서비스로 구성됩니다.

VM 없이 배포된 앱의 아키텍처

이 새로운 아키텍처에서는 클라이언트가 앱 Cloud Storage로 직접 이미지를 보냅니다. 그런 후 Pub/Sub 알림이 Pub/Sub 메시지 큐에 메시지를 넣습니다. 이 메시지는 GKE에서 실행되는 마이크로서비스를 호출합니다. 마이크로서비스는 Cloud Storage로부터 이미지를 수신하여 미리보기 이미지를 생성하고 이를 Cloud Storage에 업로드합니다.

이 새로운 아키텍처에는 다음과 같은 장점이 있습니다.

  • 독립적인 확장성: 원래 아키텍처에서는 Compute Engine에서 실행되는 앱이 두 가지 핵심 기능을 제공합니다. 하나는 파일을 수신하는 것이고 다른 하나는 원래 이미지로부터 미리보기 이미지를 생성하는 것입니다. 업로드된 파일 수신에는 네트워크 대역폭이 소비되고, 미리보기 이미지 생성에는 CPU가 집중적으로 사용됩니다. Compute Engine 인스턴스에서는 이미지 생성을 위한 CPU 리소스가 부족할 수 있고, 파일 수신을 위한 네트워크 대역폭은 그래도 충분할 수 있습니다. 새로운 아키텍처에서는 이러한 태스크가 Cloud Storage 및 GKE에서 공유되기 때문에 독립적으로 확장될 수 있습니다.
  • 효율적인 리소스 사용: 원래 아키텍처에서는 Compute Engine 인스턴스를 확장할 때 운영체제 실행을 위해 더 많은 리소스가 사용됩니다. GKE를 사용하면 더 적은 서버에서 여러 컨테이너를 실행하여 서버 리소스를 효율적으로 사용할 수 있습니다(적재 방법). 컨테이너를 빠르게 확장하고 축소할 수 있으므로, 새 아키텍처가 짧은 시간의 갑작스러운 부하 증가를 처리하고 작업이 완료되면 이를 빠르게 수평 축소할 수 있습니다.
  • 간편한 새 기능 추가: 원래 아키텍처에서는 기능을 추가하고 싶으면 동일한 Compute Engine 인스턴스에서 배포해야 합니다. 새로운 아키텍처에서는 새 미리보기 이미지가 생성되었을 때 이를 알리기 위한 메일 발송기와 같은 앱을 개발할 수 있습니다. Pub/Sub는 Compute Engine 인스턴스에서 원래 코드를 수정하지 않고 비동기 방식으로 미리보기 이미지 생성 및 메일 발송기 앱에 연결할 수 있습니다.
  • 결합 감소: 이전 아키텍처의 일반적인 문제 중 하나는 일시적인 결합입니다. 메일 릴레이 서버가 작동 중지되었을 때 앱이 알림을 전송하려고 시도하면 작업이 실패합니다. 이러한 프로세스가 밀접하게 결합되어 있어서 클라이언트가 애플리케이션에서 성공적으로 응답을 받지 못할 수 있습니다. 새 아키텍처에서는 미리보기 이미지 생성과 알림 전송이 느슨하게 결합되어 있기 때문에 클라이언트가 성공적으로 응답을 얻습니다.

이 새로운 아키텍처에는 다음과 같은 단점이 있습니다.

  • 앱 현대화를 위한 추가적인 노력 필요: 앱을 현대화하기 위해서는 시간과 노력이 필요합니다. 새 아키텍처에는 서비스가 더 많이 사용되며, 앱 모니터링, 배포 프로세스, 리소스 관리에 대한 변경사항을 포함하여 관측 가능성에 대해 다른 접근 방법이 필요합니다.
  • 앱 사이드에서 미리보기 이미지 중복 처리: Pub/Sub는 최소 1회 메시지 전송을 보장합니다. 즉, 중복 메시지가 전송될 수 있습니다.

사진 앨범 앱 정보

다음 다이어그램은 사진 앨범 앱의 초기 설계를 보여줍니다.

사진 앨범 앱의 아키텍처

위의 다이어그램은 미리보기 이미지 생성 방법을 보여줍니다.

  1. 클라이언트가 이미지를 앱에 업로드합니다.
  2. 앱이 이미지를 Cloud Storage에 저장합니다.
  3. 미리보기 이미지 요청이 생성됩니다.
  4. 미리보기 이미지 생성기가 미리보기 이미지를 생성합니다.
  5. 성공적으로 응답이 사진 앨범 앱으로 전송됩니다.
  6. 성공적으로 응답이 클라이언트로 전송되고 Cloud Storage에서 미리보기 이미지를 확인할 수 있습니다.

앱을 배포한 후에는 다음 문제를 해결해야 합니다.

  • 앱에서 미리보기 이미지를 생성하는 시간이 오래 걸립니다. 그 결과 클라이언트에 제한 시간 초과가 여러 번 발생합니다.
  • 서비스 관리팀은 부적절한 콘텐츠가 업로드되지 않았는지 확인해야 합니다. 하지만 애플리케이션 팀은 이 기능을 구현하기 위해 필요한 리소스가 충분하지 않습니다.

다음 다이어그램은 비동기적인 방식으로 미리보기 이미지 생성을 개별 서비스로 추출합니다.

미리보기 이미지 추출 아키텍처

Pub/Sub를 사용하여 미리보기 이미지 생성 서비스로 서비스 요청을 전송합니다. 이 새 아키텍처는 서비스 호출을 비동기적으로 만듭니다. 따라서 앱이 클라이언트로 다시 응답을 전송한 후에 미리보기 이미지가 백그라운드에서 생성됩니다. 이 설계에서는 미리보기 이미지 생성 서비스 확장이 허용되므로 여러 작업이 병렬로 실행될 수 있습니다.

목표

  • GKE에 사진 앨범 앱 예시를 배포합니다.
  • 앱에서 비동기 서비스 호출을 수행합니다.
  • Cloud Storage용 Pub/Sub 알림을 사용하여 Cloud Storage 버킷에 새 파일이 업로드되었을 때 앱을 트리거합니다.
  • Pub/Sub를 사용하여 앱 수정 없이 더 많은 태스크를 수행합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. GKE, Cloud SQL, Cloud Build, and Cloud Vision API를 사용 설정합니다.

    API 사용 설정

  5. Cloud Console에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Cloud Console 하단에 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 gcloud 명령줄 도구가 포함되고 Cloud SDK가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

환경 설정

이 섹션에서는 이 문서 전체에 사용되는 값의 기본 설정을 할당합니다. Cloud Shell 세션을 닫으면 이러한 환경 설정이 손실됩니다.

  1. Cloud Shell에서 기본 클라우드 프로젝트를 설정하고 project-id를 Google Cloud 프로젝트 ID로 바꿉니다.

    gcloud config set project project-id
    
  2. 기본 Compute Engine 리전을 설정하고 region을 사용자에게 가까운 리전으로 바꿉니다. 자세한 내용은 리전 및 영역을 참조하세요.

    gcloud config set compute/region region
    export REGION=region
    
  3. 기본 Compute Engine 영역을 설정하고 zone을 사용자에게 가까운 영역으로 바꿉니다.

    gcloud config set compute/zone zone
    export ZONE=zone
    
  4. 가이드 파일을 다운로드하고 현재 디렉터리를 설정합니다.

    git clone https://github.com/GoogleCloudPlatform/gke-photoalbum-example
    cd gke-photoalbum-example
    

Cloud Storage 버킷 만들기 및 기본 미리보기 이미지 업로드

  1. Cloud Shell에서 원래 이미지와 미리보기 이미지를 저장하기 위한 Cloud Storage 버킷을 만듭니다.

    export PROJECT_ID=$(gcloud config get-value project)
    gsutil mb -c regional -l ${REGION} gs://${PROJECT_ID}-photostore
    
  2. 기본 미리보기 이미지 파일을 업로드합니다.

    gsutil cp ./application/photoalbum/images/default.png \
        gs://${PROJECT_ID}-photostore/thumbnails/default.png
    
    • 업로드된 이미지는 gs://project-id-photostore/filename 형식으로 저장됩니다. 여기서 filename은 업로드된 이미지 파일의 이름을 나타냅니다.
    • 생성된 미리보기 이미지는 gs://project-id-photostore/thumbnails/filename 형식으로 저장됩니다.
    • 원래 이미지 및 해당 미리보기 이미지 모두 filename이 동일하지만, 미리보기 이미지는 thumbnails 버킷에 저장됩니다.
    • 미리보기 이미지를 생성할 때는 사진 앨범 앱에 default.png 자리표시자 미리보기 이미지가 표시됩니다.

      기본 자리표시자 미리보기 이미지

  3. 미리보기 이미지 파일을 공개로 설정합니다.

    gsutil acl ch -u AllUsers:R \
        gs://${PROJECT_ID}-photostore/thumbnails/default.png
    

Cloud SQL 인스턴스 및 MySQL 데이터베이스 만들기

  1. Cloud Shell에서 Cloud SQL 인스턴스를 만듭니다.

    gcloud sql instances create photoalbum-db --region=${REGION} \
        --database-version=MYSQL_5_7
    
  2. 연결 이름을 검색합니다.

    gcloud sql instances describe photoalbum-db \
        --format="value(connectionName)"
    

    나중에 가이드에서 사용되므로 이름을 기록해 둡니다.

  3. root@% MySQL 사용자의 비밀번호를 설정합니다.

    gcloud sql users set-password root --host=% --instance=photoalbum-db \
        --password=password
    

    passwordroot@% 사용자의 보안 비밀번호로 바꿉니다.

  4. Cloud SQL 인스턴스에 연결합니다.

    gcloud sql connect photoalbum-db --user=root --quiet
    

    메시지가 표시되면 이전 단계에서 설정한 password를 입력합니다.

  5. photo_db라는 데이터베이스를 만듭니다. 여기에서 사용자는 appuser이고 비밀번호는 pas4appuser입니다.

    create database photo_db;
    grant all privileges on photo_db.* to appuser@"%" \
        identified by 'pas4appuser' with grant option;
    
  6. 결과를 확인하고 MySQL을 종료합니다.

    show databases;
    select user from mysql.user;
    exit
    

    출력에서 photo_db 데이터베이스 및 appuser 사용자가 생성되었는지 확인합니다.

    MySQL [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | photo_db           |
    | sys                |
    +--------------------+
    5 rows in set (0.16 sec)
    
    MySQL [(none)]> select user from mysql.user;
    +-----------+
    | user      |
    +-----------+
    | appuser   |
    | root      |
    | mysql.sys |
    +-----------+
    3 rows in set (0.16 sec)
    
    MySQL [(none)]> exit
    Bye
    

Pub/Sub 주제 및 구독 만들기

  1. Cloud Shell에서 thumbnail-service라는 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create thumbnail-service
    

    사진 앨범 앱은 thumbnail-service 주제에 메시지를 게시하여 미리보기 이미지 생성 서비스에 요청을 전송합니다.

  2. thumbnail-workers라는 Pub/Sub 구독을 만듭니다.

    gcloud pubsub subscriptions create --topic thumbnail-service thumbnail-workers
    

    미리보기 이미지 생성 서비스가 thumbnail-workers 구독으로부터 요청을 수신합니다.

GKE 클러스터 만들기

  1. Cloud Shell에서 API 호출 권한이 있는 GKE 클러스터를 만듭니다.

    gcloud container clusters create "photoalbum-cluster" \
        --scopes "https://www.googleapis.com/auth/cloud-platform" \
        --num-nodes "5"
    
  2. 이후 단계에서 kubectl 명령어를 사용하여 클러스터를 관리할 수 있도록 액세스 사용자 인증 정보를 구성합니다.

    gcloud container clusters get-credentials photoalbum-cluster
    
  3. 노드 목록을 표시합니다.

    kubectl get nodes
    

    출력에서 STATUSReady인 노드가 5개 있는지 확인합니다.

    NAME                                                STATUS    ROLES     AGE       VERSION
    gke-photoalbum-cluster-default-pool-0912a91a-24vt   Ready     <none>    6m        v1.9.7-gke.6
    gke-photoalbum-cluster-default-pool-0912a91a-5h1n   Ready     <none>    6m        v1.9.7-gke.6
    gke-photoalbum-cluster-default-pool-0912a91a-gdm9   Ready     <none>    6m        v1.9.7-gke.6
    gke-photoalbum-cluster-default-pool-0912a91a-swv6   Ready     <none>    6m        v1.9.7-gke.6
    gke-photoalbum-cluster-default-pool-0912a91a-thv8   Ready     <none>    6m        v1.9.7-gke.6
    

앱 이미지 빌드

  1. 텍스트 편집기에서 application/photoalbum/src/auth_decorator.py 파일을 열고 사용자 이름과 비밀번호를 업데이트합니다.

    USERNAME = 'username'
    PASSWORD = 'passw0rd'
    
  2. Cloud Shell에서 Cloud Build 서비스를 사용하여 사진 앨범 앱 이미지를 빌드합니다.

    gcloud builds submit ./application/photoalbum -t \
        gcr.io/${PROJECT_ID}/photoalbum-app
    
  3. Cloud Build 서비스를 사용하여 thumbnail-worker 미리보기 이미지 생성 서비스를 위해 이미지를 빌드합니다.

    gcloud builds submit ./application/thumbnail -t \
        gcr.io/${PROJECT_ID}/thumbnail-worker
    

사진 앨범 앱 배포

  1. Cloud Shell에서 사용자 환경의 값으로 사진 앨범 및 미리보기 이미지 생성기에 맞게 Kubernetes 배포 매니페스트를 업데이트합니다.

    connection_name=$(gcloud sql instances describe photoalbum-db \
        --format "value(connectionName)")
    
    digest_photoalbum=$(gcloud container images describe \
        gcr.io/${PROJECT_ID}/photoalbum-app:latest --format \
        "value(image_summary.digest)")
    
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_photoalbum}/" \
        config/photoalbum-deployment.yaml
    
    digest_thumbnail=$(gcloud container images describe \
        gcr.io/${PROJECT_ID}/thumbnail-worker:latest --format \
        "value(image_summary.digest)")
    
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_thumbnail}/" \
            config/thumbnail-deployment.yaml
    
  2. 사진 앨범 앱 및 미리보기 이미지 생성 서비스를 시작하기 위한 배포 리소스를 만듭니다.

    kubectl create -f config/photoalbum-deployment.yaml
    kubectl create -f config/thumbnail-deployment.yaml
    
  3. 앱에 외부 IP 주소를 할당하기 위한 서비스 리소스를 만듭니다.

    kubectl create -f config/photoalbum-service.yaml
    
  4. pod 결과를 확인합니다.

    kubectl get pods
    

    출력에서 각 photoalbum-appthumbail-worker에 대해 STATUSRunning인 pod가 3개 있는지 확인합니다.

    NAME                                READY     STATUS    RESTARTS   AGE
    photoalbum-app-555f7cbdb7-cp8nw     2/2       Running   0          2m
    photoalbum-app-555f7cbdb7-ftlc6     2/2       Running   0          2m
    photoalbum-app-555f7cbdb7-xsr4b     2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-728k5   2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-hqxqr   2/2       Running   0          2m
    thumbnail-worker-86bd95cd68-xnxhc   2/2       Running   0          2m
    
  5. 서비스 결과를 확인합니다.

    kubectl get services
    

    출력에서 photoalbum-serviceEXTERNAL-IP 열에 외부 IP 주소가 있는지 확인합니다. 설정이 완료되고 실행될 때까지 몇 분 정도 걸릴 수 있습니다.

    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
    kubernetes           ClusterIP      10.23.240.1     <none>            443/TCP        20m
    photoalbum-service   LoadBalancer   10.23.253.241   146.148.111.115   80:32657/TCP   2m
    

    이 가이드에서 나중에 사용되므로 외부 IP 주소를 기록해 둡니다. 이 예시에서는 146.148.111.115입니다.

사진 앨범 앱 테스트

  1. 웹브라우저에서 배포된 앱에 액세스하려면 다음 URL로 이동하고 이전에 설정한 사용자 이름과 비밀번호를 입력합니다.

    http://external-ip
    

    external-ip는 이전 단계에서 복사한 IP 주소로 바꿉니다.

  2. 원하는 이미지 파일을 업로드하기 위해 Upload를 클릭합니다. 미리보기 이미지 자리표시자가 화면에 표시됩니다.

    서비스에서 고유한 미리보기 이미지가 생성될 때까지 기다리는 동안 표시되는 미리보기 이미지 자리표시자

    백그라운드에서 미리보기 이미지 생성 서비스가 업로드된 이미지의 미리보기 이미지를 생성합니다. 생성된 미리보기 이미지를 보기 위해 Refresh를 클릭합니다. Cloud Vision API가 감지한 이미지 라벨을 추가합니다.

    이미지 라벨이 연결된 미리보기 이미지

    원래 이미지를 보려면 미리보기 이미지를 클릭합니다.

부적절한 이미지 감지 기능 추가

다음 이미지는 Cloud Storage용 Pub/Sub 알림을 사용하여 부적절한 콘텐츠를 감지하는 서비스를 트리거하는 방법을 설명합니다. 이 기능은 부적절한 콘텐츠가 포함된 새 파일이 Cloud Storage 버킷에 저장되었을 때 이미지를 흐리게 표시합니다.

부적절한 콘텐츠 기능의 아키텍처

이전 이미지에서 서비스는 Vision API의 세이프서치 인식 기능을 사용하여 이미지 안의 부적절한 콘텐츠를 인식합니다.

Pub/Sub 주제, 구독, 알림 만들기

  1. Cloud Shell에서 safeimage-service라는 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create safeimage-service
    
  2. safeimage-workers라는 Pub/Sub 구독을 만듭니다.

    gcloud pubsub subscriptions create --topic safeimage-service \
        safeimage-workers
    
  3. 새 파일이 Cloud Storage 버킷에 업로드될 때 메시지가 safeimage-service 주제로 전송되도록 Pub/Sub 알림을 구성합니다.

    gsutil notification create -t safeimage-service -f json \
        gs://${PROJECT_ID}-photostore
    

작업자 이미지 빌드 및 배포

  1. Cloud Shell에서 Cloud Build를 사용하여 safeimage-workers 구독에 대해 컨테이너 이미지를 빌드합니다.

    gcloud builds submit ./application/safeimage \
        -t gcr.io/${PROJECT_ID}/safeimage-worker
    
  2. 세이프 이미지 서비스를 위해 Kubernetes 배포 매니페스트를 사용자의 클라우드 프로젝트 ID, Cloud SQL 연결 이름, 컨테이너 이미지 다이제스트로 바꿉니다.

    digest_safeimage=$(gcloud container images describe \
        gcr.io/${PROJECT_ID}/safeimage-worker:latest --format \
        "value(image_summary.digest)")
    sed -i.bak -e "s/\[PROJECT_ID\]/${PROJECT_ID}/" \
        -e "s/\[CONNECTION_NAME\]/${connection_name}/" \
        -e "s/\[DIGEST\]/${digest_safeimage}/" \
        config/safeimage-deployment.yaml
    

배포 리소스 만들기

  1. safeimage-service 주제를 배포하기 위해 safeimage-deployment라는 배포 리소스 만듭니다.

    kubectl create -f config/safeimage-deployment.yaml
    
  2. 결과를 확인합니다.

    kubectl get pods
    

    출력에서 STATUSRunningsafeimage-worker의 pod가 3개 있는지 확인합니다.

    NAME                                READY     STATUS    RESTARTS   AGE
    photoalbum-app-555f7cbdb7-cp8nw     2/2       Running   0          30m
    photoalbum-app-555f7cbdb7-ftlc6     2/2       Running   0          30m
    photoalbum-app-555f7cbdb7-xsr4b     2/2       Running   8          30m
    safeimage-worker-7dc8c84f54-6sqzs   1/1       Running   0          2m
    safeimage-worker-7dc8c84f54-9bskw   1/1       Running   0          2m
    safeimage-worker-7dc8c84f54-b7gtp   1/1       Running   0          2m
    thumbnail-worker-86bd95cd68-9wrpv   2/2       Running   0          30m
    thumbnail-worker-86bd95cd68-kbhsn   2/2       Running   2          30m
    thumbnail-worker-86bd95cd68-n4rj7   2/2       Running   0          30m
    

부적절한 이미지 인식 기능 테스트

이 섹션에서는 세이프서치 인식 기능이 부적절한 이미지를 흐리게 표시하는지 확인하기 위해 테스트 이미지를 업로드합니다. 테스트 이미지는 좀비로 분장한 소녀의 사진입니다(Pixaby CC0 라이선스에 따라 라이선스 권한이 부여됨).

  1. 테스트 이미지를 다운로드합니다.
  2. 이미지를 업로드하기 위해 http://external-ip로 이동한 후 Upload를 클릭합니다.
  3. 새로고침을 클릭합니다. 앱에 흐리게 표시된 미리보기 이미지가 표시됩니다.

    흐리게 표시된 미리보기 이미지

    업로드된 이미지도 흐리게 표시되었는지 확인하기 위해 미리보기 이미지를 클릭합니다.

삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 Cloud 프로젝트를 삭제하는 것입니다. 또는 개별 리소스를 삭제할 수 있습니다.

프로젝트 삭제

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

프로젝트를 삭제하는 대신 이 가이드에서 만든 리소스를 삭제할 수 있습니다.

  1. GKE에서 리소스를 삭제합니다.

    kubectl delete -f config/safeimage-deployment.yaml
    kubectl delete -f config/photoalbum-service.yaml
    kubectl delete -f config/thumbnail-deployment.yaml
    kubectl delete -f config/photoalbum-deployment.yaml
    
  2. GKE에서 클러스터를 삭제합니다.

    gcloud container clusters delete photoalbum-cluster --quiet
    
  3. Container Registry에서 이미지를 삭제합니다.

    gcloud container images delete safeimage-worker
    gcloud container images delete thumbnail-worker
    gcloud container images delete photoalbum-app
    
  4. Pub/Sub에서 구독 및 주제를 삭제합니다.

    gcloud pubsub subscriptions delete safeimage-workers
    gcloud pubsub topics delete safeimage-service
    gcloud pubsub subscriptions delete thumbnail-workers
    gcloud pubsub topics delete thumbnail-service
    
  5. Cloud SQL 인스턴스를 삭제합니다.

    gcloud sql instances delete photoalbum-db --quiet
    
  6. Cloud Storage 버킷을 삭제합니다.

    gsutil rm -r gs://${PROJECT_ID}-photostore
    gsutil rm -r gs://${PROJECT_ID}_cloudbuild
    
  7. 파일을 삭제합니다.

    cd ..
    rm -rf gke-photoalbum-example
    

다음 단계