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

이제 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 함수로 배포 또는 Cloud Run을 사용하여 배포

서버 애플리케이션이 경량형이고 이벤트 기반이라면 코드를 Cloud 함수로 배포하는 것이 좋습니다. 예를 들어 Google AI 및 Vertex AI와 같은 생성형 AI API로 구동되는 캐릭터 대화가 포함된 앱이 있다고 가정해 보겠습니다. 이 경우 앱이 주문형으로 호출하는 Cloud 함수에서 LLM 제공 로직을 호스팅할 수 있습니다. 시작하기: 첫 번째 함수 작성, 테스트, 배포에서 앱을 Cloud 함수로 배포하는 방법을 알아보세요.

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

Cloud Run 및 Cloud Functions의 가장 좋은 사용 사례에 대한 자세한 내용은 Cloud Functions와 Cloud Run: 함께 사용하는 경우를 참조하세요.