Firebase

[Firebase]Cloud Functions 의 캐싱 전략

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

Cloud Functions의 캐싱전략은 크게 2가지로 나뉘게 됩니다.

1. 메모리 캐싱

2. 외부 자원 사용

 

모두 다른 서버리스 환경에서도 동일하게 적용할 수 있는 방법 입니다.

 

1. 메모리 캐싱

1번은 static 변수에 저장해서 인스턴스가 살아 있는 동안 static 변수를 유지하는 전략 입니다.

메가 함수 전략과도 잘 맞는 방법이지요.

사용자가 많고 함수가 꾸준히 호출되는 서비스에도 적합한 방법입니다.

사용법은 간단합니다.

Cloud Function 함수 외부에 변수를 넣게 되면 static 상태가 되고 이는 warm 상태일 동안 변수가 유지됩니다.

let cachedData: any = null;

export const getConfig = onRequest(async (req, res) => {
  if (cachedData) {
    return res.send({ source: "memory", data: cachedData });
  }

  const fresh = await getConfigFromFirestore();
  cachedData = fresh;
  return res.send({ source: "fresh", data: fresh });
});

별거 없어보이지만 생각보다 상당히 유용한 방법 입니다.

json 파일을 static으로 보관한다던가 하는 방식으로 신뢰도는 낮지만 메모리에 있기 때문에 상당히 빠른 속도를 낼 수 있습니다.

다만 메모리를 사용하기 때문에 변수의 크기가 커지다보면 메모리 사용량이 늘어 날 수 있습니다.

 

2. 외부 자원 사용

간단하게 Redis 나 Firestore 기반 캐싱 하는 방법 입니다.

1번처럼 간단하지는 않지만 API 를 분석해서 아주 빈번하게 호출되는 내용은 아예 그 내용을 통으로 DB에 넣어 버리는 방법 입니다.

연산비용이 없이 DB비용만 들기 때문에 상당히 많은 연산이 필요하고 자주 호출 되는 부분에 적합한 방법 입니다.

이것을 DB 에서 가져와서 1번 메모리 캐싱하는 방법도 전략이 될 수 있겠죠.

메모리 캐싱은 인스턴스가 내려가면 없어지지만 Firestore는 계속 저장 되어 있기 때문에 신뢰도가 아주 높습니다.

반응형