이 문서에서는 Google Cloud 콘솔 및 클라이언트 라이브러리를 사용하여 Spanner Graph 데이터베이스를 설정하고 쿼리하여 복잡한 데이터 관계를 모델링, 저장, 분석하는 방법을 보여줍니다.
다음 주제에서는 각 방법을 안내합니다.
Spanner 가격 책정 세부정보는 Spanner 가격 책정을 참조하세요.
Codelab을 사용해 보려면 Spanner Graph 시작하기를 참조하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- Spanner API를 사용 설정합니다.
 Spanner API 사용 설정으로 이동
- 
    
    
    
    
    
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
      
      
    
    
    
    
    
  
  
  인스턴스 및 데이터베이스를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Cloud Spanner 관리자( roles/spanner.admin) IAM 역할을 부여해 달라고 요청하세요.
- 
    
    
    
    
    
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
      
      
    
    
    
    
    
  
  
  Cloud Spanner 관리자 역할이 부여되지 않은 경우 Spanner 그래프를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 Cloud Spanner 데이터베이스 리더( roles/spanner.databaseReader) IAM 역할을 부여해 달라고 요청하세요.
- Google Cloud 콘솔에서 Spanner 페이지로 이동합니다. 
- 아직 만들지 않았으면 Google Cloud 프로젝트를 선택하거나 만듭니다. 
- 다음 중 하나를 수행합니다. - 이전에 Spanner 인스턴스를 만들지 않았으면 Spanner 시작 페이지에서 프로비저닝된 인스턴스 만들기를 클릭합니다. 
- Spanner 인스턴스를 만들었으면 인스턴스 페이지에서 인스턴스 만들기를 클릭합니다. 
 
- 버전 선택 페이지에서 Enterprise Plus 또는 Enterprise를 선택합니다. - Spanner Graph는 Enterprise 버전 또는 Enterprise Plus 버전에서만 사용할 수 있습니다. 여러 버전을 비교하려면 버전 비교를 클릭합니다. 자세한 내용은 Spanner 버전 개요를 참조하세요. 
- 계속을 클릭합니다. 
- 인스턴스 이름에 인스턴스 이름을 입력합니다(예: - test-instance).
- 인스턴스 ID에서 인스턴스 ID를 그대로 두거나 변경합니다. 인스턴스 ID는 기본적으로 인스턴스 이름으로 설정되지만 변경할 수 있습니다. 인스턴스 이름과 인스턴스 ID는 동일할 수도 있고 다를 수도 있습니다. 
- 계속을 클릭합니다. 
- 구성 선택에서 다음을 수행합니다. - 리전은 선택한 상태로 둡니다. 
- 구성 선택에서 리전을 선택합니다. Spanner는 선택한 리전에 인스턴스를 저장하고 복제합니다. 
- 계속을 클릭합니다. 
 
- 컴퓨팅 용량 구성에서 다음을 수행합니다. - 단위 선택에서 처리 단위(PU)를 선택합니다. 
- 확장 모드 선택에서 수동 할당을 선택한 상태로 두고 수량에서 처리 단위를 1,000개로 둡니다. 
 
- 만들기를 클릭합니다. 생성된 인스턴스의 개요 페이지가 Google Cloud 콘솔에 표시됩니다. 
- Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다. 
- 자신이 만든 인스턴스(예: - Test Instance)를 클릭합니다.
- 개요의 인스턴스 이름 아래에서 데이터베이스 만들기를 클릭합니다. 
- 데이터베이스 이름에 데이터베이스 이름을 입력합니다. 예를 들면 - example-db입니다.
- 데이터베이스 언어 선택에서 Google 표준 SQL을 선택합니다. Spanner Graph는 PostgreSQL 언어로 사용할 수 없습니다. 
- DDL 템플릿 편집기 탭에 다음 스키마를 입력합니다. 스키마에는 2개의 노드 테이블 정의인 - Person및- Account와 2개의 에지 테이블 정의인- PersonOwnAccount및- AccountTransferAccount가 포함됩니다. Spanner Graph는 관계형 테이블을 사용하여 그래프를 정의하므로 스키마에 관계형 테이블과 그래프 문이 모두 표시됩니다. Spanner Graph 스키마에 관한 자세한 내용은 Spanner Graph 스키마 개요를 참고하세요.- CREATE TABLE Person ( id INT64 NOT NULL, name STRING(MAX), birthday TIMESTAMP, country STRING(MAX), city STRING(MAX), ) PRIMARY KEY (id); CREATE TABLE Account ( id INT64 NOT NULL, create_time TIMESTAMP, is_blocked BOOL, nick_name STRING(MAX), ) PRIMARY KEY (id); CREATE TABLE PersonOwnAccount ( id INT64 NOT NULL, account_id INT64 NOT NULL, create_time TIMESTAMP, FOREIGN KEY (account_id) REFERENCES Account (id) ) PRIMARY KEY (id, account_id), INTERLEAVE IN PARENT Person ON DELETE CASCADE; CREATE TABLE AccountTransferAccount ( id INT64 NOT NULL, to_id INT64 NOT NULL, amount FLOAT64, create_time TIMESTAMP NOT NULL, order_number STRING(MAX), FOREIGN KEY (to_id) REFERENCES Account (id) ) PRIMARY KEY (id, to_id, create_time), INTERLEAVE IN PARENT Account ON DELETE CASCADE; CREATE OR REPLACE PROPERTY GRAPH FinGraph NODE TABLES (Account, Person) EDGE TABLES ( PersonOwnAccount SOURCE KEY (id) REFERENCES Person (id) DESTINATION KEY (account_id) REFERENCES Account (id) LABEL Owns, AccountTransferAccount SOURCE KEY (id) REFERENCES Account (id) DESTINATION KEY (to_id) REFERENCES Account (id) LABEL Transfers );
- 암호화 옵션 표시에서 기본 설정을 유지합니다. 
- 만들기를 클릭합니다. Google Cloud 콘솔에 생성된 데이터베이스의 개요 페이지가 표시됩니다. 
- Spanner Studio 페이지에서 새 탭을 클릭하거나 편집기 탭을 사용합니다. 
- 다음 그래프 데이터 삽입 문을 복사하여 노드와 에지에 붙여넣습니다. - INSERT INTO Account (id, create_time, is_blocked, nick_name) VALUES (7,"2020-01-10 06:22:20.222",false,"Vacation Fund"), (16,"2020-01-27 17:55:09.206",true,"Vacation Fund"), (20,"2020-02-18 05:44:20.655",false,"Rainy Day Fund"); INSERT INTO Person (id, name, birthday, country, city) VALUES (1,"Alex","1991-12-21 00:00:00","Australia","Adelaide"), (2,"Dana","1980-10-31 00:00:00","Czech_Republic","Moravia"), (3,"Lee","1986-12-07 00:00:00","India","Kollam"); INSERT INTO AccountTransferAccount (id, to_id, amount, create_time, order_number) VALUES (7,16,300,"2020-08-29 15:28:58.647","304330008004315"), (7,16,100,"2020-10-04 16:55:05.342","304120005529714"), (16,20,300,"2020-09-25 02:36:14.926","103650009791820"), (20,7,500,"2020-10-04 16:55:05.342","304120005529714"), (20,16,200,"2020-10-17 03:59:40.247","302290001255747"); INSERT INTO PersonOwnAccount (id, account_id, create_time) VALUES (1,7,"2020-01-10 06:22:20.222"), (2,20,"2020-01-27 17:55:09.206"), (3,16,"2020-02-18 05:44:20.655");
- 실행을 클릭합니다. 실행이 완료되면 결과 탭에 3개의 행이 삽입된 것이 표시됩니다. 
- 데이터베이스 개요 페이지의 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다. 
- Spanner Studio 페이지에서 새 탭을 클릭하거나 편집기 탭을 사용합니다. 
- 쿼리 편집기에 다음 쿼리를 입력합니다. 쿼리는 Dana가 송금한 모든 사람과 송금 금액을 찾습니다. - GRAPH FinGraph MATCH (from_person:Person {name: "Dana"})-[:Owns]-> (from_account:Account)-[transfer:Transfers]-> (to_account:Account)<-[:Owns]-(to_person:Person) RETURN from_person.name AS from_account_owner, from_account.id AS from_account_id, to_person.name AS to_account_owner, to_account.id AS to_account_id, transfer.amount AS amount
- 실행을 클릭합니다. - 결과 탭에는 계좌 번호 20을 소유한 다나의 송금 경로가 표시됩니다. - 알렉스가 소유한 Account {id:7}로 송금
- 리가 소유한 - Account {id:16}으로 송금
 
- 알렉스가 소유한 
- Google Cloud 콘솔에서 Spanner 인스턴스로 이동합니다. 
- 인스턴스 이름(예: Test Instance)을 클릭합니다. 
- 데이터베이스 이름(예: example-db)을 클릭합니다. 
- 데이터베이스 세부정보 페이지에서 데이터베이스 삭제를 클릭합니다. 
- 데이터베이스 이름을 입력하고 삭제를 클릭하여 데이터베이스 삭제를 확인합니다. 
- Google Cloud 콘솔에서 Spanner 인스턴스 페이지로 이동합니다. 
- Test Instance와 같이 삭제하려는 인스턴스의 이름을 클릭합니다. 
- 인스턴스 삭제를 클릭합니다. 
- 인스턴스 이름을 입력하고 삭제를 클릭하여 인스턴스 삭제를 확인합니다. 
- codelab을 사용하여 Spanner Graph 자세히 알아보기
- Spanner Graph 스키마 알아보기
- Spanner Graph 스키마 만들기, 업데이트, 삭제
- Spanner Graph 데이터 삽입, 업데이트, 삭제
- Spanner Graph 쿼리 개요
- Spanner Graph로 마이그레이션
Spanner 인스턴스 만들기
Spanner를 처음 사용할 때는 Spanner 데이터베이스의 리소스를 할당하는 인스턴스를 만들어야 합니다. 이 섹션에서는 Google Cloud 콘솔을 사용하여 인스턴스를 만드는 방법을 보여줍니다.
스키마를 사용하여 그래프 데이터베이스 만들기
이 섹션에서는 Spanner Graph 스키마를 사용하여 Spanner Graph 데이터베이스를 만드는 방법을 보여줍니다. Google Cloud 콘솔 또는 클라이언트 라이브러리를 사용할 수 있습니다.
콘솔
클라이언트 라이브러리
Python
자바
Go
C++
그래프 데이터 삽입
데이터베이스를 만든 후 데이터를 추가할 수 있습니다. 이 섹션에서는 그래픽 인터페이스를 위해 Google Cloud 콘솔을 사용하거나 클라이언트 라이브러리를 프로그래매틱 방식으로 사용하여 그래프에 데이터를 삽입하는 방법을 보여줍니다.
콘솔
클라이언트 라이브러리
Python
자바
Go
C++
다음 그래프는 삽입의 사용자, 계정, 계정 소유권, 계정 전송을 보여줍니다.
 
그래프 쿼리 실행
그래프에 데이터를 삽입한 후 쿼리하여 패턴과 관계를 찾을 수 있습니다. 이 섹션에서는 그래픽 인터페이스를 위해Google Cloud 콘솔을 사용하거나 클라이언트 라이브러리를 사용하여 프로그래매틱 방식으로 쿼리를 실행하는 방법을 보여줍니다.
콘솔
클라이언트 라이브러리
Python
자바
Go
C++
삭제
이 섹션에서는 Cloud Billing 계정에 요금이 청구되지 않도록 만든 리소스를 정리하는 방법을 보여줍니다. 다음 단계 섹션에서 다른 Spanner Graph 예시를 살펴볼 계획이라면 아직 이 단계를 수행하지 마세요. Spanner 인스턴스를 삭제하면 해당 인스턴스 내의 모든 데이터베이스도 삭제됩니다.