Trip to Firebase

파이어 스토어에서 스냅샷 도대체 무엇인가?

Kestrel 2023. 9. 5. 18:31

파이어 베이스를 처음 배우면서 스냅샷이라는 단어를 알게 되었다. 파이어 스토어에서 데이터를 부르면 바로 원본 데이터를 가져오는 것이 아니라 스냅샷을 가져온다. 잠시 찾아본 내용으로는 정확히 정의 내릴 수는 없지만 A  snapshot can be defined as a system state at a specific point of time in a computer system. 위키의 정의처럼 한 특정 시점을 찍어서 가져온 것이라고 한다. 그렇다고 복사본은 아니고 사용하려면 data화를 시켜야한다. 

 

export const findPlantDataByDocId = async (docId: string) => {
  try {
    if (!docId) {
      errorNoti('식물 id가 잘못되었습니다.');
      return;
    }
    const docRef = doc(db, 'plant', docId);
    const plantData = (await getDoc(docRef)).data();
    return plantData;
  } catch (error) {
    errorNoti('식물 정보를 가져오는데 실패하였습니다.');
    return;
  }
};

예를 들자면 이렇게 data() 메소드를 사용해서 우리가 쓸 수 있게 객체로 만들어준다. 여기서는 platnData가 스냅샷이다. 아래는 구글에서 제공하는 예시인데 보면 쿼리 스냅샷으로 나온다. 그것을 docs 메소드를 통해서 순회하고 있다. 스냅샷 상태에서 다양한 메소드를 사용할 수 있는데 이게 유용할 때도 있고 굳이 한 단계를 거쳐 데이터를 사용하기 때문에 불편할 때도 있다. 예를 들어 empty 나 size로 데이터가 존재하는지 알 수 있거나 문서 수를 size로 알 수 있어서 좋은데 그냥 data 쓸 때는 굳이 메소드를 써서 한 번 더 거쳐야한다. 

 

 

쿼리 스냅샷은 그냥 쿼리로 뽑은 스냅샷이다. enumerate는 열거하다라는 뜻인데 주로 forEach를 통해서 열거를한다. 바로 쓸 수 있는 객체가 아니기에 나는 관리를 쉽게 하려고 배열에다가 넣어서 썼다. 

아래 영상은 그나마 친절하게 설명해준다. 일단 요정도 알고 있는 것으로...!

 

 

https://www.youtube.com/watch?v=L6drLskHxTE&ab_channel=EyeonTech