이 페이지에서는 Spanner용 PostgreSQL 인터페이스와 해당 구성요소를 설명합니다. 또한 PostgreSQL과 GoogleSQL 중에서 선택하는 방법에 대한 안내와 PostgreSQL 인터페이스 채택 및 사용에 대한 권장사항을 제공합니다.
PostgreSQL 인터페이스를 사용하면 완전 관리형, 무제한 확장, strong consistency, 고성능, 전역 가용성 최대 99.999% 등 Spanner 기능을 오픈소스 PostgreSQL 생태계에서 액세스할 수 있습니다. 여기에는 PostgreSQL SQL 언어의 핵심 하위 집합, psql 명령줄 도구 지원, 모국어 클라이언트, 기존 Google 도구(예: Dataflow)의 통합이 포함됩니다. 실제 PostgreSQL 데이터베이스 인스턴스를 관리하는 다른 서비스와 달리 Spanner는 PostgreSQL 호환 문법을 사용하여 기존 수평 확장 기능을 노출합니다. 이렇게 하면 개발자에게는 익숙함, 애플리케이션에게는 이동성이 제공되지만 완벽한 PostgreSQL 호환성은 제공되지 않습니다. 저장된 프로시져, 트리거, 확장, 구성 가능한 격리 수준과 같은 PostgreSQL 기능을 활용하는 기존 애플리케이션을 사용하려면 Spanner에서 재실행되도록 재작업해야 합니다. 그러나 Spanner에서 지원하는 SQL 문법은 의미론적으로 동일한 PostgreSQL입니다. 즉, PostgreSQL 인터페이스에 대해 작성된 스키마와 쿼리를 간편하게 다른 PostgreSQL 환경으로 포팅할 수 있습니다.
PostgreSQL 인터페이스에서는 쿼리, 함수, 연산자를 포함한 일반적인 PostgreSQL SQL 문법을 지원합니다. 또한 여러 가지 데이터 유형, DDL 문법, 정보 스키마 뷰를 지원합니다. 애플리케이션은 기본 Spanner 클라이언트 또는 개방형 PostgreSQL 유선 프로토콜을 구현하는 경량 프록시인 PGAdapter를 사용하여 PostgreSQL 인터페이스 지원 Spanner 데이터베이스에 연결할 수 있습니다. 초기 유선 프로토콜 지원은 psql 명령줄 도구와 함께 사용할 수 있도록 타겟팅됩니다.
관리자는 Spanner의 기존 콘솔, API, 도구(예: gcloud CLI)를 사용하여 PostgreSQL 인터페이스 지원 데이터베이스를 프로비저닝, 관리, 모니터링합니다. PostgreSQL 인터페이스는 생성 시 데이터베이스별로 구성됩니다. Spanner 인스턴스에 GoogleSQL 및 PostgreSQL 인터페이스 언어 데이터베이스 모두가 포함될 수 있습니다. 이들 모두 동일한 기본 분산형 데이터베이스 엔진을 공유하므로 두 데이터베이스 언어 모두 확장성, 일관성, 성능, 보안 특성이 동일합니다.
PostgreSQL 인터페이스 구성요소
PostgreSQL 인터페이스는 PostgreSQL SQL 언어 지원과 PostgreSQL 인터페이스 지원 데이터베이스에 연결하는 클라이언트 지원 등 두 가지 기본 기능으로 구성됩니다.
PostgreSQL SQL 언어 지원
PostgreSQL 인터페이스는 인터리브 처리된 테이블 및 쿼리 힌팅과 같은 Spanner 기능을 지원하는 확장 프로그램과 함께 DQL, DML, DDL 등 PostgreSQL SQL 언어의 하위 집합을 제공합니다. Spanner의 PostgreSQL 언어 지원에 대한 자세한 내용은 Spanner의 PostgreSQL 언어를 참조하세요.
PostgreSQL 클라이언트 지원
개발자는 Java, Go, Python, Node.js, Ruby, PHP, C#, C++ 환경용 오픈소스 Spanner 클라이언트를 사용하여 자신의 애플리케이션을 PostgreSQL 인터페이스 데이터베이스에 연결할 수 있습니다. 오픈소스 Spanner JDBC 드라이버와 Go 데이터베이스/sql 패키지용 드라이버도 사용할 수 있습니다.
PostgreSQL 인터페이스는 psql 명령줄 도구도 지원합니다. psql은 여러 PostgreSQL 환경에서 일반적으로 사용되는 쿼리 실행, 메타데이터 탐색, 데이터 로드용 대화형 환경입니다. psql 지원은 PostgreSQL 유선 프로토콜을 Spanner의 기본 제공 gRPC 인터페이스로 변환하는 경량 프록시인 PGAdapter에서 사용 설정되므로 연결과 IAM 인증이 자동으로 관리됩니다. 자세한 내용은 PGAdapter 개요를 참조하세요.
PostgreSQL JDBC 드라이버 및 PostgreSQL pgx 드라이버도 PGAdapter에서 지원됩니다. 지원되는 PostgreSQL 드라이버의 전체 목록은 PostgreSQL 드라이버 및 ORM을 참고하세요.
GoogleSQL과 PostgreSQL 중에서 선택
Spanner 데이터베이스를 만들 때 GoogleSQL과 PostgreSQL 언어 중에서 선택할 수 있습니다. 언어에 따라 애플리케이션에서 사용하는 쿼리와 데이터 유형의 문법 및 시맨틱스, 데이터베이스에 연결되는 방식이 결정됩니다.
특정 애플리케이션이나 프로젝트에 GoogleSQL 또는 PostgreSQL을 사용할지를 선택하는 결정 요소는 Spanner 기능의 SQL 언어 지원이 아닌 비즈니스 요구사항과 목표여야 합니다. SQL 언어는 Spanner 기능과 동일한 특성을 공유하는 피어입니다.
- 둘 다 동일한 분산 스토리지 및 쿼리 처리 기반 위에 구현됩니다. 따라서 성능, 확장성, 일관성, 가용성 특성을 공유합니다.
- 둘 다 해당 표준 언어 구성(하나는 ANSI 2001, 다른 하나는 오픈소스 PostgreSQL의 사실상 표준)의 하위 집합을 통해 Spanner 기능을 표현하며 인터리브 처리된 테이블 및 쿼리 힌팅과 같은 Spanner 기능을 지원하도록 확장 프로그램이 추가되었습니다.
- 둘 다 Spanner 관리 인터페이스인 Google Cloud 콘솔, gcloud CLI, DevOps 자동화를 위한 Spanner 클라이언트 라이브러리를 사용합니다.
- 둘 다 Spanner 애플리케이션 개발 인터페이스인 Spanner 클라이언트 라이브러리, REST, RPC API를 사용합니다.
- 둘 다 Spanner
INFORMATION_SCHEMA
및SPANNER_SYS
시스템 스키마를 사용하여 데이터베이스 메타데이터와 통계를 쿼리합니다.
현재 PostgreSQL 인터페이스는 GoogleSQL과 PostgreSQL 언어 간에 완전하게 일치하지 않습니다. 그러나 장기적으로는 특정 애플리케이션이나 프로젝트에 PostgreSQL 또는 GoogleSQL을 사용할지 여부를 다음과 같이 결정해야 합니다.
개발팀이 오픈소스 PostgreSQL 생태계에 익숙한 경우 또는 조직에서 PostgreSQL 사용을 표준화했거나 표준화하는 경우 PostgreSQL을 선택합니다.
GoogleSQL 선택:
- 개발팀이 이전 Spanner 환경에서 또는 GoogleSQL도 지원하는
BigQuery
와 같은 다른 Google Cloud 데이터베이스로 작업하여 GoogleSQL에 익숙한 경우 - 조직에서 GoogleSQL 또는 기본 ANSI 2011 표준을 사용하여 표준화하는 경우
- 개발팀이 이전 Spanner 환경에서 또는 GoogleSQL도 지원하는
자세한 내용은 GoogleSQL과 PostgreSQL 간의 언어 패리티를 참고하세요.
PostgreSQL 인터페이스 사용 권장사항
PostgreSQL 인터페이스를 효과적으로 사용하려면 다음을 수행하는 것이 좋습니다.
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 Spanner 인스턴스에 PostgreSQL 데이터베이스를 만듭니다. (동일한 인스턴스에서 PostgreSQL 데이터베이스와 GoogleSQL 데이터베이스를 모두 만들 수 있습니다.)
Spanner 클라이언트 라이브러리를 사용하여 데이터베이스에 액세스하는 애플리케이션을 연결합니다.
PGAdapter 프록시를 통해 psql 명령줄 도구를 사용하여 데이터베이스를 양방향으로 사용합니다. 또는 Google Cloud 콘솔 Spanner 스튜디오 페이지를 사용할 수 있습니다.
다음 단계
빠른 시작을 따라 PostgreSQL 데이터베이스를 만들고 상호작용하세요.
Spanner의 PostgreSQL 언어 지원에 대해 자세히 알아보세요.
PGAdapter에 대해 자세히 알아보세요.
PGAdapter GitHub 저장소에 대해 자세히 알아보기
PostgreSQL 인터페이스에서 알려진 문제를 검토하세요.