2022. 3. 1. 17:54ㆍFirebase
오늘은 Firebase 앱에 생기를 불어넣어 줄 수 있는 클라우드 함수(Cloud Function)에 대해 알아보겠다.
클라우드 함수 (Cloud Functions)
Firebase 공식 문서는 클라우드 함수를 다음과 같이 설명하고 있다.
Firebase용 Cloud Functions는 Firebase 기능과 HTTPS 요청에 의해 트리거되는 이벤트에 응답하여 백엔드 코드를 자동으로 실행할 수 있는 서버리스 프레임워크다
파이어 베이스는 서버가 없고 클라이언트에서 대부분의 요청이 이루어지지만 백엔드 환경에서만 작성 가능한 코드를 아예 쓰지 못하는 건 아니다. 구글 클라우드의 이벤트 기반 서버리스 프레임워크인 cloud function을 사용하면 node js 환경에서 실행 가능한 타사 API 라던지 자사의 REST API도 제작할 수 있다.
한마디로 서버는 없지만 서버의 역활을 대신해줄 수 있는 환경이 있기에, 코드만 작성해둔다면 구글이 필요한 서버 프로비저닝과 배포 환경 구성을 전부 알아서 처리해주고 함수가 실행되기 위해 필요한 최소 조건에 맞춰서 비용을 청구한다. 그렇기 때문에 개발자들은 서버 운영은 맘 편히 구글에게 맡겨두고 더 좋은 제품을 만드는데만 집중할 수 있는 것이다.
AWS에 익숙하다면 Lambda랑 유사한 기능이라고 보면 되겠다.
프로젝트에 클라우드 함수(cloud function) 추가
클라우드 함수를 사용하기 위해선 기본(spark) 요금제가 아닌 종량제(blaze)요금제로 변경이 필요함. 요금제 보기
이제 프로젝트에 클라우드 함수를 추가하는 방법에 대해 알아보도록 하자.
세팅은 아래 포스트와 동일하게 했다고 가정하고 진행하겠다
함수를 작성하긴 위해선 Node js 환경이 필요하고, Cloud Functions 런타임에 배포하려면 Firebase CLI가 필요하기 때문에 둘다 설치가 되어있는지 확인 후 진행하길 바란다.
npm install firebase-functions@latest firebase-admin@latest --save // functions
npm install -g firebase-tools // 파이어베이스 cli
아직 파이어베이스 로그인이 되어있지 않다면 프로젝트 터미널에서 로그인을 해주자 (브라우저에서 로그인 창이 뜸)
firebase login
현재 프로젝트 디렉토리 루트에서 클라우드 함수를 사용할 수 있도록 초기화를 해주자
firebase init functions
기존 프로젝트가 있다면 Use an existing project를 선택해서 만들어 놓은 프로젝트를 선택하고 없다면 create a new project로 cli 또는 파이어 베이스 콘솔에서 새로운 프로젝트를 만들고 다시 진행하면 된다.
계속해서 타입스크립트, 자바스크립트 둘 중 어느 것을 사용할 것인지 선택하고 eslint를 켤 것인지 끌 것일지 설정하면 된다.
테스트용이기 때문에 사용하지 않음으로 일단 설정을 해주겠다. 마지막으로 의존성 패키지를 설치할것이냐 물어보는데 웬만해서는 다 설치하게 되니 Y를 입력해주자.
초기화가 완료되면 아래와 같이 파일 구조가 생성될것이다.
클라우드 함수에 관련된 모든 것은 functions 폴더에 위치한다.
myproject
+- .firebaserc
|
+- firebase.json
|
+- functions/
|
+- .eslintrc.json
|
+- package.json
|
+- index.js // 해당 파일에 실행할 코드 작성
|
+- node_modules/
이제 index.js에 클라우드 함수를 작성해주면 된다.
그냥 index.js에 전부 써도 상관은 없지만 양이 많아진다면 관리 및 유지보수가 힘들어질 수 있어서 필자는 아래와 같은 방법으로 관리한다.
index.js
onst functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.kakao = require("./kakao");
exports.pubsub = require("./pubsub");
exports.solapi = require("./solapi");
exports.geocode = require("./geocode");
kakao.js (카카오 관련 클라우드 함수)
exports.getCustomToken = functions
.https.onCall((data, _) => {
// 커스텀 토큰 가져오기
});
exports.getGeoCode = functions
.https.onCall((data, _) => {
// 좌표 불러오기
});
이렇게 작성한 뒤 전부 배포할 때는 아래 명령어를 사용하자.
firebase deploy --only functions
만약 다름 함수는 나 두고 특정 클라우드 함수만 배포하려면 뒤에 클론과 이름을 붙여주면 된다
firebase deploy --only functions:kakao
배포를 하게 되면 대략 1~5분 후에 완료됐다는 메시지가 나온다.
배포하기까지 조금 시간이 소요되기 때문에 로컬 환경에서 미리 테스트를 해보고 싶다면 애뮬레이터를 사용하면 된다.
콘솔에서 확인해보면 정상적으로 배포된 함수를 볼 수 있을 것이다.
클라우드 함수가 실행되기 위해선 이벤트 트리거 (event trigger)라는 게 필요한데 다음 포스트에서는 필자가 많이 사용하는 트리거들 위주로 설명하고 어떻게 작성할 수 있는지 써보도록 하겠다.
출처: https://firebase.google.com/docs
'Firebase' 카테고리의 다른 글
[Firebase 웹] 지정된 시간마다 Cloud Function 직접 호출 (2) | 2022.03.06 |
---|---|
[Firebase 웹] Cloud Function 으로 파이어스토어 컬렉션과 문서 변화 (추가, 업데이트, 삭제) 감지 (0) | 2022.03.03 |
[Firebase 웹] 파이어스토어에서 데이터 불러오고 쓰기 feat. React (0) | 2022.02.25 |
[Firebase 웹] 파이어베이스 시작하기 - 웹 앱 초기설정 (0) | 2022.02.23 |
[Firebase 웹] 파이어베이스란? 주요 기능들과 유사 제품들 (0) | 2022.02.21 |