Cloud Datastore 에뮬레이터로 마이그레이션

Cloud Datastore 에뮬레이터는 프로덕션 Datastore 환경의 로컬 에뮬레이션을 제공합니다. Cloud Datastore 에뮬레이터는 dev_appserver의 기본 Datastore 구현으로 점진적으로 롤아웃되고 있습니다.

Datastore 에뮬레이터로 마이그레이션할 때의 이점

Datastore 에뮬레이터는 DB 및 NDB와 같은 App Engine 표준 환경 클라이언트 라이브러리와 Cloud Datastore 클라이언트 라이브러리 사이에서 공유될 수 있습니다.

또한 Datastore 에뮬레이터를 사용하여 App Engine 표준 환경과 App Engine 가변형 환경에서 실행되는 서비스 사이에서 로컬 데이터를 공유할 수 있습니다.

시작하기 전에

  1. 자바 런타임(JRE) 버전 11 이상을 다운로드하여 설치합니다.

  2. google-cloud-sdk/bin 디렉터리에서 dev_appserver를 실행합니다.

에뮬레이션 환경 선택

Cloud Datastore 에뮬레이터는 일부 dev_appserver 사용자의 기본 에뮬레이터입니다. Cloud Datastore 에뮬레이터를 사용하면 dev_appserver에 다음이 표시됩니다.

... Using Cloud Datastore Emulator.

dev_appserver를 시작할 때 '--support_datastore_emulator' 플래그를 true로 설정하면 dev_appserver가 Cloud Datastore 에뮬레이터를 강제로 사용하도록 할 수 있습니다.

dev_appserver.py --support_datastore_emulator=[true|false] app.yaml

Datastore 에뮬레이터에서 dev_appserver 사용

dev_appserver는 환경 변수 DATASTORE_EMULATOR_HOST에 따라 에뮬레이터 시작 여부를 결정합니다.

  • 이 환경 변수가 있으면 dev_appserver는 DATASTORE_EMULATOR_HOST에서 실행되는 기존 에뮬레이터 프로세스와 통신합니다.

  • 이 환경 변수가 없으면 dev_appserver는 새 에뮬레이터 프로세스를 시작합니다. dev_appserver.py를 시작할 때 --datastore_emulator_port를 설정하면 Datastore 에뮬레이터의 포트를 지정할 수 있습니다.

동작 변경사항

로컬 데이터 형식 변환

현재 로컬 Datastore 에뮬레이터는 sqlite3에 데이터를 저장하고 Cloud Datastore 에뮬레이터는 데이터를 자바 객체로 저장합니다.

기존 sqlite3 데이터로 dev_appserver가 시작되면 해당 데이터는 자바 객체로 변환됩니다. 원래 데이터는 {original-data-filename}.sqlitestub이라는 파일 이름으로 백업됩니다.

로컬 데이터 파일 위치

--datastore_path 플래그로 로컬 데이터 파일을 지정할 수 있습니다.

  • dev_appserver가 에뮬레이터를 시작하면 위치는 변경되지 않습니다.

  • dev_appserver가 기존 Cloud Datastore 에뮬레이터를 사용하는 경우 이 플래그는 에뮬레이터 설정에 따라 무시됩니다.

로컬 index.yaml

  • 빈 index.yaml은 유효하지 않다고 간주됩니다. index.yaml의 구문은 YAML 형식입니다. index.yaml 파일에는 색인이라는 단일 목록 요소가 있습니다.

  • dev_appserver가 에뮬레이터를 시작하면 index.yaml은 애플리케이션 프로젝트 디렉터리에 있습니다.

  • dev_appserver가 기존 Cloud Datastore 에뮬레이터를 사용하면 index.yaml은 에뮬레이터에서 관리됩니다.

기타 로컬 Datastore 서버 기능은 변경되지 않습니다.

문제해결

에뮬레이터 출력 가져오기

기본적으로 dev_appserver는 Datastore 에뮬레이터를 자동 모드로 실행합니다. Datastore 에뮬레이터 출력을 확인하려면 --dev_appserver_log_level=debug를 사용하여 dev_appserver를 실행합니다.

gRPC 가져오기 실패

dev_appserver는 gRPC를 사용하여 Cloud Datastore 에뮬레이터와 통신하지만 gcloud CLI 패키지인 gRPC 패키지 버전은 일부 운영체제와 호환되지 않으므로 가져오기가 실패합니다.

가져오기 실패를 수정하려면 gcloud CLI 219.0.0 이상에서 pip를 사용하여 gRPC를 별도로 설치하면 됩니다.

pip install grpcio