원격 구성 템플릿 및 버전 관리


Remote Config 템플릿은 JSON 형식의 집합입니다. Firebase 프로젝트용으로 만든 매개변수 및 조건을 지정합니다. 나 앱이 값을 가져오는 클라이언트 템플릿을 만들 수 있습니다. server 템플릿: 서버 클라이언트가 값을 가져올 수 있습니다.

이 섹션에서는 클라이언트 템플릿을 설명합니다. 서버별 템플릿에 대해 알아보려면 서버 템플릿을 클릭합니다.

매개변수조건 탭.

또한 Remote Config REST API 및 Admin SDK 또는 Firebase CLI를 사용하여 클라이언트 템플릿일 수 있습니다

다음은 서버 템플릿 파일의 예시입니다.

{
  "parameters": {
    "preamble_prompt": {
      "defaultValue": {
        "value": "You are a helpful assistant who knows everything there is to know about Firebase! "
      },
      "description": "Add this prompt to the user's prompt",
      "valueType": "STRING"
    },
    "model_name": {
      "defaultValue": {
        "value": "gemini-pro-test"
      },
      "valueType": "STRING"
    },
    "generation_config": {
      "defaultValue": {
        "value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
      },
      "valueType": "JSON"
    },
  },
  "version": {
    "versionNumber": "19",
    "isLegacy": true
  }
}

Firebase 콘솔에서 다음과 같은 버전 관리 작업을 수행할 수 있습니다.

템플릿 유형당 전체 기간 저장된 버전은 총 300개로 제한되며(클라이언트 템플릿 300개 및 서버 템플릿 300개) 삭제된 템플릿의 저장된 버전 번호가 포함됩니다. 프로젝트의 전체 기간 동안 템플릿 유형당 300개가 넘는 템플릿 버전을 게시하면 가장 초기 버전이 삭제되고 해당 유형의 최대 300개의 버전이 유지됩니다.

매개변수를 업데이트할 때마다 Remote Config는 새 버전의 Remote Config 템플릿을 만들고 이전 템플릿을 다음 이름으로 저장 필요에 따라 검색하거나 롤백할 수 있는 버전을 제공합니다. 버전 번호 Remote Config에 의해 저장된 초깃값부터 순차적으로 증가합니다. 모든 템플릿에는 표시된 대로 관련 메타데이터가 포함된 version 필드가 포함되어 있습니다. 지정할 수 있습니다

필요에 따라 템플릿 Remote Config개를 변경 내역 페이지 Remote Config 콘솔

템플릿 버전 Remote Config개 관리

이 섹션에서는 Remote Config의 버전을 관리하는 방법을 설명합니다. 있습니다.

Remote Config 템플릿의 저장된 버전 모두 나열

목록에서 Remote Config 템플릿의 저장된 모든 버전 방법은 다음과 같습니다.

Firebase 콘솔

매개변수 탭의 오른쪽 상단에 표시된 '시계' 아이콘을 선택합니다. 그러면 변경 내역 페이지가 열리고 저장된 모든 템플릿 버전이 오른쪽에 있는 목록 메뉴에 나열됩니다.

저장된 각 버전에 표시되는 세부정보에는 변경사항이 Console, REST API, 롤백 중 어디에서 시작되었는지 또는 템플릿 강제 저장으로 변경사항이 추가로 적용되었는지 여부에 관한 정보가 포함되어 있습니다.

Firebase CLI

firebase remoteconfig:versions:list

반환되는 버전 수를 제한하려면 --limit 옵션을 사용합니다. 모든 버전을 가져오려면 '0'을 전달합니다.

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

자바

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions

템플릿 목록에는 업데이트 시간, 업데이트 사용자, 업데이트 방법 등 저장된 모든 버전의 메타데이터가 포함됩니다. 버전 요소의 예시는 다음과 같습니다.

```json
{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]
}
```

Remote Config 템플릿의 특정 버전 검색

특정 저장된 특정 데이터나 버전의 Remote Config 템플릿입니다. 저장된 템플릿을 검색하려면 다음을 수행하세요.

Firebase 콘솔

기본적으로 변경 내역 탭의 세부정보 창에는 현재 활성 템플릿이 표시됩니다. 목록에서 다른 버전에 대한 세부정보를 보려면 오른쪽 메뉴에서 해당 버전을 선택하세요.

선택되지 않은 버전의 컨텍스트 메뉴로 마우스를 이동하고 선택한 버전과 비교를 선택하여 현재 선택한 버전 및 다른 저장된 버전 간의 차이를 자세히 확인할 수 있습니다.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

필요에 따라 -o, FILENAME을 사용하여 지정된 파일에 출력을 작성할 수 있습니다.

Node.js

인수 없이 getTemplate()을 전달하여 템플릿의 최신 버전을 검색하거나 getTemplateAtVersion()을 사용하여 특정 버전을 검색할 수 있습니다.

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

자바

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

URL 매개변수 ?version_numberGET 작업에만 유효하며 업데이트의 버전 번호를 지정하기 위해 사용할 수 없습니다. ?version_number 매개변수를 사용하지 않는 유사한 get 요청은 현재 활성 상태인 템플릿을 검색합니다.

저장된 특정 버전의 Remote Config 템플릿으로 롤백

저장된 버전의 템플릿으로 롤백할 수 있습니다. 템플릿을 롤백하려면 다음을 수행하세요.

Firebase 콘솔

롤백이 가능한 이전 템플릿 버전의 경우 변경 내역 페이지 오른쪽 상단에 해당 버전으로 롤백하는 옵션 버튼이 표시됩니다. 해당 버전으로 롤백하고 모든 앱과 사용자에 대해 해당 값을 즉시 사용하려는 경우에만 이 버튼을 클릭하고 확인합니다.

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

자바

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

REST

저장된 Remote Config 템플릿으로 롤백하려면 다음과 같이 HTTP POST를 실행하세요. 커스텀 메서드 :rollback 및 요청 본문에 있는 특정 버전 있습니다. 예를 들면 다음과 같습니다.

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

응답에는 현재 저장된 활성 템플릿의 콘텐츠와 새 버전 메타데이터가 포함됩니다.

이 롤백 작업은 실제로 새 번호가 지정된 버전을 만듭니다. 예를 들어 버전 10에서 버전 6으로 롤백하면 버전 6의 새 사본이 실제로 만들어지는데 이 사본은 버전 번호가 11이라는 점만 버전 6의 원본과 다릅니다. 원본인 버전 6이 아직 만료되지 않았다고 가정하면 버전 6은 그대로 저장되고 버전 11이 활성 템플릿이 됩니다.

Remote Config 템플릿 삭제

Firebase 콘솔에서 Remote Config 템플릿을 삭제할 수 있습니다. 받는사람 Remote Config 템플릿 삭제:

1. 출처: Remote Config 매개변수 페이지, 클릭 변경 내역.
  1. 삭제할 템플릿으로 전환하고 더보기를 클릭한 후 삭제를 선택합니다.

  2. 삭제를 확인하는 메시지가 표시되면 삭제를 클릭합니다.

템플릿 Remote Config개 다운로드 및 게시

Remote Config 템플릿을 다운로드 및 게시하여 소스 제어 및 빌드 시스템, 구성 업데이트 자동화, 매개변수 유지 여러 프로젝트에서 동기화된 값을 사용할 수 있습니다

현재 활성화된 Remote Config 템플릿을 다운로드할 수 있습니다. </ph> (Firebase 콘솔에서 확인) 그런 다음 내보낸 JSON 파일을 업데이트하고 같은 프로젝트에 게시하거나 새 프로젝트 또는 기존 프로젝트에 게시할 수 있습니다.

개발, 테스트, 스테이징, 프로덕션 환경과 같이 소프트웨어 개발 수명 주기의 여러 단계를 나타내는 여러 프로젝트가 있다고 가정해 보겠습니다. 이 경우 스테이징 프로젝트에서 템플릿을 다운로드하고 프로덕션 프로젝트에 개시하여 완전 테스트 템플릿을 스테이징 환경에서 프로덕션 환경으로 승격할 수 있습니다.

이 방법을 사용하여 한 프로젝트에서 다른 프로젝트로 구성을 마이그레이션하거나 기존 프로젝트의 매개변수와 값으로 새 프로젝트를 채울 수도 있습니다.

A/B Testing 실험에서 특히 변수로 생성된 매개변수 및 매개변수 값은 내보낸 템플릿에 포함되지 않습니다.

Remote Config 템플릿을 내보내고 가져오려면 다음 단계를 따르세요.

  1. 현재 Remote Config 구성 템플릿을 다운로드합니다.
  2. Remote Config 템플릿의 유효성을 검사합니다.
  3. Remote Config 템플릿을 게시합니다.

현재 원격 구성 템플릿 다운로드

다음을 사용하여 활성 Remote Config 템플릿을 JSON 형식:

Firebase 콘솔

  1. Remote Config 매개변수 또는 조건 탭에서 메뉴를 열고 현재 구성 파일 다운로드를 선택합니다.
  2. 메시지가 표시되면 구성 파일 다운로드를 클릭하고 파일을 저장할 위치를 선택한 후 저장을 클릭합니다.

Firebase CLI

firebase remoteconfig:get -o filename

Node.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

자바

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

REST

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

이 명령어는 JSON 페이로드를 파일 하나에 출력하고, 헤더(ETag 포함)를 별도의 headers 파일에 출력합니다.

원격 구성 템플릿 유효성 검사

템플릿 업데이트를 게시하기 전에 다음을 사용하여 유효성을 검사할 수 있습니다. Firebase Admin SDK 또는 REST API. 템플릿은 Firebase CLI 또는 Firebase 콘솔에서 게시할 수 있습니다.

유효성 검사 프로세스는 매개변수 및 조건의 중복 키, 잘못된 조건 이름 또는 존재하지 않는 조건, 형식이 잘못된 ETag 등의 오류를 확인합니다. 예를 들어 허용 개수 2,000개를 초과하는 키가 포함된 요청은 Param count too large 오류 메시지를 반환합니다.

Node.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

자바

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

REST

게시 요청에 URL 매개변수 ?validate_only=true를 추가하여 템플릿 업데이트의 유효성을 검사합니다.

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig?validate_only=true -d @filename

템플릿의 유효성 검사에 성공하면 curl 명령어가 제출한 JSON 템플릿을 반환하고 저장된 headers 파일에 HTTP/2 상태 200과 접미사 -0가 있는 업데이트된 ETag가 표시됩니다. 템플릿이 검증되지 않은 경우 JSON 응답에 유효성 검사 오류가 표시되고 headers 파일에는 200이 아닌 응답이 포함됩니다(ETag 없음).

Remote Config 템플릿 게시

템플릿을 다운로드하고, 필요에 따라 JSON 콘텐츠를 변경하고, 검증한 후 프로젝트에 게시할 수 있습니다.

템플릿을 게시하면 기존 구성 템플릿 전체가 업데이트된 파일로 대체되고 템플릿 버전이 1씩 증가합니다. 전체 구성이 교체되므로 JSON 파일에서 매개변수를 삭제하고 게시하면 매개변수가 서버에서 삭제되고 더 이상 클라이언트가 사용할 수 없게 됩니다.

게시 후에는 매개변수와 값의 변경사항을 앱과 사용자에게 즉시 적용할 수 있습니다. 필요한 경우 이전 버전으로 롤백할 수 있습니다.

다음 명령어를 사용하여 템플릿을 게시합니다.

Firebase 콘솔

  1. Remote Config 매개변수 또는 조건 탭에서 메뉴를 엽니다. 파일에서 게시를 선택합니다.
  2. 메시지가 표시되면 찾아보기를 클릭하고 Remote Config 파일을 선택한 다음 선택을 클릭합니다.
  3. 파일은 유효성 검사를 거치게 되며, 성공하면 게시를 클릭하여 앱과 사용자가 즉시 구성을 사용할 수 있도록 할 수 있습니다.

Node.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

자바

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

REST

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

curl 명령어의 경우 파일 이름 앞에 '@' 문자를 사용하여 콘텐츠를 지정할 수 있습니다.

맞춤설정 및 조건 Remote Config개가 포함된 항목 템플릿을 다운로드할 수 있으므로 다음 사항을 다른 프로젝트에 게시할 때 다음과 같은 제한사항이 적용됩니다.

  • 프로젝트 간에는 맞춤설정을 가져올 수 없습니다.

    예를 들어 프로젝트에 맞춤설정을 사용 설정하고 템플릿을 다운로드하여 수정하는 경우 동일한 프로젝트에 게시할 수 있지만, 맞춤설정을 템플릿에서 삭제하지 않으면 다른 프로젝트에 게시할 수 없습니다.

  • 프로젝트 간에 조건을 가져올 수 있지만 게시하기 전에 대상 프로젝트에 있는 특정 조건부 값(예: 앱 ID 또는 잠재고객)이 있어야 합니다.

    예를 들어 조건을 사용하는 Remote Config 매개변수가 있는 경우 iOS의 플랫폼 값을 지정하는 경우 템플릿은 플랫폼 값이 모든 프로젝트에서 동일하기 때문입니다. 그러나 대상 프로젝트에 없는 특정 앱 ID 또는 사용자 잠재고객을 사용하는 조건이 포함되어 있으면 검증이 실패합니다.

  • 게시하려는 템플릿에 Google Analytics, Analytics이(가) 타겟에 사용 설정되어야 합니다. 살펴보겠습니다 <ph type="x-smartling-placeholder"></ph>

Remote Config 템플릿 기본값 다운로드

앱이 항상 인터넷에 연결되어 있지 않을 수도 있기 때문에 모든 Remote Config의 클라이언트 측 앱 기본값을 구성해야 합니다. 매개변수입니다. 또한 주기적으로 앱 클라이언트 기본값을 동기화해야 합니다. 값과 Remote Config 백엔드 매개변수 값이 각각 추후 변경될 수 있습니다

이 섹션 마지막의 플랫폼별 링크에 설명된 대로 다음을 수행할 수 있습니다. 앱에서 이러한 기본값을 수동으로 설정하거나 모든 매개변수의 키-값 쌍 포함된 파일 다운로드 활성 Remote Config 템플릿에 기본값이 있습니다. 그런 다음 이 파일을 프로젝트에 포함하고 이러한 값을 가져오도록 앱을 구성할 수 있습니다.

이러한 파일은 Android 앱의 경우 XML 형식, iOS 앱의 경우 속성 목록(plist), 웹 앱의 경우 JSON 형식으로 다운로드할 수 있습니다.

신규 앱 출시 전에 정기적으로 Remote Config 기본값을 다운로드하여 앱과 Remote Config 백엔드가 동기화 상태를 유지하는 것이 좋습니다.

템플릿 기본값이 포함된 파일을 다운로드하는 방법은 다음과 같습니다.

REST

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

다운로드할 파일 형식에 따라 XML, PLIST, JSONformat 값으로 사용합니다.

Firebase 콘솔

  1. 매개변수 탭에서 메뉴를 열고 기본값 다운로드를 선택합니다.
  2. 메시지가 표시되면 다운로드할 파일 형식에 해당하는 라디오 버튼을 클릭한 다음 파일 다운로드를 클릭합니다.

Remote Config 기본값을 보려면 다음을 참조하세요.