Gemini를 사용하여 서비스의 합성 모니터링 테스트 작성

1. 소개

이 Codelab에서는 작성 지원 기능을 활용하여 기존 서비스의 합성 모니터링 테스트를 작성하는 방법을 살펴보겠습니다.

실습할 내용…

  • Google Cloud Run에 API를 배포하여 Google에서 테스트할 서비스의 기반이 됩니다.
  • 그런 다음 Cloud Monitoring의 기능인 합성 모니터를 작성합니다.
  • 작성 지원 기능을 사용하여 합성 모니터를 작성해 보겠습니다.

학습할 내용…

  • 합성 모니터링의 정의
  • 합성 모니터링에서 Gemini의 작성 지원 기능을 사용하여 핵심 서비스 기능의 유효성을 검사하는 테스트 사례를 작성하는 방법

필요한 항목…

  • Chrome 웹브라우저
  • Gmail 계정
  • 결제가 사용 설정된 Cloud 프로젝트
  • Cloud 프로젝트에 Gemini Code Assist가 사용 설정됨

이 실습은 초보자를 포함한 모든 수준의 개발자를 대상으로 합니다. 샘플 애플리케이션은 Python 언어로 작성되어 있지만 Python 프로그래밍에 익숙하지 않아도 내용을 이해할 수 있습니다.

2. 설정

이제 Google Cloud 프로젝트에서 Cloud를 위한 Gemini를 사용 설정합니다. 아래 단계를 따르세요.

  1. https://console.cloud.google.com에서 이 실습을 위해 사용할 Google Cloud 프로젝트를 선택했는지 확인합니다. 오른쪽 상단에 있는 Gemini 열기 아이콘을 클릭합니다.

28f084ec1e159938.png

  1. 콘솔 오른쪽에 Cloud 채팅용 Gemini 창이 열립니다. 아래와 같이 사용 설정 버튼을 클릭합니다. 사용 설정 버튼이 표시되지 않고 대신 Chat 인터페이스가 표시되는 경우 이미 프로젝트에 Cloud용 Gemini를 사용 설정했을 수 있으므로 다음 단계로 바로 이동할 수 있습니다.

e8df9adc4ea43a37.png

  1. 사용 설정되면 Cloud용 Gemini에 한두 개의 쿼리를 요청하여 테스트할 수 있습니다. 몇 가지 샘플 쿼리가 표시되지만 What is Synthetic Monitoring? 쿼리를 사용해 볼 수 있습니다.

9859ea86a8310cb.png

Cloud를 위한 Gemini가 질문에 대한 답변을 제공합니다. Google Cloud에서 합성 모니터를 작성하는 방법에 관해 제공된 참조 문서 목록을 확인하세요.

오른쪽 상단에 있는 f68286b2b2ea5c0a.png 아이콘을 클릭하면 Cloud Chat을 위한 Gemini 창을 닫을 수 있습니다.

3. Google Cloud Run에 샘플 Inventory API 배포

테스트 작성을 시작하기 전에 테스트할 수 있는 샘플 API가 필요합니다. 이를 위해 Google Cloud Run에 배포할 간단한 인벤토리 API를 작성합니다.

완전 관리형 Code OSS 기반 개발 환경인 Cloud Shell IDE를 사용합니다. 이 환경에는 Google Cloud 서비스를 효율적으로 사용할 수 있게 해주는 Cloud Code IDE 확장 프로그램이 함께 제공됩니다. 아래 단계를 따르세요.

  1. ide.cloud.google.com을 방문합니다. IDE가 표시되는 데 시간이 걸릴 수 있으므로 잠시 기다려 주세요.
  2. 그림과 같이 하단 상태 표시줄에서 Cloud Code - 로그인 버튼을 클릭합니다. 안내에 따라 플러그인을 승인합니다. 상태 표시줄에 'Cloud Code - 프로젝트 없음'이 표시되면 이를 선택한 다음 작업하려는 프로젝트 목록에서 특정 Google Cloud 프로젝트를 선택합니다.

6f5ce865fc7a3ef5.png

  1. 그림과 같이 오른쪽 하단에 있는 Gemini 버튼을 클릭하고 올바른 Google Cloud 프로젝트를 마지막으로 한 번 더 선택합니다. Cloud AI Companion API를 사용 설정하라는 메시지가 표시되면 사용 설정하고 진행하세요.
  2. Google Cloud 프로젝트를 선택한 후 상태 표시줄의 Cloud Code 상태 메시지에서 아래와 같이 오른쪽의 상태 표시줄에서 Code Assist도 사용 설정되어 있는지 확인합니다.

709e6c8248ac7d88.png

  1. 아래의 상태 표시줄에서 Google Cloud 프로젝트 이름을 클릭합니다.

f151759c156c124e.png

  1. 옵션 목록이 표시됩니다. 아래 목록에서 새 애플리케이션을 클릭합니다.

91ea9836f38b7f74.png

  1. Cloud Run 애플리케이션을 선택합니다.
  2. Python(Flask): Cloud Run 애플리케이션 템플릿을 선택합니다.
  3. 새 애플리케이션을 원하는 위치에 저장합니다.
  4. 애플리케이션이 생성되었음을 알리는 알림이 표시되며 아래와 같이 애플리케이션이 로드된 새 창이 열립니다. README.md 파일이 열립니다. 이제 이 뷰를 닫아도 됩니다.

ed250f23b0e4fee8.png

  1. 탐색기에서 app.py 파일로 이동하여 아래에 표시된 콘텐츠로 바꿉니다.
from flask import Flask, jsonify, request

app = Flask(__name__)

inventory = [
    {
        'id': 1,
        'name': 'Item 1',
        'quantity': 10
    },
    {
        'id': 2,
        'name': 'Item 2',
        'quantity': 20
    },
    {
        'id': 3,
        'name': 'Item 3',
        'quantity': 30
    }
]

@app.route('/inventory', methods=['GET'])
def get_inventory():
    return jsonify(inventory)

@app.route('/inventory/<int:id>', methods=['GET'])
def get_inventory_item(id):
    for item in inventory:
        if item['id'] == id:
            return jsonify(item)
    return jsonify({'error': 'Item not found'}), 404

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  1. 이제 Inventory API를 Cloud Run에 배포해 보겠습니다. 왼쪽 상단의 메뉴 아이콘을 통해 Cloud Shell IDE에서 새 터미널 세션을 시작해야 합니다. 아래와 같이 메뉴 아이콘을 클릭한 다음 터미널 → 새 터미널을 클릭합니다.

289173c68f1addb5.png

  1. 터미널 세션에서 다음 명령어를 입력합니다.
gcloud run deploy --source .
  1. 위의 명령어는 배포할 region에 대해 묻습니다. us-central1를 선택하세요. unauthenticated invocations 앱을 허용해 달라는 메시지가 표시되면 y(이)라고 말하여 허용할 수 있습니다.
  2. 서비스가 성공적으로 배포되면 서비스 URL이 제공됩니다. 아래로 내려가세요.

4. Inventory API 테스트

이제 브라우저를 실행하고 다음 엔드포인트에 접속하여 Inventory API를 테스트할 수 있습니다.

SERVICE_URL/inventory

이렇게 하면 서비스의 샘플 데이터에 따라 3개의 인벤토리 항목이 반환됩니다. 샘플 응답은 다음과 같습니다.

[
  {
    "id": 1,
    "name": "Item 1",
    "quantity": 10
  },
  {
    "id": 2,
    "name": "Item 2",
    "quantity": 20
  },
  {
    "id": 3,
    "name": "Item 3",
    "quantity": 30
  }
]

이제 아래 URL을 통해 특정 인벤토리 항목을 가져올 수 있습니다. 이렇게 하면 id 값이 1인 인벤토리 항목이 반환됩니다.

SERVICE_URL/inventory/1

응답은 다음과 비슷해야 합니다.

{
  "id": 1,
  "name": "Item 1",
  "quantity": 10
}

마지막으로, 존재하지 않는 인벤토리 항목을 검색하려고 시도할 수 있습니다.

SERVICE_URL/inventory/200

id 값이 200인 인벤토리 항목이 없으므로 오류 메시지가 반환됩니다. 응답은 다음과 비슷하게 표시됩니다.

{
  "error": "Item not found"
}

이제 Gemini의 도움을 받아 Cloud Monitoring에서 합성 모니터링 테스트를 작성할 준비가 되었습니다.

5. Google Cloud의 종합 모니터링

문서에 나와 있듯이 합성 모니터를 사용하면 테스트할 항목과 테스트 시퀀스를 정의할 수 있습니다. 예를 들어 애플리케이션의 로그인 페이지, 전자상거래 스토어의 결제 프로세스 또는 애플리케이션이 서드 파티 서비스에 대해 수행하는 API 호출을 테스트할 수 있습니다.

합성 모니터를 만들 때는 Cloud Run을 기반으로 빌드된 2세대 Cloud 함수를 배포합니다. 함수는 Node.js로 작성하고 오픈소스 합성 SDK 프레임워크를 사용해야 합니다. Cloud Monitoring에서 이 프레임워크를 배포하고 관리합니다.

Cloud Monitoring은 다음과 같은 유형의 합성 모니터를 지원합니다.

Cloud Monitoring은 이러한 합성 모니터를 실행하는 동안 많은 어려운 작업을 수행합니다. 다음과 같은 책임이 있습니다.

  • Cloud 함수의 주기적 실행
  • 각 실행 결과를 수집하고 저장합니다.
  • 오류 메시지, 오류 유형, 코드 줄과 같은 성공 및 실패 정보
  • 실행 시간
  • 로그
  • 측정항목

Gemini, 특히 테스트용 초기 코드를 제공하는 Help Me Write 기능의 도움을 받아 이를 사용하여 테스트하고 그 위에 추가 기능을 빌드할 수 있습니다. 시작해 봅시다.

6. Inventory API 테스트 사례용 합성 모니터 작성

이제 Cloud 콘솔로 이동하여 합성 모니터를 작성해 보겠습니다.

Cloud Console에서 종합 모니터링 페이지로 이동합니다. 그러면 아래와 같은 페이지가 표시됩니다.

96bfce88f55442f3.png

위 페이지에서 합성 모니터링 만들기 링크를 클릭합니다. 그러면 아래와 같은 구성 양식이 표시됩니다.

af4dde3e9e0a5a16.png

제공된 이름(s1)이 있지만 다른 이름을 선택할 수도 있습니다. 위 화면에서 HELP ME CODE(코드 요청) 버튼을 확인합니다. 그 버튼을 클릭하세요.

그러면 Inventory API가 정상적으로 작동하는지 확인하기 위해 실행하려는 테스트 사례를 설명하는 프롬프트를 제공해야 하는 팝업이 표시됩니다.

a13e78db15b37dd3.png

프롬프트 입력란에서 아래와 같은 프롬프트를 사용합니다.

Help me write Node.js based synthetic test script with the assert module that performs the following tests:
1. A GET operation on SERVICE_URL/inventory. The http response code returned should be 200. 
2. A GET operation on SERVICE_URL/inventory/1. The http response code returned should be 200. The response data is JSON format. It should be a single object with attributes as follows: "id" value should be 1, "name" value should be "Item 1" and "quantity" value should be 10.
3. A GET operation on SERVICE_URL/inventory/200. The https response code returned should be 404. The response data is in JSON format. It should be a single object with attributes as follows: "error" value should be "Item not found". 

세 가지 테스트 사례가 제공되었으며 SERVICE_URL 값을 서비스의 실제 Cloud Run 서비스 이름으로 바꿔야 합니다.

생성을 클릭하면 아래와 같이 Gemini가 테스트 모음 코드와 package.json 파일도 생성합니다. 생성된 코드는 아래에 표시된 코드와 다를 수 있습니다. package.json 파일의 코드와 종속 항목 파일을 살펴보세요.

d19340c357f620bd.png

Cloud Functions에 삽입을 클릭합니다. 그러면 필요한 값이 채워진 Cloud 함수 생성 양식이 표시됩니다.

d70e50624a09149a.png

함수 적용을 클릭한 다음 만들기 버튼을 클릭합니다. 이 예시에서는 알림 채널 구성을 선택하지 않았지만 자유롭게 선택할 수 있습니다.

그러면 백그라운드에서 Google Cloud 함수를 만드는 프로세스가 시작됩니다. 이 작업은 몇 분 정도 소요될 수 있으므로 기다려 주세요.

1b07702ea5ac5bdb.png

Cloud 함수가 성공적으로 배포되면 Cloud Monitoring에서 합성 모니터를 호출하는 작업이 시작됩니다.

처음에는 아래와 같이 호출이 없다는 것을 알 수 있습니다.

dac473269a289a3b.png

특정 실행이 있으면 다양한 실행을 확인할 수 있습니다. 아래 화면은 테스트를 통과하는 것을 보여줍니다.

dc2d7dd98277fbcc.png

합성 모니터 이름 (예: s1)을 클릭하면 아래와 같이 다양한 실행이 표시됩니다.

8369a02b413d12cc.png

7. 축하합니다.

수고하셨습니다. 샘플 API를 Google Cloud Run에 배포하고 Synthetic Monitoring 테스트를 작성하여 서비스 기능을 검증했습니다. 이 과정에서 Gemini를 활용하여 테스트 모음용 코드를 생성했습니다.

8. 참조 문서