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버전 종료될때 어떻게 처리될지 두고 봐야 할것 같습니다.
'Firebase' 카테고리의 다른 글
[Firebase] CloudFunctions Promise.all() 로 최적화 (0) | 2025.05.12 |
---|---|
[Firebase]CloudFunctions 콜드 스타드 와 메가 함수 (0) | 2025.05.11 |
[Firebase]Cloud Functions 의 캐싱 전략 (0) | 2025.05.10 |
[Firebase]Firebase Cloud Function 로컬 디버깅 (0) | 2025.05.01 |