ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Firestore 사용시 주의점
    개발 이야기/Firebase 2019. 2. 24. 22:29



    웹에서 Firebase의 Firestore를 사용 시 주의 사항.



    1인 개발자로서 저렴한 비용에 쉽고 빠르게 서비스를 구축하기 위해서 Firebase를 사용해서

    웹페이지를 만들면서 발생한 이슈들에 대해서 공유합니다.


    현재 개발한 웹페이지는 Firebase Host에서 호스팅 중이며 프런트 개발은 vue를 이용했습니다.

    SPA로 개발된 것은 아니고 뷰의 장점인 점진적인! 도입이 가능하기 때문에 동적인 부분만 Vue를 도입했습니다.


    Firebase Host, Firebase Auth, Firebase Firestore 사용



    ▶주의 사항들 


    1. Firestore는 느리다.

    실제로 느립니다. 보통 짧게는 2초, 건수가 좀 되는 경우는 3~4초 정도 걸려서 조회되는데 생각보다 느려서 답답합니다.



    2. 1개의 문서는 1초에 1번만 수정할 수 있다.

    이건 firestore에 나와 있는 내용입니다.

    참고 : https://firebase.google.com/docs/firestore/solutions/counters


    요약하면 특정 게시글에 좋아요!를 여러 사람이 동시에 눌러서 1초에 카운트가 10개씩 늘어나야 된다고 하면 

    firestore는 부적절합니다. 같은 문서는 1초에 1명만 수정이 가능하기 때문입니다. 그래서 분산 카운터를 쓰라는 내용인데

    저의 경우에는 이런 경우에 해당하지는 않지만 firestore의 사용을 고려 중이면 이런  특성을 체크해보셔야 합니다.



    3. 과금의 기준 중 read는 횟수가 아니라 건수다.

    일일 50,000이 무료이고 이후로 100k 당 0.06달러가 과금됩니다.

    처음에 하루에 50,000번 조회가 무료라고!!? 엄청 싸다!! 하고 불나방처럼 뛰어들어서 개발했는데 제가 잘못 생각했습니다. ㅠ_ㅠ

    50,000은 건수입니다. 조회 수가 아닙니다. 만약 게시글이 10,000개인 게시판을 통으로 셀렉트 해버리면 10,000건이 소진되는 겁니다.



    4. 페이징이 문제다. (중요!)

    Firestore는 정말 앱 개발용으로만 쓰시길 권장합니다. 


    웹페이지의 단순한 게시판을 firestore로 만들면 하단에 페이징 번호를 매겨서 페이징 하기에 매우 부적절합니다.


    제공하는 기능 자체가 흔히 사용하는 네이티브 앱들의 리스트뷰 더보기 형태의 페이징만 구현하기 좋습니다. 

    특정 문서 이후부터 추가로 limit개수의 데이터를 가져오는 기능을 지원한는데 이게 앱 방식입니다.


    참고 : https://firebase.google.com/docs/firestore/query-data/query-cursors?hl=ko



    저는 모르고 웹 방식의 페이징을 구현했는데(억지로..어렵게..) 이렇게 하니 사용량이 엄청나게 증가해서 깜짝 놀랐습니다.

    이유는 전체 건수를 알아야 하단 페이지와 rownum을 매겨주는데 건수를 알아내려면 조회를 해야 합니다.

    (firestore는 SQL 쿼리가 안됩니다) 


    만약 게시판 총 글이 1만 건이면 1만 건 조회를 해서 전체 개수를 알아내야 합니다. (read 건수 낭비..)


    심지어 실시간으로 내용이 변경되는 걸 감지하려고 onSnapshot을 걸면 내용이 변경될 때마다 1만 건 조회가 낭비됩니다.

    정말 이렇게 구현하면 과금 폭탄을 맞을 수도 있습니다.


    그래서 부랴부랴 <이전> <다음> 페이지 형태로 게시판을 만들었는데 사실 이런 UI는 웹페이지에 쓰기에는 어울리지 않습니다. ㅠㅠ



    5. .net 환경에서 firestore는 비추

    저는 웹, 앱, .net 등의 다양한 플랫폼에서 개발을 진행했는데 .net은 정말 firestore를 쓰지 마시길 추천드립니다.

    라이브러리 용량도 은근 크고 결정적으로 Firebase 공식 페이지에서 .net계열은 언급이 없습니다. (찬밥신세)




    대충 요정도 공유를 해봅니다. 


    만약 다음 프로젝트를 클라우드 환경에서 개발한다면 firestore를 쓸것인가? 라고 누군가 묻는다면 

    NO라고 대답하겠습니다.


    시간을 돌릴 수 있다면 Amazon Cognito + Amazon DynamoDB 을 사용해서 서비스를 구축해보고 싶습니다.



    감사합니다.






    댓글

Designed by Tistory.