Firestore 사용

Firestore는 자동 확장, 고성능, 간편한 애플리케이션 개발을 위해 설계된 NoSQL 문서 데이터베이스입니다. Datastore의 후속 제품인 Firestore는 모든 새 애플리케이션에 권장되는 데이터베이스입니다. Firestore는 Datastore를 기반으로 빌드된 기존 코드를 지원하기 위해 Datastore 호환 API를 비롯한 여러 인터페이스를 제공합니다.

이 문서에서는 Cloud 클라이언트 라이브러리를 사용하여 Datastore 모드 데이터베이스에서 데이터를 저장하고 검색하는 방법을 설명합니다. app.yaml 파일에 런타임 버전과 운영체제를 지정하여 이 가이드에서 지원되는 Python 버전의 샘플 애플리케이션을 사용할 수 있습니다.

기본 요건 및 설정

  • 환경 및 프로젝트를 설정하여 App Engine에서 앱이 구조화되는 방법을 알아봅니다. 이 문서에 설명된 샘플 애플리케이션을 실행할 때 필요하므로 프로젝트 ID를 기록해 둡니다.

저장소 복제

샘플을 다운로드(복제)합니다.

  git clone https://github.com/GoogleCloudPlatform/python-docs-samples
  cd python-docs-samples/appengine/flexible/datastore

프로젝트 구성 수정 및 종속 항목 설정

requirements.txt 파일에 google-cloud-datastore 라이브러리를 포함합니다. Datastore 모드의 클라이언트 라이브러리입니다.

Flask==3.1.3; python_version >= '3.9'
google-cloud-datastore==2.20.2
gunicorn==23.0.0

애플리케이션 코드

샘플 애플리케이션은 방문자 IP를 로깅, 검색, 표시합니다. 로그 항목은 visit 유형이 지정된 2개 필드로 구성된 클래스이며, put 명령어를 사용하여 Datastore 모드에 저장됩니다. 이후 query() 명령어를 통해 10개의 최근 방문이 내림차순으로 검색됩니다.

@app.route("/")
def index():
    ds = datastore.Client()

    user_ip = request.remote_addr

    # Keep only the first two octets of the IP address.
    if is_ipv6(user_ip):
        user_ip = ":".join(user_ip.split(":")[:2])
    else:
        user_ip = ".".join(user_ip.split(".")[:2])

    entity = datastore.Entity(key=ds.key("visit"))
    entity.update(
        {
            "user_ip": user_ip,
            "timestamp": datetime.datetime.now(tz=datetime.timezone.utc),
        }
    )

    ds.put(entity)
    query = ds.query(kind="visit", order=("-timestamp",))

    results = []
    for x in query.fetch(limit=10):
        try:
            results.append("Time: {timestamp} Addr: {user_ip}".format(**x))
        except KeyError:
            print("Error with result format, skipping entry.")

    output = "Last 10 visits:\n{}".format("\n".join(results))

    return output, 200, {"Content-Type": "text/plain; charset=utf-8"}

index.yaml 파일 사용

샘플 앱은 쿼리를 수행합니다. 보다 정교한 Datastore 모드 쿼리를 위해서는 색인이 한 개 이상 필요하며, 앱과 함께 업로드하는 index.yaml 파일에서 지정해야 합니다. 이 파일은 수동으로 만들거나 로컬에서 앱을 테스트하는 동안 자동으로 생성될 수 있습니다.

로컬 테스트

로컬에서 애플리케이션을 개발하고 테스트해야 하는 경우 Datastore 모드 에뮬레이터를 사용할 수 있습니다.

추가 정보

최적화와 개념을 비롯하여 Datastore 모드에 대한 자세한 내용은 Datastore 모드 문서의 Firestore를 참조하세요.