데이터 저장 및 검색

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.

리전 ID에 대해 자세히 알아보세요.

Datastore 모드의 Firestore(Datastore)를 통해 데이터를 연결하고 처리하도록 웹 서비스를 업데이트합니다. Datastore 클라이언트 라이브러리를 사용하여 자동 확장, 고성능, 간편한 애플리케이션 개발을 위해 설계된 비관계형(NoSQL) 데이터베이스인 Datastore에 웹 서비스를 연결합니다.

이 단계에서는 페이지 요청 데이터를 Datastore에 저장한 후 최근의 페이지 요청 10개의 목록을 표시하도록 웹 서비스를 업데이트합니다. 여기서는 Firebase 인증을 추가하고 인증된 사용자를 위해 데이터 스토리지를 맞춤설정하기 전에 웹 서비스용 데이터 스토리지를 작동시키는 것을 목표로 합니다.

시작하기 전에

이 가이드의 이전 단계를 모두 완료했다면 이 섹션을 건너뜁니다. 그렇지 않으면 다음 중 하나를 완료합니다.

  • Python 3 앱 빌드부터 시작하여 여기까지의 모든 단계를 완료합니다.

  • Google Cloud 프로젝트가 이미 있으면 웹 서비스 복사본을 다운로드하여 계속 진행할 수 있습니다.

    1. Git을 사용하여 샘플 애플리케이션 저장소를 다운로드합니다.

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples
      

      또는 ZIP 파일로 샘플을 다운로드하고 압축을 풀 수 있습니다.

    2. 이전 단계의 파일 사본이 있는 디렉터리로 이동합니다.

      cd python-docs-samples/appengine/standard_python3/building-an-app/building-an-app-1
      

Datastore 항목 저장 및 검색

Datastore 항목으로 사이트 요청 시간을 저장 및 검색하려면 다음을 완료합니다.

  1. 다음 코드를 main.py 파일에 추가하세요.

    from google.cloud import datastore
    
    datastore_client = datastore.Client()
    
    def store_time(dt):
        entity = datastore.Entity(key=datastore_client.key("visit"))
        entity.update({"timestamp": dt})
    
        datastore_client.put(entity)
    
    def fetch_times(limit):
        query = datastore_client.query(kind="visit")
        query.order = ["-timestamp"]
    
        times = query.fetch(limit=limit)
    
        return times
    
    

    위의 store_time 메서드는 Datastore 클라이언트 라이브러리를 사용하여 Datastore에 새 항목을 만듭니다. Datastore 항목은 속성으로 구성되는 데이터 객체입니다. 이 경우 항목 키는 커스텀 종류visit입니다. 항목에는 페이지 요청 시간이 포함된 timestamp라는 속성도 하나 있습니다.

    fetch_times 메서드는 visit 키를 사용하여 가장 최근의 visit 항목 10개를 데이터베이스에 쿼리한 후 이러한 항목을 내림차순으로 목록에 저장합니다.

  2. root 메서드를 업데이트하여 새 메서드를 호출합니다.

    @app.route("/")
    def root():
        # Store the current access time in Datastore.
        store_time(datetime.datetime.now(tz=datetime.timezone.utc))
    
        # Fetch the most recent 10 access times from Datastore.
        times = fetch_times(10)
    
        return render_template("index.html", times=times)
    
    
  3. templates/index.html 파일을 업데이트하여 각 항목의 timestamp를 출력합니다.

    <h2>Last 10 visits</h2>
    {% for time in times %}
      <p>{{ time['timestamp'] }}</p>
    {% endfor %}
  4. requirements.txt 파일에 필요한 모든 종속 항목이 있는지 확인합니다.

    Flask==3.0.0
    google-cloud-datastore==2.15.1
    

Datastore 항목, 속성, 키에 대한 자세한 내용은 항목, 속성, 키를 참조하세요. Datastore 클라이언트 라이브러리 사용 방법에 대한 자세한 내용은 Datastore 클라이언트 라이브러리를 참조하세요.

웹 서비스 테스트

가상 환경에서 로컬로 실행하여 웹 서비스를 테스트합니다.

  1. 프로젝트의 기본 디렉터리에서 다음 명령어를 실행하여 새 종속 항목을 설치하고 웹 서비스를 실행합니다. 로컬 테스트용으로 가상 환경을 설정하지 않은 경우 웹 서비스 테스트를 참조하세요.

    pip install -r requirements.txt
    python main.py
    
  2. 웹브라우저에 다음 주소를 입력하여 웹 서비스를 확인합니다.

    http://localhost:8080
    

Google Cloud Console에서 웹 서비스가 만든 항목을 볼 수 있습니다.

Datastore 항목 페이지로 이동

웹 서비스 배포

Datastore가 로컬에서 작동하므로 이제 웹 서비스를 App Engine에 다시 배포할 수 있습니다.

app.yaml 파일이 있는 프로젝트의 루트 디렉터리에서 다음 명령어를 실행합니다.

gcloud app deploy

모든 트래픽이 배포된 새 버전으로 자동 라우팅됩니다.

버전 관리에 대한 자세한 내용은 서비스 및 버전 관리를 참조하세요.

서비스 보기

브라우저를 빠르게 실행하고 https://PROJECT_ID.REGION_ID.r.appspot.com에서 웹 서비스에 액세스하려면 다음 명령어를 실행합니다.

gcloud app browse

다음 단계

Datastore가 웹 서비스와 함께 작동하므로 이제 웹 서비스에 Firebase를 추가하는 방법을 알아볼 수 있습니다.