firebase cloud function -1

nabisorry·2020년 2월 3일
0

firebase

목록 보기
1/1
post-thumbnail

1.cloud function

FirebaseCloud Functions를 사용하면 Firebase 기능 및 HTTPS 요청에 의해 트리거된 이벤트에 대한 응답으로 백엔드 코드를 자동으로 실행할 수 있다.

사실 처음 봤을때는 이해가 어려웠고 사용해본 결과 클라이언트 단에서 일련의 작업이 일어 났을때 서버측에서 트리거 함수를 실행할수 있는 기능이라고 이해를 하고 있다.

여러가지 작업에서 트리거 함수를 사용할수 있는데(참조) 그 중에서 내가 사용한것은 Cloud Firestore 이다.

2.Cloud Firestore

Cloud Firestorefiresotre에서 문서에 변화가 생길 시 트리거 함수를 실행시켜주는 기능이다.
변화의 종류를 아래 표와 같다.

(공식문서 에서 워낙 설명을 잘 해주기 때문에 공식문서를 보는것이 빠를수 있으나.. 내 이해력이 부족하고 정리 하는 차원에서 글을 작성한다..)


2.1 시작하기

기존에 store 기본 설정은 console 을 통해서 쉽게 만들어 주었지만.. Cloud Firestore 사용하기 위해서는 설정과 배포(서버단에 내 코드를 올리는 것) 해야 하는데 CLI 환경에서 작업해줘야 한다.
자 해당 프로젝트의 터미널 창을 열고 firebase CLI를 설치해주자

$ npm install -g firebase-tools

설치를 완료한 후 코드에서 initialize 해서 store 와 연동했듯이 CLI도 내 계정과 연동을 해준다

$ firebase login

그 후에 프로젝트를 만들어 준다!

$ firebase init

그러면 아래처럼 firebase에서 어떠한 기능들을 사용할 것인지 묻는데 이때 functions를 선택해주면 된다.
기존에 store 와 연동 할 거기 때문에 FirebaseSotre 선택하지 않았다.

어느 프로젝트와 연동할것인지 를 묻는다. 나는 기존의 console에서 만들어 놓은 프로젝트를 사용할거기 때문에 Use an existing project 를 선택했다.

기존에 생성된 프로젝트 list 들을 보여준다. 원하는 프로젝트를 선택한다.

TypeScript 와 JavaScript 선택지가 주어진다.. 일단... JavaScript 를 선택했다. (TypeScript 배우고말거야)

EsLint 사용 여부이다.. 저같은 초짜는 당연하쥬 사용합니다

의존성 설치 할거냐 묻는 질문 바로 사용할것이기 때문에 당연 설치다!

완료된 후 프로젝트 폴더 구성이다. functions라는 폴더가 생겼으며 cloud funtion를 사용할 수 있는 환경이 클릭 몇 번으로 사르륵 구성되었다. 갓 구글!!!

2.2 사용하기

환경구성은 끝났다. 코드를 작성하기 위해서 functions/index.js 파일로 이동하자.
index.js

const functions = require('firebase-functions');

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//  response.send("Hello from Firebase!");
// });

기존 코드에 https 통신을 통한 트리거 함수 예시가 있다. 하지만 내가 사용하려는 것은 Cloud Firesotre이기 때문에 필요 없음으로 지워주고 간단하게 테스트 코드를 작성해봤다.

const functions = require('firebase-functions');

exports.createUser = functions.firestore
  .document('/test/{testId}')
  .onCreate((snap, context) => {
    console.log('문서 생성!');
    return snap
  });

위 코드는 test라는 컬렉션 아래 문서가 생성이 되면. onCreate() 안에 콜백 함수를 실행시킨다.
하지만 이 코드는 지금 내 로컬에서만 작성한 것이다.. 서버에 내 코드를 배포 시켜줘야 위 트리거 함수가 정상적으로 실행이 된다.
test 야 컬렉션이니 문제 이해가 가지만 {testId}는 뜬금없었다.
문서를 열심히 찾아보니 와일드카드 패턴으로 작성한 것인데 즉 test 아래에 어떠한 문서가 오던 트리거 함수를 실행하겠다는 문법이다. /test/one으로 작성하면 test 컬렉션 아래 one이라는 문서가 생성될 때 트리거 함수가 실행되지만 /test/{one}이라 작성하면 test 아래 생기는 모든 문서에 대해 트리거 함수가 실행된다.
와일드카드 패턴은 {}안에 아무 문자나 작성하면 된다

$ firebase deploy --only functions

명령어를 통해 트리거 함수를 배포시켜준다. 정상적으로 배포가 완료되면 console 목록에서 functions에 들어가면 확인할 수 있다.


createUser 라는 트리거 함수가 정상적으로 등록되었다. 이제 테스트를 해보자!!

내 store 구조이다. test 컬렉션 아래 문서가 추가되면 내가 작성한 트리거 함수가 실행이 되면서 '문서 생성!'이라는 로그가 찍혀야 한다.. 아무 문서나 작성하고 확인해보자

functions 에서 로그 창으로 이동후 확인해보자 !

정상적으로 잘 나온다. 오류 메시지는 트리거함수는 값이나 프로미스를 리턴해야 하는데 테스트할때 깜빡했다.

profile
쿨럭쿨럭

0개의 댓글