서버 환경에서 원격 구성 사용

이제 Firebase 원격 구성은 Firebase Admin Node.js SDK v12.1.0 이상을 사용하여 서버 측 구성을 지원합니다. 이 새로운 기능을 통해 원격 구성을 사용하여 서버 측 애플리케이션의 동작 및 구성을 동적으로 관리할 수 있습니다. 여기에는 Cloud Functions와 같은 서버리스 구현이 포함됩니다.

원격 구성 템플릿에서 파생된 클라이언트별 구성을 가져오는 Firebase 클라이언트 SDK와 달리, 서버 측 원격 구성 SDK는 Firebase에서 전체 원격 구성 템플릿을 다운로드합니다. 그러면 서버에서는 각 수신 요청으로 템플릿을 평가하고 자체 로직을 사용하여 매우 짧은 지연 시간으로 맞춤화된 응답을 제공합니다.

서버 측 원격 구성을 사용하면 다음을 수행할 수 있습니다.

  • 서버에서 실행 중이거나 서버를 통해 액세스되는 애플리케이션의 구성 파라미터를 정의하여 AI 모델 파라미터, 프롬프트, 기타 통합을 원격으로 구성하는 등의 사용 사례를 허용하여 API 키의 보안을 유지합니다.
  • 환경 변화 또는 LLM 파라미터 및 모델 엔드포인트 업데이트와 같은 다른 애플리케이션 변경에 대응하여 파라미터를 동적으로 조정합니다.
  • 서버에서 호출하는 API를 원격으로 업데이트하여 비용을 제어합니다.
  • 서버에 액세스하는 클라이언트를 위해 커스텀 구성을 즉시 생성합니다.
  • 파라미터 값을 수신한 클라이언트를 기록하고 이를 사용 권한 확인 시스템의 일부인 Cloud Functions에서 사용합니다.

Cloud Run, Cloud Functions 또는 자체 호스팅 서버 환경에 서버 측 원격 구성을 배포할 수 있습니다.

시작하기 전에

서버에 Firebase Admin SDK 추가의 안내를 따라 Firebase 프로젝트를 만들고, 서비스 계정을 설정하고, Firebase Admin Node.js SDK를 서버에 추가합니다.

1단계: Firebase Admin Node.js SDK 초기화 및 API 요청 승인

파라미터 없이 Admin SDK를 초기화하면 SDK가 Google 애플리케이션 기본 사용자 인증 정보를 사용하고 GOOGLE_APPLICATION_CREDENTIALS 환경 변수에서 옵션을 읽습니다. 예를 들어 SDK를 초기화하고 원격 구성을 추가하려면 다음을 실행하세요.

import { initializeApp } from "firebase-admin/app";
import { getRemoteConfig } from "firebase-admin/remote-config";

// Initialize Firebase
const firebaseApp = initializeApp();

2단계: 서버 애플리케이션의 기본 파라미터 값 식별

원격 구성으로 동적으로 업데이트할 앱의 변수를 식별합니다. 그런 다음 애플리케이션에서 기본적으로 설정해야 하는 변수와 해당 변수의 기본값을 고려해야 합니다. 이렇게 하면 원격 구성 백엔드 서버에 대한 연결이 중단되더라도 애플리케이션이 성공적으로 실행됩니다.

예를 들어 생성형 AI 함수를 관리하는 서버 애플리케이션을 작성하는 경우 다음과 같이 기본 모델 이름, 프롬프트 프리앰블, 생성형 AI 구성을 설정할 수 있습니다.

매개변수 이름 설명 유형 기본값
model_name 모델 API 이름 문자열 gemini-1.5-pro
preamble_prompt 사용자 쿼리 앞에 추가할 프롬프트 문자열 I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!
generation_config 모델에 전송할 파라미터 JSON {"stopSequences": ["I hope this helps"], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}

3단계: 서버 애플리케이션 구성

원격 구성에서 사용할 파라미터를 결정하면 기본값을 설정하도록 애플리케이션을 구성하고 서버별 원격 구성 템플릿을 가져와 해당 값을 사용합니다. 다음 단계에서는 Node.js 애플리케이션을 구성하는 방법을 설명합니다.

  1. 템플릿에 액세스하고 이를 로드합니다.

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = rc.initServerTemplate();
    
    // Load Remote Config
    await template.load();
    

    Cloud Functions 내에서 Node.js를 사용하는 경우 비동기 getServerTemplate을 사용하여 한 번에 템플릿을 가져오고 로드할 수 있습니다.

    // Initialize server-side Remote Config
    const rc = getRemoteConfig(firebaseApp);
    const template = await rc.getServerTemplate();
    
  2. 원격 구성 백엔드 서버에 대한 연결이 중단되더라도 애플리케이션이 성공적으로 실행되도록 하기 위해 각 파라미터의 기본값을 앱에 추가합니다. 이렇게 하려면 initServerTemplate 또는 getServerTemplate 템플릿 함수에 defaultConfig를 추가합니다.

    const template = rc.initServerTemplate({
      defaultConfig: {
        model_name: "gemini-pro",
        generation_config: '{"stopSequences": [], "temperature": 0.7, "maxOutputTokens": 512, "topP": 0.1, "topK": 20}',
        preamble_prompt: "I'm a developer who wants to learn about Firebase and you are a helpful assistant who knows everything there is to know about Firebase!"
      },
    });
    
    // Load Remote Config
    await template.load();
    
  3. 템플릿이 로드된 후 template.evaluate()를 사용하여 파라미터와 템플릿의 값을 가져옵니다.

    // Add template parameters to config
    const config = template.evaluate();
    
  4. 선택적으로 원격 구성 템플릿에서 비율 조건을 설정하는 경우 template.evaluate() 함수에서 조건을 평가하는 데 사용할 randomizationId를 정의하고 제공합니다.

    예를 들어 Firebase 설치 IDrandomizationId 또는 사용자 ID로 설정하여 서버에 연결하는 각 사용자가 적절한 무작위 그룹에 추가되도록 합니다. 다음은 기본적인 예시이지만 사용자가 비율 조건 그룹의 멤버십에 따라 원격 구성에서 일관된 값을 제공받을 수 있도록 다른 클라이언트 요청에 대해 다른 randomizationIds를 생성하도록 서버를 구성할 수 있습니다.

    비율 조건에 대한 자세한 내용은 임의 비율의 사용자를 참조하세요.

    // Set the randomizationId
    const randomizationId = "2ac93c28-c459-4760-963d-a3974ec26c04"
    
    // Add template parameters to `config`. Evaluates the
    // template and returns the parameter value assigned to
    // the group assigned to the {randomizationId}.
    const config = template.evaluate({
      randomizationId
    });
    
  5. 다음으로 구성 상수에서 필요한 파라미터 값을 추출합니다. getters를 사용하여 원격 구성의 값을 예상 형식으로 변환합니다. 지원되는 유형은 다음과 같습니다.

    • 불리언: getBoolean
    • 객체: getValue
    • 번호: getNumber
    • 문자열: getString

    예를 들어 서버에서 Vertex AI를 구현하고 모델 및 모델 파라미터를 변경하려는 경우 model_namegenerationConfig의 파라미터를 구성하는 것이 좋습니다. 다음은 원격 구성 값에 액세스하는 방법의 예입니다.

    // Replace defaults with values from Remote Config.
    const generationConfig =
      JSON.parse(
        config.getString('generation_config'));
    
    const is_ai_enabled = config.getBool('is_ai_enabled');
    
    const model = config.getString('model_name');
    
    // Generates a prompt comprised of the Remote Config
    // parameter and prepends it to the user prompt
    const prompt = `${config.getString('preamble_prompt')} ${req.query.prompt}`;
    
  6. 서버리스 환경과 달리 서버가 장기 실행되는 경우 원격 구성 서버의 최신 템플릿에서 주기적으로 가져오도록 setInterval을 사용하여 템플릿을 주기적으로 새로고침합니다.

4단계: 원격 구성에서 서버별 파라미터 값 설정

다음으로 서버 원격 구성 템플릿을 만들고 앱에서 사용할 파라미터 및 값을 구성합니다.

서버별 원격 구성 템플릿을 만들려면 다음 단계를 따르세요.

  1. Firebase Console 원격 구성 파라미터 페이지를 열고 클라이언트/서버 선택기에서 서버를 선택합니다.
  2. 앱에서 정의한 파라미터와 동일한 이름 및 데이터 유형으로 원격 구성 파라미터를 정의하고 값을 제공합니다. 이러한 값은 템플릿을 가져오고 평가하고 해당 값을 변수에 할당할 때 서버 애플리케이션 구성에서 설정한 defaultConfig를 재정의합니다.
  3. 필요에 따라 비율 조건을 설정하여 인스턴스의 무작위 샘플에 값을 영구적으로 적용합니다. 비율 조건에 대한 자세한 내용은 임의 비율의 사용자를 참조하세요.
  4. 파라미터 추가가 완료되면 변경사항 게시를 클릭합니다.
  5. 변경사항을 검토하고 변경사항 게시를 다시 클릭합니다.

5단계: Cloud Functions 또는 Cloud Run으로 배포

서버 애플리케이션이 가볍고 이벤트 기반인 경우 Cloud Functions를 사용한 코드 배포를 고려해 보세요. 예를 들어 생성형 AI API(예: Google AI 또는 Vertex AI)로 구동되는 캐릭터 대화가 포함된 앱이 있다고 가정해 보겠습니다. 이 경우 앱이 호출하는 함수에서 LLM 서빙 로직 주문형으로 호스팅할 수 있습니다.

장기 실행 애플리케이션인 경우(예: 애셋이 있는 웹 앱) Cloud Run을 고려해 보세요. Cloud Run을 사용하여 서버 앱을 배포하려면 빠른 시작: Cloud Run에 Node.js 서비스 배포의 가이드를 따르세요.

Cloud Run 및 Cloud Functions의 최고의 사용 사례에 대한 자세한 내용은 Cloud Functions와 Cloud Run 비교: 용도를 참조하세요.