데이터베이스 쿼리

웹훅이 현재 cruisePlanCoverage 함수에서 하드코딩된 데이터를 사용합니다. 본 튜토리얼의 이 단계에서는 Spanner 데이터베이스를 만들어 포함된 목적지로 채운 후 데이터베이스를 쿼리하도록 함수를 업데이트합니다.

프로젝트 구성

Dialogflow 에이전트 및 데이터베이스가 모두 동일한 프로젝트에 있어야 합니다. 이 방법은 함수에서 데이터베이스에 안전하게 액세스할 수 있는 가장 쉬운 방법입니다. 또한 Spanner API를 사용 설정해야 합니다.

  1. 데이터베이스를 만들기 전에 Google Cloud 콘솔에서 프로젝트를 선택합니다.

    프로젝트 선택기로 이동

  2. 프로젝트에서 Spanner API를 사용하도록 설정합니다.

    Spanner API 사용 설정

Spanner 인스턴스 만들기

처음으로 Spanner를 사용하는 경우 인스턴스를 만들어야 합니다. 이 인스턴스는 해당 인스턴스에서 Spanner 데이터베이스가 사용하는 리소스를 할당한 것입니다.

  1. Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다.

    Spanner 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.

  3. 인스턴스 이름으로 튜토리얼 인스턴스를 입력합니다.

  4. 인스턴스 ID는 인스턴스 이름을 기준으로 자동으로 입력됩니다.

  5. 구성 선택에서 기본 옵션인 리전을 그대로 두고 함수를 만들 때 동일한 리전 위치를 선택합니다.

  6. 컴퓨팅 용량 할당에 100개의 처리 단위를 입력합니다. 이렇게 하면 튜토리얼에 최소한의 용량이 제공됩니다.

  7. 만들기를 클릭합니다. Google Cloud 콘솔에 생성된 인스턴스의 개요 페이지가 표시됩니다.

Spanner 데이터베이스 만들기

인스턴스가 있으므로 이제 데이터베이스를 만들어야 합니다. 데이터베이스를 만들려면 다음 안내를 따르세요.

  1. 인스턴스 개요 페이지에서 데이터베이스 만들기를 클릭합니다.
  2. 데이터베이스 이름으로 tutorial-database를 입력합니다.
  3. Google 표준 SQL 데이터베이스 언어를 선택합니다.
  4. 만들기를 클릭합니다. Google Cloud 콘솔에 생성된 데이터베이스의 개요 페이지가 표시됩니다.

데이터베이스의 테이블 만들기

이제 데이터베이스가 있으므로 데이터베이스의 테이블을 만들어야 합니다. 테이블을 만들려면 다음 안내를 따르세요.

  1. 데이터베이스 개요 페이지의 테이블 섹션에서 테이블 만들기를 클릭합니다.
  2. DDL 문 작성 페이지에서 다음을 입력합니다.

    CREATE TABLE Destinations (
      Destination STRING(1024),
      Covered BOOL,
    ) PRIMARY KEY(Destination);
    
  3. 제출을 클릭합니다. Google Cloud 콘솔이 데이터베이스 개요 페이지로 돌아가고 진행 중인 스키마 업데이트가 표시됩니다. 업데이트가 완료될 때까지 기다립니다.

테이블에 데이터 삽입

이제 데이터베이스에 테이블이 있으므로 테이블에 데이터를 추가해야 합니다. 데이터를 추가하려면 다음 안내를 따르세요.

  1. 데이터베이스 개요 페이지의 테이블 목록에서 목적지 테이블을 클릭합니다. Google Cloud 콘솔에 목적지 테이블의 스키마 페이지가 표시됩니다.
  2. 왼쪽 탐색 메뉴에서 데이터를 클릭하여 목적지 테이블의 데이터 페이지를 표시합니다.
  3. 삽입을 클릭합니다. Google Cloud 콘솔에 INSERTSELECT 문이 포함된 새 쿼리 탭이 있는 목적지 테이블의 쿼리 페이지가 표시됩니다. 해당 문을 다음으로 덮어씁니다.

    INSERT INTO Destinations (Destination, Covered)
    VALUES('anguilla', TRUE),
          ('canada', TRUE),
          ('china', TRUE),
          ('italy', TRUE),
          ('mexico', TRUE),
          ('spain', FALSE);
    
  4. 실행을 클릭합니다.

  5. 왼쪽 탐색 메뉴에서 데이터를 다시 클릭하여 목적지 테이블의 데이터를 표시합니다. 테이블에 원하는 데이터가 포함되어 있는지 확인합니다.

데이터베이스를 쿼리하도록 Cloud 함수 업데이트

웹훅 코드의 cruisePlanCoverage 함수는 데이터베이스에 연결하는 데 필요한 정보로 특정 환경 변수가 설정되었는지 확인합니다. 이러한 환경 변수가 설정되지 않으면 함수에서 하드코딩된 목적지 목록을 사용합니다.

이제 데이터베이스가 설정되었으므로 Cloud 함수를 업데이트하여 필요한 환경 변수를 설정합니다.

  1. Cloud Functions 개요 페이지를 엽니다.

    Cloud Functions 개요로 이동

  2. tutorial-telecommunications-webhook 함수를 클릭하여 세부정보 페이지로 이동합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드 및 연결 설정 섹션을 엽니다.

  5. 런타임 탭을 선택합니다.

  6. 다음 변수를 런타임 환경 변수 섹션에 추가합니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • SPANNER_INSTANCE_ID: Spanner 인스턴스 ID입니다(일반적으로 tutorial-instance).
    • SPANNER_DATABASE_ID: Spanner 데이터베이스 ID입니다(일반적으로 tutorial-database).
  7. 다음을 클릭합니다.

  8. 배포를 클릭합니다.

  9. 상태 표시기에 함수가 성공적으로 배포된 것으로 표시될 때까지 기다립니다.

에이전트 테스트

이제 에이전트를 사용해 볼 수 있습니다. Dialogflow 콘솔에서 에이전트 테스트 버튼을 클릭하여 시뮬레이터를 엽니다. 에이전트와 다음 대화를 시도해 봅니다.

대화 차례 에이전트
1 안녕하세요 안녕하세요. 저는 가상 통신 에이전트입니다. 청구 및 요금제 관련 질문을 해결하고 문제를 해결하고 여행 및 크루즈 일정을 추가하는 데 도움을 드릴 수 있습니다. 무엇을 도와드릴까요?
2 크루즈 일정을 추가하고 싶습니다. 한번 확인해 보겠습니다. 전화번호가 어떻게 되나요?
3 123-123-1234 크루즈 일정이 어떻게 되나요?
4 7 옵션 1에는 통화 및 문자가 포함됩니다. 요금은 하루 $[XX]입니다. 자세한 내용은 [URL]을 참조하세요. 옵션 2에는 통화, 문자, 데이터가 포함됩니다. 요금은 하루 $[XX]입니다. 자세한 내용은 [URL]을 참조하세요. 어떤 크루즈 일정을 추가하시겠어요?
5 옵션 1 알겠습니다. 해당 일정을 계정에 추가했습니다. 크루즈 이용 중에 육지 일정도 필요할 수 있습니다. 어떤 항구에 머물까요?
6 이탈리아 거기에서 며칠을 보낼 생각인가요?
7 3 반가운 소식을 알려드립니다. 이탈리아 육지 일정은 무료로 이용할 수 있습니다. 이제 준비가 끝났습니다. 도움이 더 필요한 사항은 없나요?

코드를 살펴보면 포함된 목적지에 대한 하드코딩된 목록에 이탈리아는 없는 것을 알 수 있습니다. 즉, 웹훅이 이탈리아를 포함한 데이터베이스에 성공적으로 연결된 것입니다.

문제 해결

웹훅 코드에는 로깅 구문이 포함되어 있습니다. 문제가 있으면 Cloud 함수의 로그를 확인해 보세요.

함수가 데이터베이스에 연결되지 않고 로그에 권한 오류가 표시되면 함수에서 사용하는 기본 서비스 계정의 역할을 수정해야 할 수 있습니다. 이 서비스 계정의 형식은 PROJECT_ID@appspot.gserviceaccount.com입니다. 다음 방법 중 하나로 이를 수정할 수 있습니다.

추가 정보

위 단계에 대한 자세한 내용은 다음을 참조하세요.