데이터베이스 쿼리

웹훅이 현재 accountBalanceCheck 함수에서 하드코딩된 데이터를 사용합니다. 본 튜토리얼의 이 단계에서는 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 Checking (
      AccountId INT64,
      Balance INT64,
    ) PRIMARY KEY(AccountId);
    
  3. 제출을 클릭합니다. Google Cloud 콘솔이 데이터베이스 개요 페이지로 돌아가고 진행 중인 스키마 업데이트가 표시됩니다. 업데이트가 완료될 때까지 기다립니다.

  4. 데이터베이스 개요 페이지의 테이블 섹션에서 테이블 만들기를 클릭합니다.

  5. DDL 문 작성 페이지에서 다음을 입력합니다.

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

테이블에 데이터 삽입

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

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

    INSERT INTO Checking (AccountId, Balance)
    VALUES(1, 1000),
          (2, 2000);
    
  4. 실행을 클릭합니다.

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

  6. tutorial-database: 개요 링크를 클릭하여 데이터베이스 개요 페이지로 돌아갑니다.

  7. 데이터베이스 개요 페이지의 테이블 목록에서 저축 예금 테이블을 클릭합니다. Google Cloud 콘솔에 테이블의 스키마 페이지가 표시됩니다.

  8. 탐색 메뉴에서 데이터를 클릭하여 테이블의 데이터 페이지를 표시합니다.

  9. 삽입을 클릭합니다. Google Cloud 콘솔에 INSERTSELECT 문이 포함된 새 쿼리 탭이 있는 테이블의 쿼리 페이지가 표시됩니다. 해당 문을 다음으로 덮어씁니다.

    INSERT INTO Savings (AccountId, Balance)
    VALUES(1, 10000),
          (2, 20000);
    
  10. 실행을 클릭합니다.

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

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

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

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

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

    Cloud Functions 개요로 이동

  2. tutorial-banking-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 안녕하세요. ACME Bank를 이용해 주셔서 감사합니다.
2 계좌 잔액을 확인하고 싶습니다. 저축 예금 계좌와 당좌 계좌 중 어떤 계좌의 잔액을 확인하고 싶으신가요?
3 당좌예금 현재 잔액은 $10.00입니다.

코드를 살펴보면 $10가 하드코딩된 값이 아닌 것을 알 수 있습니다. 즉, 웹훅이 잔액 $10를 포함한 데이터베이스에 성공적으로 연결된 것입니다.

문제 해결

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

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

추가 정보

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