azhy의 iOS 이야기

[Firebase] Cloud Functions 사용 본문

etc

[Firebase] Cloud Functions 사용

azhy 2024. 11. 6. 23:49

2022년 2월 6일에 작성됨

 

Functions을 실행시키는 방법은 onCall과 onRequest가 있습니다.

차이점은 호출 방식에 차이가 있는데, onCall은 클라이언트의 firebase.functions()를 통해 호출하고 onRequest는 표준 https request 방식입니다.

따라서 onCall은 앱 안에 Firebase Cloud Functions SDK를 설치해야 하고 firebase functions 패키지를 필요로 합니다.

onCall이 좀 더 함수처럼 동작하죠.

 

자세한 정보는 onCall 공식 문서, onRequest 공식 문서를 참고해 주세요.

Cloud Functions 세팅

[Flutter] Firebase Cloud Functions 세팅 저번 글에 이어 진행하는 것이기 때문에 기본적으로 Firebase Cloud Funcions 세팅이 완료되어야 합니다.

 

cloud_functions: ^3.2.6 사용하였습니다.


onCall, onRequest

 

다음 코드로 onCall, onRequest 테스트 두 가지를 해볼 예정입니다.

firebase deploy --only "functions:FunctionsName"을 통해 함수를 배포합니다.

 

call request 버튼을 누르면 helloWorld를 요청해 "Hello from Firebase!" data를 불러와 TEST에 세팅해 주고 add Count 버튼을 클릭하면 addCount functions를 호출해 count를 + 1 증가시키고 return 시킵니다.

 

// call request
onTap: () async {
                final HttpsCallableResult result = await FirebaseFunctions
                    .instance
                    .httpsCallable('helloWorld')
                    .call();
                setState(() {
                  testValue = result.data;
                });
              },
// add Count
onTap: () async {
                final HttpsCallableResult result = await FirebaseFunctions
                    .instance
                    .httpsCallable("addCount")
                    .call(<String, dynamic>{'count': count});
                print(result.data);
                setState(() {
                  count = result.data;
                });
              },

결과

 

onCall, onRequest 정상적으로 작동하는 것을 확인할 수 있습니다.

Cloud Firestore, 데이터베이스 트리거

Cloud Firestore 트리거데이터베이스 트리거 공식문서를 확인해 보면 onCreate, onUpdate, onDelete, onWrite 핸들러를 통해 해당 경로에 대한 모든 유형의 변경사항을 수신 대기할 수 있다고 합니다.

 

Firestore의 test collection에 문서가 생성되면 log 가 찍히는 것을 확인해보려 합니다.

firebase deploy --only "functions:FunctionsName"을 통해 함수를 배포합니다.

 

firestore에 데이터를 추가하면 onCreate 함수가 트리거 되고 log 가 찍히는 모습을 확인할 수 있습니다.

 

추가로 함수 예약 문서를 확인해 보면 지정된 시간에 실행하도록 함수를 예약할 수 있다고 합니다.

예를 들어 자동으로 하루에 한 번씩 함수를 돌려 데이터를 확인하고 수정할 수 있습니다.