해결된 질문
작성
·
296
2
안녕하세요. 강사님.
강의에서 다소 벗어난 질문이지만, 도무지 해결되지 않아 이렇게 질문을 남깁니다.
강사님의 강의로 firebase로 crud를 구현했는데요.
여기에 더 나아가서 database에 저장한 데이터를 통계 데이터로 변환하여 In-APP 화면에서 보여주려고 합니다.
(예: 참여자 성별 및 연령 퍼센트 등)
그러기 위해선 FireBase의 Function이라는 기능을 사용해야 하는 것으로 알고 있습니다.
현재 Function으로 헬로라는 텍스트가 표시되는 페이지까지 배포한 상태인데,
Function에서 database 내 데이터를 가져와 연산하고 api 형태로 내려 줄 수 있는 방법이나 또는 참고 자료, 사이트 등이 있을까요? 참고로 개발 언어는 dart가 처음인 초보입니다.
답변 1
2
안녕하세요 k87s01k01님
통계는 언제 카운팅하는지가 중요한데, 유저 요청시 실시간으로 전체 데이터를 직접 카운팅하는 것은 비용이 많이 발생하게 됩니다. 또한 Firestore 집계 쿼리 문서를 보시면 Firestore는 직접적으로 통계를 산출하는 집계(aggregation) 쿼리를 지원하지 않는다고 나와있습니다. 대신 문서에선 데이터를 추가할 때 함께 통계 값을 동기화 하는 방식을 두 가지 소개하고 있습니다.
1. Flutter 앱에서 Firestore에 데이터를 추가할 때 통계 데이터도 기존 값에서 +1씩 증가시켜 데이터와 통계를 동기화 시키는 방식. (이때 여러 문서를 동시에 업데이트 해야 하므로 트랜잭션을 사용합니다.)
2. 클라이언트(앱)에서 Firestore에 데이터를 추가하는 경우, 해당 이벤트를 트리거로 Cloud Functions에 미리 작성해둔 통계 계산 함수를 실행하여 통계를 업데이트하는 방식. (트리거 기능에 대한 자세한 사항은 링크를 참고해 주세요.)
참고로 Cloud Functions 관련 문서를 참고해 보시면 지원하는 언어 목록을 보실 수 있는데, Dart는 아직 지원하지 않습니다. 하지만 Dart와 JavaScript는 문법이 매우 비슷하기 때문에 금방 배우실 수 있으므로 2번 방법으로 구현 하시는 경우, JavaScript를 배우셔서 Node.js로 Cloud Functions 코드를 구현하실 수 있습니다.
다만, 문서 마지막 제한사항에 Firestore 문서는 초당 최대 한 번만 업데이트될 수 있으므로 더욱 자주 업데이트를 하는 경우 분산 카운터를 이용하도록 안내되어 있는 점 참고해 주세요.
마지막으로 Cloud Functions에 등록한 함수를 주기적으로 실행할 수 있는 스케쥴러 기능이 있는데, 해당 기능을 이용하여 하루에 한 번씩 통계를 업데이트하는 함수를 구현하시는 방법도 있음을 알려드립니다.
감사합니다.