서버리스 함수로 백엔드 로직을 작성하고 onCall, onRequest, 트리거 함수를 배포한다.
Cloud Functions
Cloud Functions는 서버를 직접 운영하지 않고도 백엔드 로직을 실행할 수 있는 서버리스 환경입니다. 클라이언트에 두면 안 되는 민감한 처리나, 데이터 변경에 반응하는 자동화 작업을 함수로 작성합니다. 이번 강의에서는 함수의 종류와 배포 방법을 배웁니다.
학습 목표
- Cloud Functions가 필요한 상황을 이해한다.
onCall로 클라이언트에서 호출하는 함수를 만든다.onRequest로 HTTP 엔드포인트를 만든다.- Firestore 트리거 함수를 작성하고 배포한다.
초기화
함수는 별도 폴더에서 관리합니다. firebase init functions로 설정하면 functions/ 디렉터리가 생성됩니다.
npm install -g firebase-tools
firebase login
firebase init functions
onCall 함수
onCall은 클라이언트 SDK에서 직접 호출하는 함수입니다. 인증 정보가 자동으로 전달되어 사용자 확인이 쉽습니다.
import { onCall, HttpsError } from 'firebase-functions/v2/https';
export const addMessage = onCall((request) => {
if (!request.auth) {
throw new HttpsError('unauthenticated', '로그인이 필요합니다.');
}
const text = request.data.text as string;
return { saved: true, uid: request.auth.uid, text };
});
클라이언트에서는 다음처럼 호출합니다.
import { getFunctions, httpsCallable } from 'firebase/functions';
const functions = getFunctions();
const addMessage = httpsCallable(functions, 'addMessage');
const result = await addMessage({ text: '안녕하세요' });
onRequest 함수
onRequest는 일반 HTTP 요청을 처리하는 함수로, 웹훅이나 외부 API 연동에 적합합니다. Express의 req/res와 비슷하게 동작합니다.
import { onRequest } from 'firebase-functions/v2/https';
export const hello = onRequest((req, res) => {
res.json({ message: 'Hello from Functions' });
});
💡 TIP —
onCall은 Firebase SDK로 호출할 때,onRequest는 임의의 클라이언트나 외부 서비스가 URL로 호출할 때 적합합니다. 용도에 맞게 선택하세요.
트리거 함수
데이터 변경에 자동으로 반응하는 함수입니다. 예를 들어 문서가 생성될 때 알림을 보내거나 집계를 갱신할 수 있습니다.
import { onDocumentCreated } from 'firebase-functions/v2/firestore';
export const onPostCreated = onDocumentCreated(
'posts/{postId}',
(event) => {
const data = event.data?.data();
console.log('새 글 생성:', data?.title);
},
);
⚠️ 주의 — 트리거 함수가 자신이 감시하는 컬렉션을 다시 쓰면 무한 루프가 발생할 수 있습니다. 같은 문서를 갱신할 때는 조건을 두어 재실행을 막아야 합니다.
배포
작성한 함수는 firebase deploy로 배포합니다. 특정 함수만 배포할 수도 있습니다.
# 모든 함수 배포
firebase deploy --only functions
# 특정 함수만 배포
firebase deploy --only functions:addMessage
| 함수 유형 | 호출 방식 |
|---|---|
| onCall | Firebase SDK(httpsCallable) |
| onRequest | HTTP URL 직접 호출 |
| 트리거 | 데이터 이벤트로 자동 실행 |
요약
- Cloud Functions는 서버리스로 백엔드 로직을 실행합니다.
onCall은 인증 정보가 함께 오는 SDK 호출용 함수입니다.onRequest는 웹훅 등 HTTP 요청을 처리합니다.- 트리거 함수는 데이터 변경에 자동으로 반응합니다.
firebase deploy --only functions로 배포하며, 함수 단위 배포도 가능합니다.
연습문제
onCall과onRequest의 호출 방식 차이는 무엇인가요?onCall함수에서 사용자 인증 정보는 어디에 담겨 있나요?- 문서 생성 이벤트에 반응하는 트리거 함수는 어떤 함수로 만드나요?
- 트리거 함수에서 무한 루프를 피하려면 무엇에 주의해야 하나요?
힌트 — 트리거가 감시하는 대상과 함수가 쓰는 대상의 관계를 떠올려 보세요.
💡 연습문제 풀이
불러오는 중…
댓글 0
“Firebase” 강좌에 대한 댓글입니다.