Firestore 네이티브 모드 개요

Firestore 네이티브 모드는 Firestore 핵심 및 Firestore 파이프라인 작업이라는 두 가지 작업 집합으로 구성됩니다.

Firestore 핵심 작업은 표준 문서 만들기, 읽기, 업데이트, 삭제(CRUD) 기능과 함께 실시간 리슨 쿼리 및 오프라인 지속성을 위한 기본 지원을 제공합니다. 이 버전의 뚜렷한 운영 차이점은 색인이 선택사항이며 단일 필드에 대해 자동으로 생성되지 않는다는 것입니다. 이렇게 하면 사전 색인 구성 없이 쿼리를 실행할 수 있지만 색인이 지정되지 않은 쿼리는 기본적으로 전체 컬렉션을 스캔합니다. 이로 인해 데이터 세트가 커질 때 지연 시간과 비용이 증가할 수 있습니다.

Firestore 파이프라인 작업은 Firestore Enterprise 버전의 핵심 기능으로, 고급 쿼리 엔진을 기반으로 빌드되어 가능한 쿼리의 범위를 크게 확장합니다. Firestore 파이프라인 작업은 유연한 쿼리 구문과 색인이 선택사항이며 자동으로 생성되지 않는 고유한 색인 생성 방법을 사용하여 애플리케이션의 고급 데이터 검색 작업을 지원합니다.

Firestore 핵심 작업의 기능

핵심 작업을 사용하면 표준 CRUD 작업과 실시간 리슨 쿼리가 가능합니다. 하지만 Enterprise 버전에서 이러한 작업을 사용하면 Standard 버전과 비교하여 색인 생성 및 결제에 관한 기본 동작이 크게 달라집니다.

기능 및 연속성

핵심 작업은 Standard 버전에서 사용되는 친숙한 메서드 체이닝 구문(예: .where(), .orderBy())을 유지합니다. 이러한 작업은 모바일 및 웹 클라이언트의 실시간 리슨 쿼리 및 오프라인 지속성을 지원합니다. 표준 트랜잭션 워크로드, 간단한 조회, 기존 애플리케이션 코드 마이그레이션에는 이러한 작업을 사용하는 것이 좋습니다.

커스텀 색인 생성

Standard 버전과 달리 Enterprise 버전의 핵심 작업은 단일 필드 색인을 자동으로 만들지 않습니다. 색인은 선택사항이며 쿼리를 실행하는 데 필요하지 않습니다. 특정 색인이 누락되면 쿼리에서 전체 컬렉션 검색을 수행합니다. 색인이 생성되지 않은 쿼리를 사용하면 신속한 프로토타입 제작이 가능하지만 데이터 세트가 커짐에 따라 성능이 저하되고 비용이 많이 들 수 있습니다. 개발자는 쿼리 성능을 최적화하고 읽기 단위 소비를 줄이기 위해 색인을 수동으로 만들어야 합니다.

결제 모델(단위 기반)

읽기 단위는 문서 수당이 아닌 4KB 단위로 청구됩니다. 대규모 컬렉션을 스캔하는 색인이 생성되지 않은 쿼리는 모든 문서에서 스캔된 총 바이트를 기준으로 읽기 단위를 사용합니다. 쓰기 단위는 1KB 단위로 요금이 청구됩니다. 문서를 작성하면 데이터에 대한 단위와 업데이트된 각 색인 항목에 대한 추가 단위가 사용됩니다. 자동 단일 필드 색인 생성을 적용하는 Standard 버전과 달리 이제 색인을 생성할 특정 필드를 선택하여 쓰기 비용과 성능을 최적화할 수 있습니다.

Firestore 파이프라인 작업의 기능

파이프라인 작업이 포함된 Firestore Enterprise 버전은 Firestore Standard 버전의 기존 제한사항을 많이 제거하는 고급 쿼리 엔진을 활용합니다. Firestore 파이프라인 작업은 수백 개의 추가 쿼리 기능을 제공합니다. Firestore 파이프라인 작업에는 다음과 같은 기능이 있습니다.

단계 기반 구성 가능한 구문

파이프라인 쿼리는 순서대로 실행되는 일련의 순차적 단계를 정의하여 구성됩니다. 이를 통해 이전에는 불가능했던 집계 결과를 필터링하는 등의 복잡한 작업을 수행할 수 있습니다.

다음 예는 지난 한 달 동안 조회된 고유 제품 ID 수를 찾는 파이프라인 쿼리를 보여줍니다.

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

확장된 기능

파이프라인 쿼리에는 다음과 같은 다양한 새로운 기능이 도입되었습니다.

  • 집계: 임의의 그룹화 필드와 결합된 새로운 집계 함수(예: sum(...), min(...), count_distinct(...))를 지원합니다.
  • 복잡한 필터링: regex_match(...), add(...), str_contains(...)를 비롯한 임의로 복잡한 where(...) 문을 표현하는 수백 개의 추가 함수를 지원하며, 모두 엄격한 색인 요구사항이 없습니다.
  • 부분 읽기 / 프로젝션: select(...), remove_fields(...) 및 기타 여러 문서 조작 단계를 사용하여 문서의 동적 하위 집합을 가져옵니다.

이러한 기능에 대해 자세히 알아보려면 파이프라인 작업으로 데이터 쿼리를 참고하세요.

실시간 및 오프라인 지원

실시간 및 오프라인을 활용하기 위해 개발자는 Firestore Enterprise 버전에서 Firestore 핵심 작업을 사용할 수 있습니다.

클라이언트 및 도구 통합

Enterprise 버전에는 파이프라인 쿼리와 상호작용하고 이를 관리하는 전문 기능이 포함되어 있습니다.

  • 쿼리 설명 및 프로파일링: 쿼리 설명 결과를 사용하여 쿼리가 소비하는 읽기 또는 쓰기 단위 수를 파악하고 실행을 분석할 수 있습니다.
  • 쿼리 통계: Enterprise 버전은 데이터베이스에서 실행되는 상위 쿼리와 해당 성능 특성을 파악하여 성능과 비용을 개선하기 위해 색인을 생성할 수 있는 위치를 결정하는 데 도움이 되는 쿼리 통계를 지원합니다.
  • 새 색인 유형: 희소, 비희소, 고유 색인과 같은 색인 유형을 비롯한 Enterprise 버전용 특수 색인을 만들 수 있습니다. 또한 Enterprise 데이터베이스의 벡터 검색 색인을 생성하고 수정하는 기능도 지원합니다.

Firestore Standard와 Firestore Enterprise의 차이점

핵심 작업과 파이프라인 작업 간의 주요 운영 차이점은 색인 관리에 있으며, 이는 성능과 비용에 직접적인 영향을 미칩니다.

Firestore Standard - 핵심 작업 Firestore Enterprise - 핵심 및 파이프라인 작업
색인 생성 요구사항 쿼리에는 색인이 필요합니다.

개별 필드의 색인은 자동으로 생성되지만, 더 복잡한 쿼리는 수동으로 구성해야 하는 복합 색인 또는 컬렉션 그룹 색인을 사용합니다.

색인이 필요하지 않으므로 쿼리에 선택사항입니다.

필요에 따라 색인을 정의합니다. Enterprise 버전은 비희소/희소 및 고유 색인을 비롯한 더 광범위한 색인 유형도 지원합니다.

성능 색인이 생성된 쿼리: 성능과 비용이 결과 세트의 크기에 따라 변합니다.

색인이 생성되지 않은 쿼리: 성능과 비용이 데이터 세트의 크기에 따라 변합니다.

색인이 생성된 쿼리: 성능과 비용이 결과 세트의 크기에 따라 변합니다.

쿼리 설명 및 쿼리 통계 도구를 사용하여 색인을 만들고 쿼리의 성능과 비용을 개선하는 것이 좋습니다.

스토리지 비용 영향 자동 색인과 복합 색인으로 인해 스토리지 오버헤드가 발생합니다. 모든 필드에 색인이 자동으로 생성되지 않으므로 스토리지 비용을 절약할 수 있습니다.
비용 기준 문서 읽기, 쓰기, 삭제 작업별로 요금이 청구됩니다. 읽기 단위(4KB 단위) 및 쓰기 단위(1KB 단위)당 요금이 청구됩니다. 색인 항목을 작성하면 쓰기 단위가 사용됩니다.

예시를 통해 새로운 가격 책정을 알아보세요.

보안 규칙 보안 규칙은 읽기/쓰기 권한을 확인하여 컬렉션을 보호합니다. 보안 규칙은 읽기/쓰기 권한을 확인하여 컬렉션을 보호합니다. 데이터 모델 가이드에서 파이프라인 쿼리를 지원하도록 데이터를 모델링하는 방법을 알아보세요.