Firebase

[Firebase] Functions v1과 v2

Aostols 2025. 5. 9. 21:28
반응형

Firebase Cloud Functions 는 버전이 2개 입니다.

v1 과 v2가 있는데 v2를 사용해야 하는 몇가지 이유를 찾아 봤습니다.

 

 

v1 는 functions.https.onCall() 로 직접 호출하는데
v2 는 import {onCall, onRequest} from "firebase-functions/v2" 로 임포트 하여 사용합니다.

v1은 Node.js 10~16버전이고 v2 는 Node.js 18+ 입니다.

 

v1의 기본코드는 다음과 같습니다.

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

exports.hello = functions.https.onRequest((req, res) => {
  res.send("Hello from V1");
});

 

v2의 기본 코드는 다음과 같습니다.

import { onRequest } from "firebase-functions/v2/https";

export const hello = onRequest((req, res) => {
  res.send("Hello from V2");
});

 

두가지 차이로 인하여 개발자 경험이 대폭 개선 되었다고 주장(?) 하고 있습니다.

 

 

또한 v2는 runWith() 이 더 세밀해 졌습니다.

onRequest(
  {
    region: "asia-northeast3",
    timeoutSeconds: 60,
    memory: "512MiB",
    concurrency: 10,
    minInstances: 1,
    maxInstances: 5,
  },
  (req, res) => {
    res.send("Hello with scaling control");
  }
)

 

v1에도 일부 기능이 있었지만 내용이 더 세부적이 되었습니다.

  • region :  함수 리전
  • timeoutSeconds : 최대 실행 시간
  • memory : 함수가 사용할 메모리 크기
  • concurrency : 한 인스턴스에서 동시 실행 가능한 요청 수
  • minInstances / maxInstances : 스케일 아웃 범위

 

제가 가장 큰 차이라고 생각하는것은 스케줄러 입니다.

v1에서 스케줄러는 functions.pubsub.schedule() 을 사용했는데 Cloud Scheduler 콘솔에서 별도로 설정했어야 했습니다.

import { onSchedule } from "firebase-functions/v2/scheduler";

export const hourlyJob = onSchedule({
    schedule: "0 0 * * *",
    timeZone: "Asia/Seoul",
  }, (event) => {
  console.log("자동 작업 실행!");
});

 

v2에서는 코드로만 스케줄러 생성이 가능합니다.

또한 Cron 표현식으로 스케줄을 정할 수 있습니다.

  • 분 : 0~59
  • 시 0~23
  • 일 1~31
  • 월 1~12, JAN~DEC
  • 요일 0~6, SUN~SAT

이러한 방식으로 정할 수 있어서 위의 표현식은 매일 0시 0분 입니다.

아니면 App Engine cron 도 사용 가능한데

"every X (minutes|hours|days)" 란 식으로도 가능 합니다.

이렇게 배포가 성공적으로 된다면 별도의 처리 없이 쉽게 스케줄러 등록이 됩니다.

물론 Cloud Scheduler 에도 표시가 되고 거기서 처리할 수도 있습니다.

 

또하나의 가장 큰 이유는 v1이 종료 예정입니다.

Node.js 버전이 일몰 되고 있고 16버전이 2025년에 종료될 예정있다고 합니다.

16버전이 v1의 마지막 버전이라서 막상 16버전 종료될때 어떻게 처리될지 두고 봐야 할것 같습니다.

반응형