Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Cloud Firestore에서 색인 관리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Cloud Firestore는 모든 쿼리에 색인을 요구하여 쿼리 성능을 보장합니다. 가장 기본적인 쿼리에 필요한 인덱스가 자동으로 생성 됩니다. 앱을 사용하고 테스트할 때 Cloud Firestore는 앱에 필요한 추가 색인을 만드는 데 도움이 되는 오류 메시지를 생성합니다. 이 페이지에서는 단일 필드복합 색인을 관리하는 방법을 설명합니다.

오류 메시지를 통해 누락된 인덱스 생성

기존 인덱스에 매핑되지 않는 범위 절을 사용하여 복합 쿼리를 시도하면 오류가 발생합니다. 오류 메시지에는 Firebase 콘솔에서 누락된 색인을 생성하기 위한 직접 링크가 포함되어 있습니다.

생성된 링크를 따라 Firebase 콘솔로 이동하여 자동으로 채워진 정보를 검토하고 만들기 를 클릭합니다.

Firebase 콘솔 사용

Firebase 콘솔에서 새 색인을 수동으로 만들려면 다음 안내를 따르세요.

Firebase 콘솔의 Firestore 색인 생성 인터페이스 이미지

  1. Firebase 콘솔Cloud Firestore 섹션으로 이동합니다.
  2. 인덱스 탭으로 이동하여 인덱스 추가 를 클릭합니다.
  3. 컬렉션 이름을 입력하고 색인을 정렬할 필드를 설정합니다.
  4. 만들기 를 클릭합니다.

쿼리 크기에 따라 색인을 작성하는 데 몇 분 정도 걸릴 수 있습니다. 색인을 만든 후에는 복합 색인 섹션에서 색인과 해당 상태를 볼 수 있습니다. 아직 빌드 중인 경우 Firebase 콘솔에 빌드 상태 표시줄이 포함됩니다.

색인 제거

인덱스를 삭제하려면:

  1. Firebase 콘솔Cloud Firestore 섹션으로 이동합니다.
  2. 인덱스 탭을 클릭합니다.
  3. 삭제하려는 인덱스 위로 마우스를 이동하고 상황에 맞는 메뉴에서 삭제 를 선택합니다.
  4. 경고에서 삭제 를 클릭하여 삭제할 것인지 확인합니다.

Firebase CLI 사용

Firebase CLI 를 사용하여 색인을 배포할 수도 있습니다. 시작하려면 프로젝트 디렉토리에서 firebase init firestore 를 실행하세요. 설정 중에 Firebase CLI는 올바른 형식의 기본 인덱스가 포함된 JSON 파일을 생성합니다. 파일을 수정하여 더 많은 색인을 추가하고 firebase deploy 명령어로 배포합니다. 색인만 배포하려면 --only firestore:indexes 플래그를 추가하세요. Firebase 콘솔을 사용하여 색인을 수정하는 경우 로컬 색인 파일도 업데이트해야 합니다. JSON 인덱스 정의 참조 를 참조하십시오.

인덱스 빌드 시간

색인을 작성하려면 Cloud Firestore에서 색인을 설정한 다음 색인을 기존 데이터로 다시 채워야 합니다. 인덱스 빌드 시간은 설정 시간과 백필 시간의 합계입니다.

  • 색인을 설정하는 데 몇 분 정도 걸립니다. 빈 데이터베이스의 경우에도 인덱스의 최소 빌드 시간은 몇 분입니다.

  • 백필 시간은 새 색인에 속한 기존 데이터의 양에 따라 다릅니다. 인덱스 정의와 일치하는 필드 값이 많을수록 인덱스를 백필하는 데 더 오래 걸립니다.

인덱스 빌드는 장기 실행 작업 입니다.

색인 빌드를 시작하면 Cloud Firestore에서 작업에 고유한 이름을 할당합니다. 작업 이름은 다음과 같이 projects/[PROJECT_ID]/databases/(default)/operations/ 접두사가 붙습니다.

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

그러나 describe 명령에 대한 작업 이름을 지정할 때 접두사를 생략할 수 있습니다.

모든 장기 실행 작업 나열

장기 실행 작업을 나열하려면 gcloud firestore operations list 명령어를 사용하세요. 이 명령은 진행 중인 작업과 최근에 완료된 작업을 나열합니다. 작업은 완료 후 며칠 동안 나열됩니다.

gcloud firestore operations list

운영현황 확인

모든 장기 실행 작업을 나열하는 대신 단일 작업의 세부 정보를 나열할 수 있습니다.

gcloud firestore operations describe operation-name

완료 시간 추정

작업이 실행되면 전체 작업 상태에 대한 state 필드 의 값을 확인하십시오.

장기 실행 작업의 상태에 대한 요청은 workEstimatedworkCompleted 지표도 반환합니다. 이러한 메트릭은 문서 수에 대해 반환됩니다. workEstimated 는 작업이 처리할 예상 총 문서 수를 보여줍니다. workCompleted 는 지금까지 처리된 문서의 수를 보여줍니다. 작업이 완료된 후 workCompleted 는 실제로 처리된 총 문서 수를 반영하며 이는 workEstimated 값과 다를 수 있습니다.

작업을 workCompleted 별로 workEstimated 하여 대략적인 진행 예상으로 추정합니다. 지연된 통계 수집에 의존하기 때문에 예측이 부정확할 수 있습니다.

예를 들어 인덱스 빌드의 진행 상태는 다음과 같습니다.

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

작업이 완료되면 작업 설명에 "done": true 가 포함됩니다. 작업 결과는 state 필드 의 값을 참조하십시오. done 필드가 응답에 설정되지 않은 경우 해당 값은 false 입니다. 진행 중인 작업에 대한 done 값의 존재에 의존하지 마십시오.

색인 작성 오류

복합 인덱스 및 단일 필드 인덱스 예외를 관리할 때 인덱스 빌드 오류가 발생할 수 있습니다. Cloud Firestore에서 인덱싱 중인 데이터에 문제가 발생하면 인덱싱 작업이 실패할 수 있습니다. 가장 일반적으로 이는 색인 제한 에 도달했음을 의미합니다. 예를 들어 작업이 문서당 최대 인덱스 항목 수에 도달했을 수 있습니다.

인덱스 생성에 실패하면 콘솔에 오류 메시지가 표시됩니다. 인덱스 제한 에 도달하지 않았는지 확인한 후 인덱스 작업을 다시 시도하십시오.