데이터 저장소 색인 구성

App Engine에서 액세스한 Cloud Datastore는 애플리케이션의 모든 쿼리에 대해 색인을 사용합니다. 항목이 변경될 때마다 색인이 업데이트되면 앱에서 쿼리를 만들 때 결과가 신속하게 반환됩니다. 그러려면 Cloud Datastore가 애플리케이션에서 어떤 쿼리를 생성할지 사전에 알고 있어야 합니다. 앱에 필요한 색인은 구성 파일에서 지정됩니다. 앱을 테스트할 때 개발 서버는 Cloud Datastore 색인 구성을 자동으로 생성할 수 있습니다.

Cloud Datastore 색인 만들기

앱의 war/ 디렉토리 안에 있는 WEB-INF/datastore-indexes.xml에서 Cloud Datastore 색인의 구성을 지정합니다.

데이터 저장소 색인 페이지에 설명된 대로 색인은 특정 종류의 항목에 대한 특정 속성 집합의 값으로 이루어진 테이블입니다. 속성 값의 각 열은 오름차순이나 내림차순으로 정렬됩니다. 색인의 구성은 항목의 종류와 속성의 이름 그리고 이들의 정렬 순서를 지정합니다.

다음은 두 색인을 지정하는 datastore-indexes.xml의 예입니다.

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
  autoGenerate="true">
    <datastore-index kind="Employee" ancestor="false">
        <property name="lastName" direction="asc" />
        <property name="hireDate" direction="desc" />
    </datastore-index>
    <datastore-index kind="Project" ancestor="false">
        <property name="dueDate" direction="asc" />
        <property name="cost" direction="desc" />
    </datastore-index>
</datastore-indexes>

개발 서버를 사용하여 색인 만들기

애플리케이션의 쿼리에 필요한 색인을 수동으로 결정하는 것은 번거로우며 오류가 발생하기 쉽습니다. 다행히 개발 서버는 색인 구성을 자동으로 결정할 수 있습니다. 자동 색인 구성을 사용하려면 autoGenerate="true" 속성을 WEB-INF/datastore-indexes.xml 파일의 <datastore-indexes> 요소에 추가하세요. 자동 색인 구성은 앱에 datastore-indexes.xml 파일이 없는 경우에도 사용됩니다.

자동 색인 구성이 사용 설정된 상태일 때 개발 서버는 앱의 war/ 디렉토리에 WEB-INF/appengine-generated/datastore-indexes-auto.xml이라는 파일을 유지합니다. 개발 서버에서 실행 중인 앱이 datastore-indexes.xml 또는 datastore-indexes-auto.xml에서 해당 색인이 없는 Cloud Datastore 쿼리를 시도할 경우, 서버는 해당 구성을 datastore-indexes-auto.xml에 추가합니다.

애플리케이션을 업로드할 때 자동 색인 구성이 사용 설정된 경우 AppCfg는 datastore-indexes.xmldatastore-indexes-auto.xml을 모두 사용하여 프로덕션 단계의 앱에 대해 생성될 색인을 결정합니다.

datastore-indexes.xmlautoGenerate="false"가 있는 경우 개발 서버 및 AppCfgdatastore-indexes-auto.xml의 콘텐츠를 무시합니다. 로컬에서 실행되는 앱이 datastore-indexes.xml에 색인이 지정되지 않은 쿼리를 수행할 경우, 개발 서버는 프로덕션 Cloud Datastore와 마찬가지로 예외를 일으킵니다.

가끔 색인 구성을 datastore-indexes-auto.xml에서 datastore-indexes.xml로 이동한 후에 자동 색인 구성을 중지하고 개발 서버에서 앱을 테스트하는 것도 좋은 방법입니다. 그러면 2개의 파일을 관리할 필요 없이 색인을 쉽게 유지할 수 있으며 누락된 색인 구성으로 인해 발생한 오류를 테스트에서 재현할 수 있습니다.

수동으로 색인 만들기

색인을 datastore-indexes.xml 파일에 수동으로 추가하거나, 개발 서버가 datastore-indexes-auto.xml 파일에서 자동으로 만든 색인을 datastore-indexes.xml 파일로 이동할 수 있습니다.

구문 정보는 datastore-indexes.xml 참조 문서를 확인하세요.

색인 업데이트

update 작업을 사용하여 애플리케이션을 업로드할 때 업데이트는 앱의 색인 구성(datastore-indexes.xmlgenerated/datastore-indexes-auto.xml 파일)을 포함합니다. 색인 구성이 아직 존재하지 않는 색인을 정의하는 경우 App Engine은 새로운 색인을 만듭니다. 새로운 색인에서 언급되어야 하는 데이터 중 어느 정도가 Cloud Datastore에 이미 있는지에 따라 색인을 만드는 프로세스에 시간이 오래 걸릴 수 있습니다. 앱에서 수행하는 쿼리에 아직 빌드를 마치지 않은 색인이 필요한 경우 쿼리는 예외를 제기합니다.

이를 방지하려면 새로운 색인을 필요로 하는 앱의 새 버전은 색인의 빌드가 완료되기 전까지는 서비스 중인 애플리케이션 버전이 아니어야 합니다. 이를 수행하는 한 가지 방법은 구성에서 색인을 추가하거나 변경할 때마다 appengine-web.xml에서 앱에 새 버전 번호를 부여하는 것입니다. 그러면 앱이 새 버전으로 업로드되고 자동으로 기본 버전이 되지 않습니다. 색인의 빌드가 완료되면 GCP 콘솔에서 기본 버전을 변경할 수 있습니다.

새 앱이 서비스되기 전에 새로운 색인이 빌드되도록 하는 또 다른 방법은 앱을 업로드하기 전에 색인 구성을 따로 업로드하는 것입니다. 앱의 색인 구성만 업로드하려면 update_indexes 작업을 사용하세요.

./appengine-java-sdk/bin/appcfg.sh update_indexes myapp/war

datastore-indexes.xml 파일은 기본 모듈의 WEB-INF/ 디렉토리에 있어야 합니다.

GCP 콘솔에서 앱의 색인 상태를 확인할 수 있습니다.

미사용 색인 삭제

색인 구성에서 색인을 변경하거나 삭제할 때는 원래 색인이 App Engine에서 자동으로 삭제되지 않습니다. 그렇기 때문에 이전 버전의 앱을 실행 중인 상태로 유지하면서 새 색인을 빌드하거나, 새 버전에 문제가 발견된 경우 즉시 이전 버전으로 되돌릴 수 있습니다.

이전 색인이 더 이상 필요하지 않으면 vacuum_indexes 작업을 사용하여 App Engine에서 삭제할 수 있습니다.

./appengine-java-sdk/bin/appcfg.sh vacuum_indexes myapp/war

이 명령어는 datastore-indexes.xmlWEB-INF/appengine-generated/datastore-indexes-auto.xml의 로컬 버전에 언급되지 않은 앱의 모든 색인을 삭제합니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

App Engine standard environment for Java