구글 PS2팀 이지영
Firestore란?
Firestore는 NoSQL 문서 중심의 데이터베이스입니다. SQL Database와 달리 테이블이나 행이 없으며, 컬렉션으로 정리되는 문서에 데이터를 저장합니다.
각 문서에는 키-값 쌍이 있습니다. Firestore는 작은 문서가 많이 있는 컬렉션을 저장하는 데 최적화되어 있습니다.
모든 문서는 컬렉션에 저장되어야 합니다. 문서는 하위 컬렉션과 중첩 개체를 포함할 수 있으며, 둘 다 모두 문자열과 같은 기본형 필드나 목록과 같은 복합 객체를 포함할 수 있습니다.
컬렉션과 문서는 Firestore에서 암시적으로 생성됩니다. 데이터를 컬렉션 내의 문서에 할당하기만 하면 됩니다. 컬렉션이나 문서가 없으면 Firestore가 이를 자동으로 만듭니다.
PITR(point-in-time-recovery) 소개
Firestore PITR(point-in-time recovery)은 실수로 인한 삭제 또는 쓰기를 방지합니다. PITR은 이전 타임스탬프의 문서 버전을 일관되게 유지합니다. 예를 들어 개발자가 잘못된 데이터, 실수로 인한 삭제 또는 쓰기를 푸시하는 경우 PITR을 통해 과거의 특정 시점(최대 7일)의 데이터를 원활하게 복구할 수 있습니다.
PITR 활성화 후에, Firestore는 PITR 데이터에 대한 보관을 시작합니다. PITR 데이터는 PITR 기간(window) 중 7일 동안 보관됩니다. PITR이 사용 설정된 시간을 기반으로 타임스탬프의 데이터를 읽을 수 있습니다.
PITR 사용 설정 상태 | 사용 가능한 가장 이른 PITR 데이터 |
---|---|
사용 중지됨 | 일기 요청 시간 1시간 전 |
7일 이내에 사용 설정됨 | PITR이 사용 설정되기 1시간 전 |
7일 이전에 사용 설정됨 | 읽기 요청 시간 7일 전 |
분당 단일 버전이 PITR 기간에 보관됩니다. 1분 타임스탬프를 사용하여 분 단위로 문서를 읽을 수 있습니다. 쓰기가 여러 개인 경우 문서 버전 하나만 유지됩니다. 예를 들어 문서에 2023-05-30 09:00:00AM(제외) 및 2023-05-30 09:01:00AM(포함) 타임스탬프 사이에 v1, v2, … vk에 이르는 여러 개의 쓰기가 있는 경우, 타임스탬프 2023-05-30 09:01:00AM의 읽기 요청이 문서의 vk 버전을 반환합니다.
PITR 기간 중 생성된 데이터를 읽을 수 있습니다. 데이터는 분 단위로 저장되며 동일한 단위로 데이터를 복구할 수 있습니다. Firestore PITR 기능은 기본적으로 중지되어 있습니다.
데이터를 복구하는 방법에는 두 가지가 있습니다.
- 데이터베이스의 일부를 복구하려면 쿼리 조건을 지정하거나 이전의 타임스탬프와 함께 직접 키 조회를 사용하여 비활성 읽기를 수행합니다. 그런 다음 결과를 다시 실시간 데이터베이스에 기록합니다. 이는 일반적으로 실시간 데이터베이스의 소위 외과적 수술을 위해 사용됩니다. 예를 들어 특정 문서를 실수로 삭제하거나 데이터 하위 집합을 잘못 업데이트한 경우 이와 같은 방법으로 복구할 수 있습니다.
- 전체 데이터베이스를 복구하려면 이전의 타임스탬프를 지정하여 데이터베이스를 내보낸 후 새 데이터베이스로 가져옵니다. 데이터베이스를 내보내는 데 몇 시간이 걸릴 수 있습니다. 타임스탬프가 지난 1시간 이내의 1분 타임스탬프이지만 earliestVersionTime 이후의 일관된 PITR 데이터만 내보낼 수 있습니다.
PITR(point-in-time-recovery) 설정
(참고) PITR 설정을 관리하려면 다음 권한이 필요합니다.
- 데이터베이스를 만들 때 PITR 사용 설정: datastore.databases.create
- 기존 데이터베이스에서 PITR 설정 업데이트: datastore.databases.update,datastore.databases.list
- PITR 데이터에서 읽기 수행: datastore.databases.get,datastore.entities.get,datastore.entities.list
- PITR 데이터 내보내기: datastore.databases.export
- PITR 데이터 가져오기: datastore.databases.import
PITR(point-in-time-recovery)를 사용하기 위해 “재해복구” 페이지에서 “수정” 아이콘을 선택합니다.

“point-in-time-recovery 사용 설정”의 체크박스를 선택하고 “저장” 버튼을 누릅니다.

이제 “재해 복구” 페이지에 “가장 빠른 버전 시간”과 “보존 기간”이 포함된 것을 확인할 수 있습니다.

여기까지가 Firesotre에서 PITR을 설정하는 방법이었으며, 이제부터 데이터 저장이 시작됩니다.
요약
지금까지 Firestore에 추가된 PITR기능에 대하여 알아보았습니다. Firestore는 이미 높은 가용성을 제공하고 있지만, PITR를 통하여 우발적인 삭제 또는 쓰기로부터 데이터를 확실히 보호 받을 수 있게 제공하게 되었습니다.