에뮬레이터에 PGAdapter 연결

이 페이지에서는 PGAdapter를 Spanner 에뮬레이터에 연결하는 방법을 보여줍니다. 에뮬레이터는 로컬에서 실행되며 이를 사용하여 Google Cloud 프로젝트나 결제 계정을 만들지 않고도 애플리케이션을 개발하고 테스트할 수 있습니다. 에뮬레이터는 데이터를 메모리에만 저장하므로 데이터, 스키마, 구성을 포함한 모든 상태가 다시 시작 시 손실됩니다. 에뮬레이터는 Spanner 프로덕션 서비스와 동일한 API를 제공하며, 프로덕션 배포가 아닌 로컬 개발 및 테스트를 대상으로 합니다.

다음 3가지 방법으로 PGAdapter를 에뮬레이터에 연결할 수 있습니다.

  • PGAdapter와 에뮬레이터가 모두 포함된 사전 빌드된 결합 Docker 컨테이너를 실행합니다.
  • 로컬 머신에서 에뮬레이터와 PGAdapter 모두 실행합니다.
  • Docker 네트워크에서 에뮬레이터와 PGAdapter 모두 실행합니다.

결합된 Docker 컨테이너

PGAdapter와 에뮬레이터가 모두 포함된 사전 빌드된 Docker 이미지를 실행합니다. Docker 컨테이너의 PGAdapter 인스턴스는 컨테이너의 에뮬레이터에 연결되도록 자동으로 구성됩니다.

다음 명령어를 사용하여 Docker 컨테이너를 시작합니다.

docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
docker run -d \
  -p 5432:5432 \
  -p 9010:9010 \
  -p 9020:9020 \
  gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator

컨테이너를 시작할 때 프로젝트, 인스턴스 또는 데이터베이스 이름을 지정할 필요가 없습니다. 기본적으로 프로젝트 이름 emulator-project 및 인스턴스 이름 test-instance가 사용됩니다. 연결되는 모든 데이터베이스는 PGAdapter에서 자동으로 생성됩니다.

다음 명령어를 사용하여 PGAdapter에 연결하고 psql로 문을 실행할 수 있습니다.

psql -h localhost -p 5432 -d test-database

데이터베이스 test-database가 자동으로 생성됩니다. 다음 문을 실행하여 PostgreSQL 언어 데이터베이스에 연결되어 있는지 확인합니다.

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

gcloud CLI 등을 사용하여 Docker 컨테이너 내에서 에뮬레이터에 직접 연결할 수도 있습니다.

gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
  --instance=test-instance \
  --sql="select * from my_table"

로컬 머신에서 에뮬레이터 및 PGAdapter 실행

로컬 머신에서 에뮬레이터와 PGAdapter 모두 실행하고 다음 명령어를 사용하여 PGAdapter를 에뮬레이터에 연결할 수 있습니다.

먼저 에뮬레이터를 시작합니다.

gcloud emulators spanner start

그런 다음 PGAdapter를 시작하고 에뮬레이터에 연결합니다. 에뮬레이터에 액세스할 수 있으려면 PGAdapter를 로컬 머신에서 Java 애플리케이션으로 시작해야 합니다. Docker 컨테이너에서 PGAdapter를 시작하면 로컬 호스트에서 실행 중인 에뮬레이터에 액세스할 수 없습니다.

wget https://storage.googleapis.com/pgadapter-jar-releases/pgadapter.tar.gz \
  && tar -xzvf pgadapter.tar.gz
java -jar pgadapter.jar -p emulator-project -i test-instance \
  -c "" \
  -r autoConfigEmulator=true

에뮬레이터에 연결하는 데 사용되는 PGAdapter의 추가 명령줄 인수는 다음과 같습니다.

  • -c "": PGAdapter에 사용자 인증 정보를 사용하지 말라고 지시합니다.
  • -r autoConfigEmulator=true: PGAdapter에 기본 에뮬레이터 호스트이자 포트인 localhost:9010에 연결하라고 지시합니다. 또한 PGAdapter에 사용자가 연결하는 데이터베이스를 자동으로 만들라고 지시합니다. 즉, 연결하기 전에 데이터베이스를 만들 필요가 없습니다.

다음 명령어를 사용하여 PGAdapter에 연결하고 psql로 문을 실행할 수 있습니다.

psql -h localhost -p 5432 -d test-database

데이터베이스 test-database가 자동으로 생성됩니다. 다음 문을 실행하여 PostgreSQL 언어 데이터베이스에 연결되어 있는지 확인합니다.

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

Docker 네트워크에서 에뮬레이터 및 PGAdapter 실행

Docker 네트워크에서 에뮬레이터와 PGAdapter 모두 실행하고 다음 명령어를 사용하여 PGAdapter를 에뮬레이터에 연결할 수 있습니다.

cat <<EOT > docker-compose.yml
version: "3.9"
services:
  emulator:
    image: "gcr.io/cloud-spanner-emulator/emulator"
    pull_policy: always
    container_name: spanner-emulator
    ports:
      - "9010:9010"
      - "9020:9020"
  pgadapter:
    depends_on:
      emulator:
        condition: service_started
    image: "gcr.io/cloud-spanner-pg-adapter/pgadapter"
    pull_policy: always
    container_name: pgadapter-connected-to-emulator
    command:
      - "-p emulator-project"
      - "-i test-instance"
      - "-r autoConfigEmulator=true"
      - "-e emulator:9010"
      - "-c \"\""
      - "-x"
    ports:
      - "5432:5432"
EOT
docker compose up -d

PGAdapter와 에뮬레이터 모두 같은 Docker 네트워크에서 시작되며 PGAdapter는 에뮬레이터에 연결되도록 구성됩니다. 에뮬레이터에 연결하는 데 사용되는 PGAdapter의 추가 명령줄 인수는 다음과 같습니다.

  • -c "": PGAdapter에 사용자 인증 정보를 사용하지 말라고 지시합니다.
  • -r autoConfigEmulator=true: PGAdapter에 사용자가 연결하는 데이터베이스를 자동으로 만들라고 지시합니다. 즉, 연결하기 전에 데이터베이스를 만들 필요가 없습니다.
  • -e emulator:9010: -e는 PGAdapter에서 연결해야 하는 엔드포인트를 지정합니다. emulator:9010은 동일한 Docker 네트워크에 있는 에뮬레이터의 이름 및 포트 번호입니다.
  • -x: 로컬 머신에서 PGAdapter에 연결할 수 있습니다.

다음 명령어를 사용하여 PGAdapter에 연결하고 psql로 문을 실행할 수 있습니다.

psql -h localhost -p 5432 -d test-database

데이터베이스 test-database가 자동으로 생성됩니다. 다음 문을 실행하여 PostgreSQL 언어 데이터베이스에 연결되어 있는지 확인합니다.

create table my_table (
  id bigint not null primary key,
  value varchar
);
insert into my_table (id, value) values (1, 'One');
select * from my_table;

gcloud CLI 등을 사용하여 Docker 네트워크에서 에뮬레이터에 직접 연결할 수도 있습니다.

gcloud config configurations create emulator
gcloud config set auth/disable_credentials true
gcloud config set project emulator-project
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
gcloud spanner instances list
gcloud spanner databases execute-sql test-database \
  --instance=test-instance \
  --sql="select * from my_table"