[Firestore] 웹에서 firestore query시 가끔 내용이 비어 있을 때

seulinger·2024년 3월 29일
0

개발노트

목록 보기
5/5

결론

firestore를 사용하여 웹 개발을 하는 경우, 오프라인으로 데이터에 엑세스 하는 기능이 기본값으로 OFF되어 있으니, 아래 처럼 DB를 사용하기 전에 이를 활성화시켜 사용해야 합니다.

await db.enablePersistence(const PersistenceSettings(synchronizeTabs: true));

아니면 항상 온라인 데이터에만 엑세스 하도록 하는 방법도 있을 것 같습니다.
snapshot 결과 - metadata - isFromCache를 확인해서 캐쉬에서 온 결과이면, 다시 온라인 데이터를 받도록 하면 될 것 같습니다.
(이 부분은 제가 해결한 방법은 아니어서 확인은 못했습니다. - 여기를 확인하시면 도움이 되실 것 같습니다.)


경고: 아래 내용은 이 문제를 해결하는 과정으로 여러 투덜거림이 있을 수 있습니다.

수우주의 계산기 공유를 위한 웹 서비스를 개발하는 중, firebase의 firestore에 저장된 정보를 불러와서 보여줘야 하는 부분이 있었다.

안드로이드 앱을 개발할 경우와 동일하게 코드 작성하고, 테스트를 해보니 잘 되는 것 같았다.

그래서 배포까지 완료했는데, 다음날 앱과 연동되는 부분을 테스트 하다보니 종종 데이터가 없다는 화면을 보여주는 상황이 나타났다.

항상 그랬듯이 stack overflow를 찾아보니, 내가 해당하는 경우는 잘 안나오는 것이었다.

내 경우에는 대부분의 경우에 query결과를 잘 보여주다가, 가끔 데이터를 불러오지 못하는 경우가 발생하였다.

계속해서 찾다보니 눈에 띄는 부분이 바로 캐쉬에 따른 문제

웹 앱을 디버그 모드에서 실행하면서, 언제 빈 데이터가 들어오는 지 확인해보니, 역시나 cache에서 읽는 경우(snapshot - metadata - isFromCache를 확인)에 빈 데이터가 들어오고 있었다.

(여기에서 왜 에러를 뿜지 않고, 빈 데이터로 처리하는 지 잘 이해가 안되지만, 아마 캐쉬에 데이터가 없는 경우, 데이터 자체가 없다고 판단하여 별도로 에러로 처리하지 않는 것 같다.)

(그렇다해도, DB설정에서 오프라인으로 데이터에 엑세스 하는 기능이 꺼져있다면, 캐쉬에 엑세스하려고 할 때 에러를 보여줘야 하지 않을까? 내 반나절을 돌려 줘~)

(일단 firebase의 기능 요청에 관련 내용을 올려 뒀습니다. 혹시 이 내용이 반영되길 바라신다면, 한번 읽어보시고 투표해주세요~)

역시나 firebase 문서를 보니, 웹의 경우 오프라인 지속성을 사용하지 않는 것이 기본값으로 되어 있었다.
그래서 firebase문서에 있는 데로 DB 초기화 할 때 아래 내용을 추가하였다.

await db.enablePersistence(const PersistenceSettings(synchronizeTabs: true));

이후에 테스트해보니, 캐쉬에서 가져오는 경우에도 잘 작동하였다.

미결사항

웹에 대해서 오프라인 지속성을 사용하지 않는 것이 기본으로 되어 있는 이유가 있을 텐데, 대충 추측하기로는 오프라인 지속성을 모든 브라우저에서 지원하지 않으니까 그럴 수 있다고 생각은 해 봤다.

혹시 이 부분에 대해서 알게 되면 이 글에 추가로 기록을 남기겠습니다.

나만의 계산기를 만들어 사용하고 싶으시다면, 구글 플레이에서 수우주를 다운로드하여 사용해 보세요.

0개의 댓글