데이터ㆍ분석

플래닛스케일 리뷰 | 수평 확장 가능한 마이SQL 호환 서버리스 DB 플랫폼

Martin Heller | InfoWorld 2021.09.06
플래닛스케일(PlanetScale)은 마이SQL(MySQL)과 퍼코나(Percona), 마리아DB(MariaDB)의 수평 확장을 위한 데이터베이스 클러스터링 시스템인 비테스(Vitess) 기반의 마이SQL 호환 서버리스 데이터베이스 플랫폼이다. 비테스는 슬랙, 스퀘어, 깃허브, 유튜브를 비롯한 많은 서비스에 사용된다. 슬랙의 비테스에는 약 6,000대의 서버가 있으며 현재 가장 큰 비테스 환경은 약 7만 대 서버로 구성된다.
 
마이SQL 데이터베이스는 처음 사용을 시작할 때는 문제가 없지만 데이터베이스가 커지면(예를 들어 운영을 시작하고 1년 정도가 지나면) 쉽게 한도에 도달한다. 가장 일반적으로 사용되는 마이SQL 데이터베이스 엔진인 이노DB(InnoDB)의 행 크기를 제한하는 페이지의 최대 크기는 64KB이며 테이블 크기를 제한하는 테이블스페이스의 최대 크기는 256TB이기 때문이다.

비테스는 이런 상황에서 마이SQL 데이터베이스를 샤딩하는 방법으로 확장한다. 샤드는 데이터의 수평(행 방향) 파티션이다. 데이터베이스가 샤딩되면 비테스는 샤드 키 필드 값을 기준으로 적절한 마이SQL 인스턴스로 쿼리를 라우팅하므로 애플리케이션 변경 필요성을 최소화할 수 있다. 또한 비테세가 생성하는 연결은 마이SQL보다 훨씬 가벼워서 수천 개의 연결이 가능하고, 데이터베이스 성능을 저하할 수 있는 쿼리를 재작성할 수 있는 구성 가능한 규칙도 지원한다.

플래닛스케일은 기본적으로 클라우드에 있고 클라우드 사용자 인터페이스와 자신의 시스템에서 실행할 수 있는 명령줄 인터페이스(CLI)를 갖춘 마이SQL 기반 비테스다. CLI를 통해 데이터베이스 만들기부터 데이터 조작에 이르기까지 플래닛스케일 인스턴스의 거의 모든 부분을 제어할 수 있다. 데이터 조작은 오라클 마이SQL 클라이언트에 의존하므로 이 클라이언트도 로컬 시스템에 설치해야 한다.

노SQL(NoSQL) 데이터베이스를 계산에 포함할지에 따라 다르지만 플래닛스케일과 경쟁하는 분산 데이터베이스 제품은 10개 정도로 볼 수 있다. 클라우드로 한정해서 보면 구글 클라우드 스패너(Google Cloud Spanner, 관계형), 애저 코스코스 DB(Azure Cosmos DB, 멀티 모델 노SQL), 아마존 다이나모DB(Amazon DynamoDB, 키-값 및 문서), 그리고 아마존 오로라(Amazon Aurora, 관계형)가 있다.

업체로는 코크로치DB(CockroachDB, 관계형), 포나(Fauna, 관계형/서버리스), 네오4j(Neo4j, 그래프), 몽고DB 아틀라스(MongoDB Atlas, 문서), 데이터스택스 아스트라(DataStax Astra, 와이드 ), 카우치베이스 클라우드(Couchbase Cloud, 문서) 등이 있다.
 

플래닛스케일 설정하기

플래닛스케일을 시작하기는 정말 쉽다. 기본 옵션은 무료 개발자 요금제로, 신용카드도 필요 없고 이름과 이메일 주소, 암호, 그리고 기업 이름만 입력하면 된다. 개발자 요금제가 한도에 이르거나 초과하면 그때 신용카드를 추가해 스케일러 요금제로 전환할 수 있다.

개발 시스템에 플래닛스케일 CLI와 마이SQL 클라이언트 셸도 설치해야 한다. 맥에서는 홈브루(Homebrew)로 2가지 모두 설치한다. 리눅스에서는 해당 바이너리를 다운로드해서 dpkg(데비안) 또는 rpm(레드햇)을 사용한다. 윈도우의 경우 설치 프로그램을 다운로드해서 실행하면 된다.
 
<화면 1> 플래닛스케일을 시작하려면 계정을 만들고 기업 이름을 입력해야 한다. © IDG

필자의 맥북 프로에서 brew를 사용한 pscale을 빠르게 간편하게 설치할 수 있었다. 그러나 마이SQL 클라이언트를 설치할 때는 홈브루가 온갖 종류의 개발자 패키지를 가져오면서 1시간 넘게 걸렸다.
 
<화면 2> 기업 이름을 입력하면 1개 이상의 데이터베이스를 만들 수 있다. 여기서는 기본 이름으로 리뷰용 데이터베이스를 만들었다. © IDG
 

플래닛스케일 GUI와 CLI

이번 리뷰에는 다양한 플래닛스케일 GUI 예시를 제시한다. CLI를 사용하려면 pscale auth로 플래닛스케일 계정과 연결되도록 권한을 부여해야 한다. <리스트 1>의 pscale shell show tables 명령은 샘플 브랜치를 메인으로 배포한 후 온보딩 데모 데이터베이스의 테이블 상태를 보여준다.
 
<리스트 1> 플래닛스케일 GUI

martinheller@Martins-Retina-MacBook ~ % pscale shell onboarding-demo main
onboarding-demo/|⚠ main ⚠|> show tables;
+---------------------------+
| Tables_in_onboarding-demo |
+---------------------------+
| reminders                 |
+---------------------------+

onboarding-demo/|⚠ main ⚠|>

martinheller@Martins-Retina-MacBook ~ % pscale --help
pscale is a CLI library for communicating with PlanetScale's API.

Usage:
  pscale [command]
Available Commands:
  audit-log      List audit logs
  auth           Login and logout via the PlanetScale API
  backup         Create, list, show, and delete branch backups
  branch         Create, delete, diff, and manage branches
  completion     Generate completion script for your shell
  connect        Create a secure connection to a database and branch for a local client
  database       Create, read, delete, and dump/restore databases
  deploy-request Create, review, diff, and manage deploy requests
  help           Help about any command
  org            List, show, and switch organizations
  region         List regions
  service-token  Create, list, and manage access for service tokens
  shell          Open a MySQL shell instance to a database and branch
  signup         Signup for a new PlanetScale account

Flags:
      --api-token string            The API token to use for authenticating against the PlanetScale API.
      --api-url string              The base URL for the PlanetScale API. (default "https://api.planetscale.com/")
      --config string               Config file (default is $HOME/.config/planetscale/pscale.yml)
      --debug                       Enable debug mode
  -f, --format string               Show output in a specific format. Possible values: [human, json, csv] (default "human")
  -h, --help                        help for pscale
      --no-color                    Disable color output
      --service-token string        Service Token for authenticating.
      --service-token-name string   The Service Token name for authenticating.
      --version                     Show pscale version

Use "pscale [command] --help" for more information about a command.
 

플래닛스케일 브랜치

스키마 변경을 프로덕션 관계형 데이터베이스에 배포하는 일은 대체로 몹시 까다롭다. 특히 데이터베이스가 트랜잭션을 활발하게 처리하고 있는 도중이라면 더욱더 어렵다. 플래닛스케일은 브랜치 기능을 추가해 이 문제를 극복할 수 있도록 했다. 깃(Git) 사용자라면 브랜치라는 용어가 익숙할 것이다.

브랜치를 추가하면 새 빈 데이터베이스에 데이터베이스 스키마의 복사본이 생성된다(데이터 없이). 그러면 이 브랜치에서 스키마를 수정하고 최종적으로 브랜치를 배포 큐에 추가해 메인 프로덕션 데이터베이스를 수정할 수 있다. 스키마 충돌은 배포를 시도할 때 포착된다. 유효한 배포도 프로덕션 쿼리에 영향을 미치지 않기 위해 지연될 수 있다.

플래닛스케일의 스키마 변경은 논블로킹(non-blocking)이다. 참고로 플래닛스케일은 외래 키 제약 조건을 지원하지 않는다. 온라인 스키마 변경 중 데이터베이스 장애를 유발할 수 있기 때문이다.
 
<화면 3> 플래닛스케일에서는 브랜치에서만 데이터베이스 스키마를 수정할 수 있다. 확인한 이후에야 브랜치를 메인 프로덕션 데이터베이스에 배포할 수 있다. © IDG
 

플래닛 스케일 지역

플래닛스케일은 현재 <리스트 2>와 같이 3개 지역에서 실행되며 앞으로 더 추가될 예정이다.
 
<리스트 2> 플래닛 스케일 지원 지역

martinheller@Martins-Retina-MacBook ~ % pscale region list
  NAME      SLUG      ENABLED 
 --------- --------- ---------
  US East   us-east   Yes     
  US West   us-west   Yes     
  EU West   eu-west   Yes     

데이터베이스를 만들 때 하나의 지역만 선택할 수 있다. 애플리케이션과 가장 가까운 지역을 선택해야 한다. 스키마를 변경하고 테스트하는 개발자의 위치와 가까운 다른 지역에 브랜치를 만들 수 있다.
 

플래닛스케일 인증과 MFA

플래닛스케일의 인증 방법은 이메일 주소와 암호, 싱글사인온, 깃허브를 통한 OAuth 등 3가지다. 이메일 주소와 암호를 사용하는 경우 선택적으로 이중인증(MFA)을 활성화할 수 있다. 플래닛스케일의 MFA는 오디(Authy)를 비롯한 다른 MFA 앱에 구현된 것과 같은 시간 기반 일회용 암호(TOTP) 방식을 사용한다. 또한 플래닛스케일은 모바일 디바이스 분실 시 사용할 수 있는 복구 코드도 생성한다.
 

플래닛스케일 보안, 로그, 백업

플래닛스케일은 SOC 2 타입 2를 준수하며 신청하면 SOC 감사 보고서를 받아볼 수 있다. 플래닛스케일은 모든 유휴(at rest) 데이터를 암호화하며 인증(<화면 4> 참조), 감사 로깅, 사용자 액세스 관리를 제공한다. 감사 로그는 기업의 모든 데이터베이스 수준 및 브랜치 수준 이벤트를 보여준다. 작업을 수행한 사람, IP 주소, 작업의 날짜와 시간이 포함된다. 인증 및 사용자 수준 구성 변경을 기록하는 보안 로그도 있다.
 
<화면 4> 플래닛스케일은 암호를 생성하고 12가지 방식으로 스트링을 지원한다. © IDG

기본적으로 플래닛스케일은 자동으로 모든 데이터베이스 브랜치를 매일 백업하며, 보존 기간은 2일이다. 자동 백업은 무료다. 장기적인 보존을 위해 예를 들어 월별로 백업하도록 수동 백업을 예약할 수도 있다.
 

플래닛스케일을 앱에 연결하기

플래닛스케일은 암호를 생성해 마이SQL 콘솔, 엘릭서(Elixir), 고, 자바, 라라벨(Laravel), 닷넷, PHP, 프리스마(Prisma), 파이썬, 레일스, 러스트를 위한 연결 문자열을 포맷하는 데 사용할 수 있다. 일반적인 앱과 스키마를 생성할 수 있는 레일스 및 Express.js 앱 연결을 위한 자습서가 제공된다. 또한 버셀(Vercel) 및 헤로쿠(Heroku) 배포와 레일스 및 프리스마를 사용한 자동 마이그레이션을 위한 자습서도 있다.
 

관계형, 분산되지 않음

플래닛스케일은 확장을 통해 필요한 만큼 얼마든지 많은 데이터를 저장할 수 있는 마이SQL 호환 클라우드 데이터베이스 역할을 충실히 한다. 다만 현재 시점에서는 (이름과 맞지 않게) 글로벌 분산 데이터베이스는 아니다. 플래닛스케일을 배포할 수 있는 지역은 전 세계적으로 3곳이지만 그중에서 하나만 선택해야 한다.

플래닛스케일의 확장성은 큰 장점이다. 또한 프로덕션 워크로드를 차단하지 않으면서 스키마 변경을 온라인으로 배포할 수 있는 기능도 유용하다. 외래 키 제약 조건을 지원하지 않는 부분이 불편할 수 있지만 대부분의 애플리케이션에서는 큰 문제가 아니다. 플래닛스케일은 새로운, 빠르게 변화하는 애플리케이션을 다루는 개발자에게 가장 매력적이다.

플래닛스케일은 아직 자동 샤딩을 지원하지 않는다. 이 기능은 2022년에 예정돼 있다. 지금은 단일 마이SQL 인스턴스의 범위를 초과할 만큼 성장하는 경우 플래닛스케일의 기술 지원팀이 기반 비테스 기능을 사용해 샤딩 작업을 지원한다.

애플리케이션에 분산 관계형 데이터베이스가 필요한 경우 몇 가지 대안이 있지만 브랜치와 논블로킹 스키마 변경 기능을 제공하는 것은 플래닛스케일이 유일하다. 구글 클라우드 스패너, 코크로치DB, 아마존 오로라 정도가 가장 유력한 대안일 것이다. 다만 데이터베이스가 최종적으로 30TB보다 커질 것으로 예상한다면 각 솔루션의 현재 크기 제한을 잘 고려해야 한다.

예를 들어 오로라는 최근 최대 스토리지 크기를 64TB에서 128TB로 늘렸고 클라우드 스패너는 현재 노드당 2TB, 최대 15개 노드로 제한된다. 코크로치DB는 노드당 최대 2.5TB를 권장하며 노드의 수에는 명확한 제한이 없다. 고객 중에는 바이두(Baidu)와 같이 수백 개 노드를 사용하는 경우도 있다.

플래닛스케일의 비용은 개발자 에디션의 경우 무료다. 무료 데이터베이스 3개, 데이터베이스당 스토리지 용량 10GB 제한이 있으며 데이터베이스당 월별 행 읽기 횟수 1억 회, 데이터베이스당 월별 행 쓰기 수 1,000만 회다. 스케일러 에디션은 스토리지 1GB당 월 1.25달러, 행 읽기 1억 회당 월 15달러, 행 쓰기 1,000만 회당 월 15달러다. 플래닛스케일의 플랫폼은 플래닛스케일 클라우드를 사용한다. editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.