파이어베이스(Firebase)는 모바일 앱,웹 클라이언트에 필요한 DB,Functions,Storage를 모아 놓은 모바일 개발 플랫폼이고 구글클라우드플랫폼(GCP) 는 AWS와 비견되는 클라우드 컴퓨팅 서비스 제품군을 일컫는다. 파이어베이스에서 제공되는것은 백엔드엔지니어나 운영자도 구글클라우드플랫폼 콘솔을 통해 접근할 수 있고 프론트엔드 엔지니어는 파이어베이스콘솔에 접근하는것만으로도 개발에 참여해 협업이 가능하다.
결론적으로는 파이어베이스가 GCP의 부분집합(subset)이다.
프론트엔드만 가지고 작업을 하다보면 백엔드의 작은 도움이필요한 경우가 발생한다. 가령 일정한 시각에 배치(batch)작업을 해서 오래된 데이터를 아카이브 한다든지 하는 작업인데
GCP의 스케쥴러(Crontab)와 클라우드 Functions의 조합으로 해결할 수 있다. DB를 업데이트하는 함수를 만들어 구GCP 스케쥴러로 매일 새벽 4시에 실행시키거나, DB의 특정 콜렉션의 변화를 구독(subs)하다가 Functions를 트리거링하거나 텔레그램챗봇에게 말을거는 방식으로도 트리거링 할 수 도 있다. 어쨋든 이런것을 구현하는데 있어 로컬에서 실제와 같은 DB와 functions 환경을 구축하는것은 반드시 필요하다. 테스트 한번 할때마다 새로운 Functions를 배포하고 훼손된 원격 DB를 원래대로 되돌리는일은 끔찍하니까...
파이어베이스제품군의 강점중 하나가 로컬에뮬레이터인데, 이걸 이용하면 Functions를 실제 서버에 배포전 테스트를 충분히 해볼 수 있다. 하지만 테스트를 충분히 하려면 로컬 파이어스토어DB에 목업 데이터를 미리 부어줘야 하는데 에뮬레이터를 재실행할때마다 DB도 (당연히) 함께 리셋되버린다.
따라서 반복되는 테스트를 위한 목업 데이터를 한번 만들고 export해 두었다가 에뮬레이터를 실행할때 import하는것이 테스트를 수월하게 할 수 있는 방법이다.
// export는 매우 간단하다.
>firebase emulators:export ./myLocalData
// import는 다음과 같다.
>firebase emulator:start --import=./myLocalData
혹시 import가 제대로 되지않으면 경고를 내보내므로 경로가 제대로 되어있는지 확인한다.
emulators: Import/Export metadata file does not exist. Skipping data import! Metadata file location: //.....
gcloud CLI(구글클라우드 CLI) 를 이용해서 클라우드에 존재하는 파이어베이스>파이어스토어의 전체 콜렉션를 export할 수 있다.
gcloud firestore export gs://<<my-project-bucket-id>>.appspot.com
물론 싱글 콜렉션을 지정하여 export 할 수도 있다.
--collection-ids 플래그를 사용해서 myCollection에 원하는 콜렉션의 ID 스트링을 넣어주면 된다. 가령 "posts" 이렇게
gcloud firestore export gs://<<my-project-bucket-id>>.appspot.com --collection-ids=myCollection
다만 이렇게 export한것은 클라우드에 존재하는 파이어베이스>버킷스토리지에 타임스탬프를 포함하는 폴더에 저장된다.
로컬에서 사용하기 위해서는 이 폴더를 다시 로컬로 내려받아서 정리작업을 한뒤 에뮬레이터를 시작할때 import해줘야한다.