dev.syw

서버리스 함수로 백엔드 로직을 작성하고 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' });
});

💡 TIPonCall은 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
함수 유형호출 방식
onCallFirebase SDK(httpsCallable)
onRequestHTTP URL 직접 호출
트리거데이터 이벤트로 자동 실행

요약

  • Cloud Functions는 서버리스로 백엔드 로직을 실행합니다.
  • onCall은 인증 정보가 함께 오는 SDK 호출용 함수입니다.
  • onRequest는 웹훅 등 HTTP 요청을 처리합니다.
  • 트리거 함수는 데이터 변경에 자동으로 반응합니다.
  • firebase deploy --only functions로 배포하며, 함수 단위 배포도 가능합니다.

연습문제

  1. onCallonRequest의 호출 방식 차이는 무엇인가요?
  2. onCall 함수에서 사용자 인증 정보는 어디에 담겨 있나요?
  3. 문서 생성 이벤트에 반응하는 트리거 함수는 어떤 함수로 만드나요?
  4. 트리거 함수에서 무한 루프를 피하려면 무엇에 주의해야 하나요?

힌트 — 트리거가 감시하는 대상과 함수가 쓰는 대상의 관계를 떠올려 보세요.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

Firebase” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.