본문 바로가기
  • 클라우드야 나랑 친해지자!
클라우드/GCP

Cloud Spanner : 대규모 SQL 실습

by 정민규 2021. 2. 5.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


교재 <구글 클라우드 플랫폼 인 액션> 을 토대로 실습을 진행했습니다.

아래 링크는 저자가 업로드한 것으로 실습을 위한 예제가 작성된 깃허브이므로 참고하시기 바랍니다.

 

github.com/Jpub/GCP

 

Jpub/GCP

<구글 클라우드 플랫폼 인 액션> 리포지토리. Contribute to Jpub/GCP development by creating an account on GitHub.

github.com

 

 

* NewSQL

 

NewSQL  기존 데이터베이스 시스템  ACID 보장 을 유지하면서 온라인 트랜잭션 처리 (OLTP) 워크로드를 위한 NoSQL 시스템 의 확장 성을 제공하려는 관계형 데이터베이스 관리 시스템 의 한 클래스입니다.

높은 프로필 데이터 (예 : 재무 및 주문 처리 시스템)를 처리하는 많은 엔터프라이즈 시스템 은 기존의 관계형 데이터베이스에 비해 너무 크지 만 NoSQL 시스템에는 실용적이지 않은 트랜잭션 및 일관성 요구 사항이 있습니다. 이전에 이러한 조직에서 사용할 수 있었던 유일한 옵션은 더 강력한 컴퓨터를 구입하거나 기존 DBMS를 통해 요청을 배포 하는 맞춤형 미들웨어 를 개발하는 것 입니다. 두 가지 접근 방식 모두 높은 인프라 비용 및 / 또는 개발 비용을 특징으로합니다. NewSQL 시스템은 충돌을 조정하려고합니다.

Spanner는 관계형 데이터베이스(예: 스키마 및 JOIN 쿼리)의 많은 기능을 제공하는 NewSQL 데이터베이스입니다.

 

 

- 출처 : 위키백과 -

 

 

* Spanner

 

Spanner  Google에서 개발한 분산 SQL 데이터베이스입니다 . Spanner는 전 세계에 분산된 데이터베이스 서비스 및 스토리지 솔루션입니다. 글로벌 트랜잭션, 강력하게 일관된 읽기, 자동 다중 사이트 복제 및 장애 조치와 같은 기능을 제공합니다.

 

Spanner는 많은 양의 가변 구조화 된 데이터를 저장합니다. Spanner를 사용하면 사용자가 동기식 복제로 데이터에 대해 강력한 일관성과 고 가용성을 유지하면서 관계형 데이터와 함께 SQL을 사용하여 임의의 쿼리를 수행 할 수 있습니다.

Spanner의 주요 기능 :

  • 트랜잭션은 Cloud Spanner 유니버스 내의 행, 열, 테이블, 데이터베이스에 적용될 수 있습니다.
  • 클라이언트는 자동 다중 사이트 복제 및 장애 조치를 사용하여 데이터 복제 및 배치를 제어 할 수 있습니다.
  • 복제는 동기적이고 강력하게 일관됩니다.
  • 읽기는 강력하게 일관되고 데이터는 부실 읽기를 허용하도록 버전이 지정됩니다. 클라이언트는 가비지 수집 기간에 따라 이전 버전의 데이터를 읽을 수 있습니다.
  • 데이터 읽기 및 쓰기를위한 네이티브 SQL 인터페이스를 지원합니다.

 

- 출처 : 위키백과 -

 

 

 

 

 

* Cloud Spanner와의 상호작용 ( 134p )

 

 

1) Cloud Spanner API 사용 설정

 

 

검색창에 Cloud Spanner API 를 검색한 후, 'API 사용 설정됨' 으로 나타나도록 설정합니다.

 

 

 

 

2) 인스턴스 및 데이터베이스 만들기

 

Spanner -> 인스턴스 만들기 클릭

 

 

  • 첫 번째 필드에 이름 Test Instance 는 UI 에 표시되는 표시 이름이고,
  • 두 번째 필드에 이름 test instance 는 모든 API 호출에서 주소를 지정할 때 필요한 인스턴스의 공식 ID 입니다.
  • VM과 마찬가지로 로컬 시스템에서 Spanner 인스턴스에 액세스할 수 있으므로 지리적으로 가까운 구성을 선택하는 것이 좋습니다.
  • us-central1 구성에서 Spanner 인스턴스를 배포하는 경우 VM 또한 us-central1 영역에 배치해야합니다. ( 동일한 영역에 배치할 것 )
  • 노드의 개수는 벤치마크 또는 성능 테스트를 실행하지 않는 한 기본 실습을 목적으로 1로 설정했습니다.

 

 

위의 설정을 마치고 Spanner 인스턴스가 생성되면 새 데이터베이스를 생성하도록 하겠습니다.

 

 

 

 

데이터베이스의 이름은 test-database 로 설정하고 우선 데이터베이스는 완전히 비워둔 상태로 생성합니다.

잠시 후, 비어 있는 데이터베이스가 생성되면 스키마로 이동하여 새 테이블을 작성해보도록 하겠습니다.

 

 

테이블 만들기를 클릭 후, DDL 구문에 간단한 직원 테이블 예제(list6.2참고)를 넣어보겠습니다.

 

 

 

 

위의 employees 테이블이 생성되면 스키마, 색인, 데이터 등 테이블 세부 정보를 확인할 수 있습니다.

 

 

 

 

3) 데이터 추가

 

Spanner와 다른 관계형 데이터베이스의 주요 차이점 중 하나는 데이터를 수정하는 방법입니다.

MySQL과 같은 전형적인 데이터베이스에서는 INSERT, UPDATE 쿼리를 사용하여 기존 데이터를 업데이트하지만,

Spanner는 NoSQL 영향으로 두 가지 명령을 지원하지 않습니다.

 

 

@google-cloud/spanner Node.js 패키지를 사용하여 Spanner의 employees 테이블에 직원 데이터를 추가합니다.

$npm install @google-cloud/spanner@0.7.0을 실행해 npm을 통해 설치할 수 있습니다.

 

 

 

모든 것이 작동하면 데이터가 저장되었음을 확인하는 출력과 지속적으로 변경되는 타임 스태프가 표시됩니다.

 

 

 

employees 테이블에 데이터가 삽입된 것을 확인할 수 있습니다.

 

 

 

 

4) 데이터 쿼리

데이터를 쿼리할 수 있는 두 가지 방법이 있습니다. 먼저, Spanner의 읽기 API를 사용하여 단일 테이블을 쿼리할 수 있습니다. 이러한 쿼리는 특정 키 조회 또는 일부 필터가 적용된 테이블 검색일 수 있습니다. 이 메소드는 추가한 세 행을 검색하는 데 가장 적합합니다.

 

Spanner의 Read API를 사용하여 키로 행을 검색해보겠습니다. (list6.4참고)

 

 

Spanner의 Read API를 사용하여 모든 행을 검색해보겠습니다. (list6.5참고)

 

 

 

추가한 행이 올바르게 저장되어있는 것을 확인할 수 있습니다.

 

 

지금까지 Spanner로 데이터베이스를 만들고 내용을 삽입 후 확인까지 해봤습니다.

이 외에도 아래와 같은 예제를 수행하여 SQL 쿼리를 통해서도 같은 결과가 출력되는 것을 확인하실 수 있고, 스키마 변경도 하실 수 있습니다.

 

- Spanner에 대한 SQL 쿼리 실행(list 6.6, list 6.7 참고)

- Cloud SQL을 사용하여 스키마 변경(list 6.9 참고)

 

 

 

 

반응형

'클라우드 > GCP' 카테고리의 다른 글

App Engine : 완전 관리형 애플리케이션  (0) 2021.02.08
Node.js 설치  (0) 2021.02.05
로드 밸런싱(Load Balancing) 구축 실습  (0) 2021.02.04
Wordpress 실습 (Ubuntu)  (0) 2021.01.29
SDK 설치 및 인스턴스 연결  (0) 2021.01.29

댓글