gcloud에서 Cloud Spanner 시작하기

목표

이 가이드는 gcloud 명령줄 도구를 사용하는 다음 단계를 안내합니다.

  • Cloud Spanner 인스턴스, 데이터베이스, 스키마 만들기
  • 데이터베이스에 데이터를 쓰고 데이터에 SQL 쿼리 실행
  • 데이터베이스와 인스턴스를 삭제하여 정리

전체 gcloud spanner 참조는 gcloud spanner를 참조하세요.

비용

이 가이드에서는 Google Cloud의 비용 청구 가능한 구성요소인 Cloud Spanner를 사용합니다. Cloud Spanner 사용 비용에 대한 자세한 내용은 가격 책정을 참조하세요.

시작하기 전에

  1. Cloud Spanner API를 사용하려면 설정에 설명된 단계를 따라 기본 Google Cloud 프로젝트 생성 및 설정, 결제 사용 설정, Cloud Spanner API 사용 설정, 사용자 인증 정보를 가져오기 위한 OAuth 2.0 설정을 완료합니다.
    특히 gcloud auth application-default login을 실행하여 사용자 인증 정보로 로컬 개발 환경을 설정해야 합니다.

기본 프로젝트 설정

아직 설정하지 않았다면 gcloud 명령줄 도구의 기본 프로젝트인 Google Cloud Platform 프로젝트의 ID를 설정합니다.

gcloud config set project PROJECT_ID

기본 프로젝트를 설정하지 않은 경우 --project PROJECT_IDgcloud spanner에 대한 첫 번째 인수로 각 명령어에 전달해야 합니다. 예:

gcloud spanner --project=PROJECT_ID instance-configs list

인스턴스

Cloud Spanner를 처음 사용할 때는 인스턴스를 만들어야 합니다. 이 인스턴스는 Cloud Spanner 데이터베이스에서 사용하는 리소스를 할당한 것입니다. 인스턴스를 만들 때 데이터가 저장되는 위치와 데이터에 사용되는 노드 수를 선택합니다.

인스턴스 및 인스턴스 구성

인스턴스를 만들려면 인스턴스 구성을 선택해야 합니다. 이는 Cloud Spanner 데이터의 지리적 위치와 복제를 정의하는 인스턴스 청사진과 같은 것입니다.

인스턴스 구성 나열

인스턴스를 만들 때 해당 인스턴스에 있는 데이터베이스의 지리적 위치와 복제를 정의하는 인스턴스 구성을 지정합니다. 한 지역에 데이터를 저장하는 지역 구성이나 여러 지역에 데이터를 분산하는 다중 지역 구성을 선택할 수 있습니다. 인스턴스에서 자세히 알아보세요.

프로젝트에 사용할 수 있는 인스턴스 구성 세트를 보려면 다음 명령어를 사용합니다.

gcloud spanner instance-configs list

지역 구성 및 다중 지역 구성 목록이 표시됩니다.

지역 구성은 데이터를 단일 지역에 분산하는 반면 다중 지역 구성은 여러 지역에 데이터를 분산합니다. 자세한 내용은 인스턴스를 참조하세요.

인스턴스 만들기

노드가 1개인 리전 인스턴스 구성 regional-us-central1을 사용하여 표시 이름이 My Instancetest-instance라고 하는 인스턴스를 만들려면 다음을 실행합니다.

gcloud spanner instances create test-instance --config=regional-us-central1 \
    --description="My Instance" --nodes=1

위 명령어에서 인스턴스 이름은 test-instance로 설정되고 --description은 인스턴스의 표시 이름을 설정합니다. 이 두 값은 모두 Google Cloud Platform 프로젝트 내에서 고유해야 합니다.

기본 인스턴스 설정

명령어에 인스턴스를 지정하지 않은 경우 Cloud Spanner가 사용하는 기본 인스턴스를 설정할 수 있습니다. 기본 인스턴스를 설정하려면 다음을 사용하세요.

gcloud config set spanner/instance test-instance

데이터베이스 만들기

example-db라는 데이터베이스를 만듭니다.

gcloud spanner databases create example-db

스키마 만들기

Cloud Spanner의 데이터 정의 언어(DDL)를 사용하여 표를 만들거나 변경하거나 삭제하고 색인을 만들거나 삭제합니다.

테이블 두 개를 만들겠습니다.

gcloud spanner databases ddl update example-db \
  --ddl='CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)'
gcloud spanner databases ddl update example-db \
  --ddl='CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX)) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE'

데이터 쓰기

Google 데이터베이스에 샘플 데이터를 추가하겠습니다.

gcloud spanner rows insert --database=example-db \
      --table=Singers \
      --data=SingerId=1,FirstName=Marc,LastName=Richards

gcloud spanner rows insert --database=example-db \
      --table=Singers \
      --data=SingerId=2,FirstName=Catalina,LastName=Smith

gcloud spanner rows insert --database=example-db \
      --table=Singers \
      --data=SingerId=3,FirstName=Alice,LastName=Trentor

gcloud spanner rows insert --database=example-db \
      --table=Albums \
      --data=SingerId=1,AlbumId=1,AlbumTitle="Total Junk"

gcloud spanner rows insert --database=example-db \
      --table=Albums \
      --data=SingerId=2,AlbumId=1,AlbumTitle="Green"

gcloud spanner rows insert --database=example-db \
      --table=Albums \
      --data=^:^SingerId=2:AlbumId=2:AlbumTitle="Go, Go, Go"

기본적으로 쉼표가 목록에서 항목을 구분하는 데 사용됩니다. 마지막 삽입 명령어에서 앨범 제목에 쉼표를 사용할 수 있도록 콜론(^:^)을 구분자로 지정했습니다.

SQL을 사용하여 데이터 쿼리

명령줄에서 쿼리를 실행합니다.

gcloud spanner databases execute-sql example-db \
    --sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'

Cloud Spanner SQL 참조는 쿼리 구문을 참조하세요.

execute-sql 명령어를 사용할 수 있는 플래그의 목록을 확인하려면 gcloud spanner databases execute-sql을 참조하세요.

삭제

이 가이드에서 사용한 리소스에 대한 추가 비용이 Google Cloud 계정에 청구되지 않도록 하려면 데이터베이스와 새로 만든 인스턴스를 삭제합니다.

데이터베이스 삭제

기존 인스턴스를 삭제하려면 다음을 사용하세요.

gcloud spanner databases delete example-db

인스턴스 삭제

기존 인스턴스를 삭제하려면 다음을 사용하세요.

gcloud spanner instances delete test-instance

인스턴스를 삭제하면 해당 인스턴스의 모든 데이터베이스도 삭제됩니다. 인스턴스를 삭제하고 나면 되돌릴 수 없습니다.