Firebase CLI 참조

Firebase CLI(GitHub)는 Firebase 프로젝트를 관리, 조회, 배포할 수 있는 다양한 도구를 제공합니다.

Firebase CLI를 사용하기 전에 Firebase 프로젝트를 설정하세요.

CLI 설정 또는 업데이트

Firebase CLI를 설치

운영체제, 숙련도 또는 사용 사례에 맞는 방법을 사용하여 Firebase CLI를 설치할 수 있습니다. CLI 설치 방법에 관계없이 동일한 기능 및 firebase 명령어에 액세스할 수 있습니다.

Windows macOS Linux

Windows

다음 옵션 중 하나를 사용하여 Windows용 Firebase CLI를 설치할 수 있습니다.

옵션 설명 추천 대상
독립 실행형 바이너리 CLI용 독립 실행형 바이너리를 다운로드합니다. 그런 다음 실행 파일에 액세스하여 셸을 열고 firebase 명령어를 실행할 수 있습니다. 새 개발자

Node.js를 사용하지 않거나 익숙하지 않은 개발자
npm npm(노드 패키지 관리자)을 사용하여 CLI를 설치하고 디렉터리에 관계없이 사용 가능한 firebase 명령어를 사용 설정합니다. Node.js를 사용 중인 개발자

독립 실행형 바이너리

Firebase CLI용 바이너리를 다운로드하고 실행하려면 다음 단계를 따르세요.

  1. Windows용 Firebase CLI 바이너리를 다운로드합니다.

  2. 바이너리에 액세스하여 셸을 열고 firebase 명령어를 실행할 수 있습니다.

  3. 계속해서 로그인하여 CLI를 테스트합니다.

npm

npm(노드 패키지 관리자)을 사용하여 Firebase CLI를 설치하려면 다음 단계를 따르세요.

  1. nvm-windows(노드 버전 관리자)를 사용하여 Node.js를 설치합니다. Node.js를 설치하면 npm 명령어 도구가 자동으로 설치됩니다.

  2. 다음 명령어를 실행하여 npm을 통해 Firebase CLI를 설치합니다.

    npm install -g firebase-tools

    이 명령어는 디렉터리에 관계없이 사용할 수 있는 firebase 명령어를 사용 설정합니다.

  3. 계속해서 로그인하여 CLI를 테스트합니다.

macOS 또는 Linux

다음 옵션 중 하나를 사용하여 macOS 또는 Linux용 Firebase CLI를 설치할 수 있습니다.

옵션 설명 추천 대상
자동 설치 스크립트 운영체제를 자동으로 감지하고 최신 CLI 출시 버전을 다운로드한 다음 디렉터리에 관계없이 사용 가능한 firebase 명령어를 사용 설정하는 단일 명령어를 실행합니다. 새 개발자

Node.js를 사용하지 않거나 익숙하지 않은 개발자

CI/CD 환경에서 자동 배포
독립 실행형 바이너리 CLI용 독립 실행형 바이너리를 다운로드합니다. 그런 다음 워크플로에 맞게 바이너리를 구성하여 실행할 수 있습니다. CLI를 사용하는 완전히 맞춤설정 가능한 워크플로
npm npm(노드 패키지 관리자)을 사용하여 CLI를 설치하고 디렉터리에 관계없이 사용 가능한 firebase 명령어를 사용 설정합니다. Node.js를 사용 중인 개발자

자동 설치 스크립트

자동 설치 스크립트를 사용하여 Firebase CLI를 설치하려면 다음 단계를 따르세요.

  1. 다음 cURL 명령어를 실행합니다.

    curl -sL https://firebase.tools | bash

    이 스크립트는 운영체제를 자동으로 감지하고 최신 Firebase CLI 릴리스를 다운로드한 다음 디렉터리에 관계없이 사용 가능한 firebase 명령어를 사용 설정합니다.

  2. 계속해서 로그인하여 CLI를 테스트합니다.

자동 설치 스크립트에 대한 추가 예시와 세부정보는 firebase.tools의 스크립트 소스 코드를 참조하세요.

독립 실행형 바이너리

사용 중인 OS에 맞는 Firebase CLI용 바이너리를 다운로드하여 실행하려면 다음 단계를 따르세요.

  1. 사용 중인 OS에 맞는 Firebase CLI 바이너리를 다운로드합니다. macOS | Linux

  2. (선택사항) 전역적으로 사용할 수 있는 firebase 명령어를 설정합니다.

    1. chmod +x ./firebase_tools를 실행하여 바이너리를 실행 가능하게 만듭니다.
    2. 바이너리의 경로를 PATH에 추가합니다.
  3. 계속해서 로그인하여 CLI를 테스트합니다.

npm

npm(노드 패키지 관리자)을 사용하여 Firebase CLI를 설치하려면 다음 단계를 따르세요.

  1. nvm(노드 버전 관리자)을 사용하여 Node.js를 설치합니다.
    Node.js를 설치하면 npm 명령어 도구가 자동으로 설치됩니다.

  2. 다음 명령어를 실행하여 npm을 통해 Firebase CLI를 설치합니다.

    npm install -g firebase-tools

    이 명령어는 디렉터리에 관계없이 사용할 수 있는 firebase 명령어를 사용 설정합니다.

  3. 계속해서 로그인하여 CLI를 테스트합니다.

로그인하여 Firebase CLI 테스트

CLI를 설치한 후에는 인증해야 합니다. 그러면 Firebase 프로젝트를 나열하여 인증을 확인할 수 있습니다.

  1. 다음 명령어를 실행하여 Google 계정으로 Firebase에 로그인합니다.

    firebase login

    이 명령어는 로컬 머신을 Firebase에 연결하고 Firebase 프로젝트에 대한 액세스 권한을 부여합니다.

  2. Firebase 프로젝트를 나열하여 CLI가 올바르게 설치되었고 사용자 계정에 액세스하는지 테스트합니다. 다음 명령어를 실행합니다.

    firebase projects:list

    표시된 목록은 Firebase Console에 나열된 Firebase 프로젝트와 같아야 합니다.

최신 버전으로 CLI 업데이트

일반적으로 최신 Firebase CLI 버전을 사용하는 것이 좋습니다.

CLI 버전을 업데이트하는 방법은 운영체제와 CLI 설치 방법에 따라 달라집니다.

Windows

  • 독립 실행형 바이너리: 새 버전을 다운로드한 후 시스템에서 바꿉니다.
  • npm: npm install -g firebase-tools를 실행합니다.

macOS

  • 자동 설치 스크립트: curl -sL https://firebase.tools | upgrade=true bash를 실행합니다.
  • 독립 실행형 바이너리: 새 버전을 다운로드한 후 시스템에서 바꿉니다.
  • npm: npm install -g firebase-tools를 실행합니다.

Linux

  • 자동 설치 스크립트: curl -sL https://firebase.tools | upgrade=true bash를 실행합니다.
  • 독립 실행형 바이너리: 새 버전을 다운로드한 후 시스템에서 바꿉니다.
  • npm: npm install -g firebase-tools를 실행합니다.

CI 시스템과 함께 CLI 사용

Firebase CLI의 경우 인증을 완료하려면 브라우저가 필요하지만 CLI는 CI 및 기타 헤드리스 환경과 완벽하게 호환됩니다.

  1. 머신에서 브라우저를 사용하여 Firebase CLI를 설치합니다.

  2. 다음 명령어를 실행하여 로그인 프로세스를 시작합니다.

    firebase login:ci
  3. 제공된 URL을 방문하여 Google 계정으로 로그인합니다.

  4. 갱신 토큰을 출력합니다. 현재 CLI 세션은 영향을 받지 않습니다.

  5. 출력된 토큰을 안전하면서도 액세스 가능한 방식으로 CI 시스템에 저장합니다.

  6. firebase 명령어를 실행할 때 이 토큰을 사용합니다. 다음과 같은 두 가지 옵션 중 하나를 사용할 수 있습니다.

    • 옵션 1: 토큰을 FIREBASE_TOKEN 환경 변수로 저장합니다. 시스템에서 자동으로 토큰을 사용합니다.

    • 옵션 2: CI 시스템에서 모든 firebase 명령어에 --token TOKEN 플래그를 지정하여 실행합니다.
      토큰의 로드 우선순위는 플래그, 환경 변수, 원하는 Firebase 프로젝트입니다.

Firebase 프로젝트 초기화

Firebase 프로젝트에 배포와 같이 CLI를 사용하여 수행되는 다수의 일반적인 작업에는 프로젝트 디렉터리가 필요합니다. 프로젝트 디렉터리는 firebase init 명령어를 사용하여 설정합니다. 프로젝트 디렉터리는 일반적으로 소스 관리 루트와 동일한 디렉터리이며 firebase init를 실행한 후에는 디렉터리에 firebase.json 구성 파일이 포함됩니다.

새로운 Firebase 프로젝트를 초기화하려면 앱 디렉터리 내에서 다음 명령어를 실행합니다.

firebase init

firebase init 명령어는 프로젝트 디렉터리 및 일부 Firebase 제품을 설정하는 과정을 안내합니다. 프로젝트 초기화 중 Firebase CLI에 다음 태스크를 완료하라는 메시지가 표시됩니다.

  • Firebase 프로젝트에서 설정할 Firebase 제품을 선택합니다.

    그러면 선택한 제품의 특정 파일에 대한 구성을 설정하라는 메시지가 표시됩니다. 이러한 구성에 대한 자세한 내용은 특정 제품의 문서(예: Hosting)를 참조하세요. 나중에 언제든지 firebase init를 실행하여 더 많은 Firebase 제품을 설정할 수 있습니다.

  • 기본 Firebase 프로젝트를 설정합니다.

    이 단계에서는 프로젝트 관련 명령어(예: firebase deploy)가 적합한 Firebase 프로젝트에 대해 실행되도록 현재 프로젝트 디렉터리를 Firebase 프로젝트와 연결합니다.

    또한 동일한 프로젝트 디렉터리를 여러 Firebase 프로젝트(예: 스테이징 프로젝트와 프로덕션 프로젝트)와 연결할 수도 있습니다.

초기화가 끝나면 Firebase는 로컬 앱 디렉터리의 루트에 다음 두 파일을 자동으로 생성합니다.

  • 프로젝트 구성이 나열되어 있는 firebase.json 구성 파일

  • 프로젝트 별칭을 저장하는 .firebaserc 파일

firebase.json 파일

firebase init 명령어는 프로젝트 디렉터리의 루트에 firebase.json 구성 파일을 생성합니다.

애셋을 Firebase CLI로 배포하려면 Firebase 프로젝트에 배포되는 프로젝트 디렉터리의 파일 및 설정을 지정하는 firebase.json 파일이 필요합니다. 프로젝트 디렉터리 또는 Firebase Console에서 일부 설정을 정의할 수 있으므로 잠재적인 배포 충돌이 해결되었는지 확인하세요.

대부분의 Firebase Hosting 옵션firebase.json 파일에서 직접 구성할 수 있습니다. 하지만 Firebase CLI로 배포할 수 있는 다른 Firebase 서비스의 경우 firebase init 명령어는 해당 서비스의 설정을 정의할 수 있는 특정 파일(예: Cloud Functionsindex.js 파일)을 만듭니다. firebase.json 파일에 배포 전 또는 배포 후 후크를 설정할 수도 있습니다.

다음은 초기화 중 Firebase Hosting, Cloud Firestore, Cloud Functions for Firebase(TypeScript 소스 및 린트 옵션 선택됨)를 선택한 경우 기본 설정이 포함된 예시용 firebase.json 파일입니다.

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "firestore": {
      "rules": "firestore.rules",
      "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

기본적으로 firebase.json이 사용되지만 --config PATH 플래그를 전달하여 대체 구성 파일을 지정할 수 있습니다.

여러 Cloud Firestore 데이터베이스 구성

firebase init을 실행하면 firebase.json 파일에 위에 표시된 것처럼 프로젝트의 기본 데이터베이스에 해당하는 단일 firestore 키가 포함됩니다.

프로젝트에 여러 개의 Cloud Firestore 데이터베이스가 포함된 경우 firebase.json 파일을 수정하여 각 데이터베이스와 서로 다른 Cloud Firestore Security Rules 및 데이터베이스 색인 소스 파일을 연결합니다. 각 데이터베이스에 대해 하나의 항목이 있는 JSON 배열로 파일을 수정합니다.

      "firestore": [
        {
          "database": "(default)",
          "rules": "firestore.default.rules",
          "indexes": "firestore.default.indexes.json"
        },
        {
          "database": "ecommerce",
          "rules": "firestore.ecommerce.rules",
          "indexes": "firestore.ecommerce.indexes.json"
        }
      ],

배포 시 무시할 Cloud Functions 파일

함수 배포 시 CLI가 무시할 functions 디렉터리의 파일 목록을 자동으로 지정합니다. 이렇게 하면 배포의 데이터 크기를 늘릴 수 있는 여분의 백엔드 파일에 대한 배포를 방지합니다.

JSON 형식으로 표시되며 기본적으로 무시되는 파일 목록은 다음과 같습니다.

"ignore": [
  ".git",
  ".runtimeconfig.json",
  "firebase-debug.log",
  "firebase-debug.*.log",
  "node_modules"
]

firebase.jsonignore의 자체 커스텀 값을 추가하는 경우 위에 표시된 파일 목록을 유지하거나 누락된 경우 추가해야 합니다.

프로젝트 별칭 관리

동일한 프로젝트 디렉터리에 여러 Firebase 프로젝트를 연결할 수 있습니다. 예를 들어 스테이징 및 프로덕션 용도로 Firebase 프로젝트를 하나씩 사용해야 할 수 있습니다. 여러 프로젝트 환경을 사용하면 프로덕션에 배포하기 전 변경사항을 확인할 수 있습니다. firebase use 명령어를 사용하면 별칭을 전환하거나 새 별칭을 만들 수 있습니다.

프로젝트 별칭 추가

프로젝트 초기화 중 Firebase 프로젝트를 선택하면 프로젝트의 별칭이 자동으로 default로 지정됩니다. 하지만 프로젝트 관련 명령어가 다른 Firebase 프로젝트를 대상으로 실행되면서 동일한 프로젝트 디렉터리를 사용하도록 하려면 프로젝트 디렉터리 내에서 다음 명령어를 실행합니다.

firebase use --add

이 명령어는 또 다른 Firebase 프로젝트를 선택하고 해당 프로젝트를 별칭으로 할당하도록 안내합니다. 별칭 할당은 프로젝트 디렉터리 안의 .firebaserc 파일에 기록됩니다.

프로젝트 별칭 사용

할당된 Firebase 프로젝트 별칭을 사용하려면 프로젝트 디렉터리 내에서 다음 명령어를 실행합니다.

명령어 설명
firebase use 프로젝트 디렉터리에 대해 현재 정의된 별칭 목록 표시
firebase use \
PROJECT_ID|ALIAS
지정된 Firebase 프로젝트를 대상으로 실행할 모든 명령어를 전송합니다.
CLI에서 이 프로젝트를 현재 '활성 프로젝트'로 사용합니다.
firebase use --clear 활성 프로젝트를 지웁니다.

다른 CLI 명령어를 실행하기 전에 firebase use PROJECT_ID|ALIAS를 실행하여 새 활성 프로젝트를 설정합니다.

firebase use \
--unalias PROJECT_ALIAS
프로젝트 디렉터리에서 별칭을 삭제합니다.

CLI 명령어에 --project 플래그를 전달하면 현재 활성 프로젝트로 사용 중인 프로젝트를 재정의할 수 있습니다. 예를 들어 staging 별칭을 할당한 Firebase 프로젝트를 대상으로 실행할 CLI를 설정할 수 있습니다. prod 별칭을 할당한 Firebase 프로젝트를 대상으로 단일 명령어를 실행하려면 firebase deploy --project=prod 등의 명령어를 실행하면 됩니다.

소스 관리 및 프로젝트 별칭

일반적으로 팀에서 프로젝트 별칭을 공유할 수 있도록 .firebaserc 파일을 소스 제어에 체크인해야 합니다. 하지만 오픈소스 프로젝트 또는 시작용 템플릿에서는 일반적으로 .firebaserc 파일을 체크인하지 않습니다.

자신만 사용하는 개발 프로젝트가 있는 경우 각 명령어에 --project 플래그를 전달하거나 Firebase 프로젝트에 별칭을 할당하지 않고 firebase use PROJECT_ID를 실행할 수 있습니다.

Firebase 프로젝트를 로컬로 제공 및 테스트

프로덕션에 배포하기 전 로컬에서 호스팅된 URL에서 Firebase 프로젝트를 보고 테스트할 수 있습니다. 특정 기능만 테스트하려면 firebase serve 명령어에서 플래그에 쉼표로 구분된 목록을 사용할 수 있습니다.

다음 두 작업 중 하나를 수행하려면 로컬 프로젝트 디렉터리의 루트에서 다음 명령어를 실행합니다.

  • Firebase 호스팅 앱의 정적 콘텐츠를 봅니다.
  • Cloud Functions를 사용하여 Firebase Hosting용 동적 콘텐츠를 생성하고 프로덕션(배포된) HTTP 함수를 사용하여 로컬 URL에서 Hosting을 에뮬레이션합니다.
firebase serve --only hosting

로컬 HTTP 함수를 사용하여 프로젝트 에뮬레이션

로컬 HTTP 함수를 사용하여 프로젝트를 에뮬레이션하려면 프로젝트 디렉터리에서 다음 명령어 중 하나를 실행합니다.

  • 로컬 URL에서 테스트하기 위해 HTTP 함수 및 호스팅을 에뮬레이션하려면 다음 명령어를 사용합니다.

    firebase serve
    firebase serve --only functions,hosting // uses a flag
  • HTTP 함수만 에뮬레이션하려면 다음 명령어를 사용합니다.

    firebase serve --only functions

다른 로컬 기기에서 테스트

기본적으로 firebase servelocalhost 요청에만 응답합니다. 즉, 컴퓨터의 웹브라우저에서는 호스팅된 콘텐츠에 액세스할 수 있지만 네트워크의 다른 기기에서는 액세스할 수 없습니다. 다른 로컬 기기에서 테스트하려면 다음과 같이 --host 플래그를 사용하세요.

firebase serve --host 0.0.0.0  // accepts requests to any host

Firebase 프로젝트에 배포

Firebase CLI는 다음을 포함하여 Firebase 프로젝트에 대한 코드 및 애셋 배포를 관리합니다.

  • Firebase Hosting 사이트의 새 버전
  • 새로운, 업데이트된 또는 기존의 Cloud Functions for Firebase
  • Firebase Data Connect용 새로운, 업데이트된 스키마 및 커넥터
  • Firebase Realtime Database 규칙
  • Cloud Storage for Firebase 규칙
  • Cloud Firestore 규칙
  • Cloud Firestore 색인

Firebase 프로젝트에 배포하려면 프로젝트 디렉터리에서 다음 명령어를 실행합니다.

firebase deploy

선택적으로 각 배포에 주석을 추가할 수도 있습니다. 프로젝트의 Firebase Hosting 페이지에 다른 배포 정보와 함께 표시됩니다. 예를 들면 다음과 같습니다.

firebase deploy -m "Deploying the best new feature ever."

firebase deploy 명령어를 사용할 경우 다음 사항에 유의하세요.

  • 프로젝트 디렉터리에서 리소스를 배포하려면 프로젝트 디렉터리에 firebase.json 파일이 있어야 합니다. 이 파일은 firebase init 명령어로 자동 생성됩니다.

  • 기본적으로 firebase deploy 명령어를 실행하면 프로젝트 디렉터리에 있는 모든 배포 가능한 리소스의 출시 버전이 생성됩니다. 특정 Firebase 서비스 또는 기능을 배포하려면 부분 배포를 사용합니다.

보안 규칙의 배포 충돌

Firebase Realtime Database, Cloud Storage for Firebase, Cloud Firestore의 경우 로컬 프로젝트 디렉터리 또는 Firebase Console에서 보안 규칙을 정의할 수 있습니다.

배포 충돌을 방지하기 위한 또 다른 옵션은 부분 배포를 사용하고 Firebase Console에서만 규칙을 정의하는 것입니다.

배포 할당량

매우 드물긴 하지만 Firebase 배포 작업의 속도나 양을 제한하는 할당량을 초과하는 경우가 생길 수 있습니다. 예를 들어 매우 많은 수의 함수를 배포할 때 HTTP 429 Quota 오류 메시지가 표시될 수 있습니다. 이 문제를 해결하려면 부분 배포를 사용해 보세요.

배포 롤백

원하는 출시 버전으로 롤백 작업을 선택하여 프로젝트의 Firebase Hosting 페이지에서 Firebase Hosting 배포를 롤백할 수 있습니다.

현재는 Firebase Realtime Database, Cloud Storage for Firebase, Cloud Firestore에 대한 보안 규칙 릴리스를 롤백할 수 없습니다.

특정 Firebase 서비스 배포

특정 Firebase 서비스 또는 기능만 배포하려면 firebase deploy 명령어에서 플래그에 쉼표로 구분된 목록을 사용할 수 있습니다. 예를 들어 다음 명령어는 Firebase Hosting 콘텐츠 및 Cloud Storage 보안 규칙을 배포합니다.

firebase deploy --only hosting,storage

다음 표에서는 부분 배포에 사용 가능한 서비스 및 기능을 보여줍니다. 플래그 이름은 firebase.json 구성 파일의 키에 해당합니다.

플래그 구문 배포된 서비스 또는 기능
--only hosting Firebase Hosting 콘텐츠
--only database 규칙 Firebase Realtime Database
--only dataconnect Firebase Data Connect 스키마 및 커넥터
--only storage 규칙 Cloud Storage for Firebase
--only firestore 구성된 모든 데이터베이스의 Cloud Firestore 규칙 색인
--only functions Cloud Functions for Firebase(이 플래그의 특정 버전 가능)

특정 함수 배포

함수를 배포할 때 특정 함수를 대상으로 지정할 수 있습니다. 예를 들면 다음과 같습니다.

firebase deploy --only functions:function1
firebase deploy --only functions:function1,functions:function2

또 다른 옵션은 /functions/index.js 파일에서 내보내기 그룹으로 함수를 그룹화하는 것입니다. 그룹화 함수를 사용하면 단일 명령어를 통해 여러 함수를 배포할 수 있습니다.

예를 들어 다음 함수를 작성하여 groupAgroupB를 정의할 수 있습니다.

var functions = require('firebase-functions/v1');

exports.groupA = {
  function1: functions.https.onRequest(...),
  function2: functions.database.ref('\path').onWrite(...)
}
exports.groupB = require('./groupB');

이 예시에서 별도의 functions/groupB.js 파일에는 groupB의 함수를 명확히 정의하는 추가 함수가 포함되어 있습니다. 예를 들면 다음과 같습니다.

var functions = require('firebase-functions/v1');

exports.function3 = functions.storage.object().onChange(...);
exports.function4 = functions.analytics.event('in_app_purchase').onLog(...);

이 예시에서는 프로젝트 디렉터리에서 다음 명령어를 실행하여 모든 groupA 함수를 배포할 수 있습니다.

firebase deploy --only functions:groupA

또는 다음 명령어를 실행하여 그룹 내에서 특정 함수를 타겟팅할 수 있습니다.

firebase deploy --only functions:groupA.function1,groupB.function4

함수 삭제

Firebase CLI는 이전에 배포된 함수를 삭제할 수 있도록 다음 명령어와 옵션을 지원합니다.

  • 모든 리전에서 지정된 이름과 일치하는 모든 함수를 삭제합니다.

    firebase functions:delete FUNCTION-1_NAME

  • 기본이 아닌 리전에서 실행 중인 지정된 함수를 삭제합니다.

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • 2개 이상의 함수를 삭제합니다.

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • 지정된 함수 그룹을 삭제합니다.

    firebase functions:delete GROUP_NAME

  • 확인 프롬프트를 우회합니다.

    firebase functions:delete FUNCTION-1_NAME --force

배포 전 및 배포 후 스크립트 태스크 설정

셸 스크립트를 firebase deploy 명령어에 연결하여 배포 전 또는 배포 후 태스크를 수행할 수 있습니다. 예를 들어 배포 전 스크립트로 TypeScript 코드를 JavaScript로 변환 컴파일하고, 배포 후 후크를 통해 새 사이트 콘텐츠를 Firebase Hosting에 배포함을 관리자에게 알릴 수 있습니다.

배포 전 또는 배포 후 후크를 설정하려면 bash 스크립트를 firebase.json 구성 파일에 추가합니다. firebase.json 파일에 짧은 스크립트를 직접 정의하거나 프로젝트 디렉터리에 있는 다른 파일을 참조할 수 있습니다.

예를 들어 다음 스크립트는 Firebase Hosting에 배포를 성공한 후 Slack 메시지를 전송하는 배포 후 태스크의 firebase.json 표현식입니다.

"hosting": {
  // ...

  "postdeploy": "./messageSlack.sh 'Just deployed to Firebase Hosting'",
  "public": "public"
}

messageSlack.sh 스크립트 파일은 프로젝트 디렉터리에 있고 다음과 같이 표시됩니다.

curl -X POST -H 'Content-type: application/json' --data '{"text":"$1"}'
     \https://SLACK_WEBHOOK_URL

배포할 수 있는 애셋 모두에 predeploypostdeploy 후크를 설정할 수 있습니다. firebase deploy를 실행하면 firebase.json 파일에 정의된 모든 배포 전 및 배포 후 태스크가 트리거됩니다. 특정 Firebase 서비스와 연관된 태스크만 실행하려면 부분 배포 명령어를 사용합니다.

predeploypostdeploy 후크 모두 스크립트의 표준 출력 및 오류 스트림을 터미널에 출력합니다. 오류 사례는 다음을 참조하세요.

  • 배포 전 후크가 예상대로 완료되지 않으면 배포가 취소됩니다.
  • 어떠한 이유로 인해 배포가 실패하면 배포 후 후크가 트리거되지 않습니다.

환경 변수

배포 전 및 배포 후 후크에서 실행 중인 스크립트에서 다음 환경 변수를 사용할 수 있습니다.

  • $GCLOUD_PROJECT: 활성 프로젝트의 프로젝트 ID
  • $PROJECT_DIR: firebase.json 파일을 포함하는 루트 디렉터리
  • $RESOURCE_DIR: (hostingfunctions 스크립트에만 해당) 배포할 Hosting 또는 Cloud Functions 리소스가 포함된 디렉터리의 위치

여러 Realtime Database 인스턴스 관리

Firebase 프로젝트에는 여러 Firebase Realtime Database 인스턴스를 포함할 수 있습니다. 기본적으로 CLI 명령어는 기본 데이터베이스 인스턴스와 상호작용합니다.

하지만 --instance DATABASE_NAME 플래그를 사용하여 기본이 아닌 데이터베이스 인스턴스와 상호작용할 수 있습니다. 다음 명령어는 --instance 플래그를 지원합니다.

  • firebase database:get
  • firebase database:profile
  • firebase database:push
  • firebase database:remove
  • firebase database:set
  • firebase database:update

명령어 참조

CLI 관리 명령어

명령어 설명
help CLI 또는 특정 명령어에 대한 도움말 정보를 표시합니다.
init 현재 디렉터리에 새 Firebase 프로젝트를 연결하고 설정합니다. 이 명령어는 현재 디렉터리에 firebase.json 구성 파일을 만듭니다.
login Firebase 계정에 대해 CLI를 인증합니다. 웹브라우저에 액세스할 수 있어야 합니다.
localhost 액세스를 허용하지 않는 원격 환경에서 CLI에 로그인하려면 --no-localhost 플래그를 사용합니다.
login:ci 비대화형 환경에서 사용할 인증 토큰을 생성합니다.
logout Firebase 계정에서 CLI를 로그아웃 처리합니다.
open 브라우저를 열어 관련 프로젝트 리소스를 엽니다.
projects:list 액세스 권한이 있는 모든 Firebase 프로젝트를 나열합니다.
use CLI의 활성 Firebase 프로젝트를 설정합니다.
프로젝트 별칭을 관리합니다.

프로젝트 관리 명령어

명령어 설명
Firebase 프로젝트 관리
projects:addfirebase Firebase 리소스를 기존 Google Cloud 프로젝트에 추가합니다.
projects:create Google Cloud 프로젝트를 만든 다음 Firebase 리소스를 새 프로젝트에 추가합니다.
projects:list 액세스 권한이 있는 모든 Firebase 프로젝트를 나열합니다.
Firebase 앱 관리(iOS, Android, 웹)
apps:create 활성 프로젝트에 새 Firebase 앱을 만듭니다.
apps:list 활성 프로젝트에 등록된 Firebase 앱을 나열합니다.
apps:sdkconfig Firebase 앱의 Google 서비스 구성을 출력합니다.
setup:web 지원이 중단되었습니다. 대신 apps:sdkconfig를 사용하고 web을 플랫폼 인수로 지정합니다.
Firebase 웹 앱의 Google 서비스 구성을 출력합니다.
SHA 인증서 해시 관리(Android만 해당)
apps:android:sha:create \
FIREBASE_APP_ID SHA_HASH
지정된 SHA 인증서 해시를 지정된 Firebase Android 앱에 추가합니다.
apps:android:sha:delete \
FIREBASE_APP_ID SHA_HASH
지정된 Firebase Android 앱에서 지정된 SHA 인증서 해시를 삭제합니다.
apps:android:sha:list \
FIREBASE_APP_ID
지정된 Firebase Android 앱의 SHA 인증서 해시를 나열합니다.

배포 및 로컬 개발

Firebase Hosting 사이트를 배포하고 상호작용하는 명령어입니다.

명령어 설명
deploy 프로젝트 디렉터리에서 활성 프로젝트로 코드와 애셋을 배포합니다. Firebase Hosting의 경우 firebase.json 구성 파일이 필요합니다.
serve Firebase Hosting 구성을 사용하여 로컬 웹 서버를 시작합니다. Firebase Hosting의 경우 firebase.json 구성 파일이 필요합니다.

App Distribution 명령어

명령어 설명
appdistribution:distribute \
--app FIREBASE_APP_ID
테스터가 빌드를 사용할 수 있도록 합니다.
appdistribution:testers:add 프로젝트에 테스터를 추가합니다.
appdistribution:testers:remove 프로젝트에서 테스터를 삭제합니다.

App Hosting 명령어

명령어 설명
apphosting:backends:create \
--project PROJECT_ID \
--location REGION --app APP_ID
App Hosting 백엔드를 구성하는 단일 코드베이스에 연결된 관리 리소스 모음을 만듭니다. 원하는 경우 Firebase 앱 ID로 기존 Firebase 웹 앱을 지정합니다.
apphosting:backends:get \
BACKEND_ID \
--project PROJECT_ID \
--location REGION
백엔드의 공개 URL을 비롯한 특정 세부정보를 가져옵니다.
apphosting:backends:list \
--project PROJECT_ID
프로젝트와 연결된 모든 활성 백엔드 목록을 가져옵니다.
firebase apphosting:backends:delete \
BACKEND_ID \
--project PROJECT_ID \
--location REGION
프로젝트에서 백엔드를 삭제합니다.
firebase apphosting:config:export \
--project PROJECT_ID \
--secrets ENVIRONMENT_NAME
앱 에뮬레이션에 사용할 보안 비밀을 내보냅니다.
기본값은 apphosting.yaml에 저장된 보안 비밀이거나 --secrets를 사용하여 상응하는 apphosting.ENVIRONMENT_NAME.yaml 파일이 있는 환경을 지정합니다.
firebase apphosting:rollouts:create \
BACKEND_ID \
--git_branch BRANCH_NAME \
--git_commit COMMIT_ID
수동으로 트리거된 출시를 만듭니다.
원하는 경우 브랜치 또는 특정 커밋의 최신 커밋을 지정합니다. 옵션이 제공되지 않으면 브랜치 목록에서 선택하라는 메시지가 표시됩니다.
apphosting:secrets:set KEY --project PROJECT_ID \
--location REGION \
--data-file DATA_FILE_PATH
Secret Manager에 보안 비밀 자료를 저장합니다.
필요한 경우 보안 비밀 데이터를 읽을 파일 경로를 제공합니다. _로 설정하여 표준 입력에서 보안 비밀 데이터를 읽습니다.
apphosting:secrets:grantaccess KEY BACKEND_ID \
--project PROJECT_ID \
--location REGION
빌드 또는 런타임에 App Hosting에서 액세스할 수 있도록 백엔드 서비스 계정에 제공된 보안 비밀에 대한 액세스 권한을 부여합니다.
apphosting:secrets:describe KEY \
--project PROJECT_ID
보안 비밀 및 버전에 대한 메타데이터를 가져옵니다.
firebase apphosting:secrets:access \
KEY[@version] \
--project PROJECT_ID
보안 비밀 및 버전이 제공되면 보안 비밀 값에 액세스합니다. 기본값은 최신 버전에 액세스하는 것입니다.

Authentication(사용자 관리) 명령어

명령어 설명
auth:export 활성 프로젝트의 사용자 계정을 JSON 또는 CSV 파일로 내보냅니다. 자세한 내용은 auth:import 및 auth:export 페이지를 참조하세요.
auth:import 사용자 계정을 JSON 또는 CSV 파일에서 활성 프로젝트로 가져옵니다. 자세한 내용은 auth:import 및 auth:export 페이지를 참조하세요.

Cloud Firestore 명령어

명령어 설명
firestore:locations

Cloud Firestore 데이터베이스의 사용 가능한 위치를 나열합니다.

firestore:databases:create DATABASE_ID

Firebase 프로젝트에서 네이티브 모드로 데이터베이스 인스턴스를 만듭니다.

이 명령어는 다음 플래그를 사용합니다.

  • --location <region name>: 데이터베이스의 배포 위치를 지정합니다. firebase firestore:locations를 실행하여 사용 가능한 위치를 나열할 수 있습니다. 필수 항목입니다.
  • --delete-protection <deleteProtectionState>: 지정된 데이터베이스의 삭제를 허용하거나 방지합니다. 유효한 값은 ENABLED 또는 DISABLED입니다. 기본값은 DISABLED입니다.
  • --point-in-time-recovery <PITRState>: PITR(point-in-time recovery) 사용 설정 여부를 설정합니다. 유효한 값은 ENABLED 또는 DISABLED입니다. 기본값은 DISABLED입니다. 선택사항입니다.
firestore:databases:list

Firebase 프로젝트에 데이터베이스를 나열합니다.

firestore:databases:get DATABASE_ID

Firebase 프로젝트에서 지정된 데이터베이스의 데이터베이스 구성을 가져옵니다.

firestore:databases:update DATABASE_ID

Firebase 프로젝트에서 지정된 데이터베이스의 데이터베이스 구성을 업데이트합니다.

플래그가 하나 이상 필요합니다. 이 명령어는 다음 플래그를 사용합니다.

  • --delete-protection <deleteProtectionState>: 지정된 데이터베이스의 삭제를 허용하거나 방지합니다. 유효한 값은 ENABLED 또는 DISABLED입니다. 기본값은 DISABLED입니다.
  • --point-in-time-recovery <PITRState>: PITR(point-in-time recovery) 사용 설정 여부를 설정합니다. 유효한 값은 ENABLED 또는 DISABLED입니다. 기본값은 DISABLED입니다. 선택사항입니다.
firestore:databases:delete DATABASE_ID

Firebase 프로젝트에서 데이터베이스를 삭제합니다.

firestore:indexes

Firebase 프로젝트에 데이터베이스의 색인을 나열합니다.

이 명령어는 다음 플래그를 사용합니다.

  • --database DATABASE_ID: 색인을 나열할 데이터베이스의 이름을 지정합니다. 제공하지 않으면 기본 데이터베이스의 색인이 표시됩니다.
firestore:delete

활성 프로젝트의 데이터베이스에서 문서를 삭제합니다. CLI를 사용하면 컬렉션의 모든 문서를 재귀적으로 삭제할 수 있습니다.

CLI로 Cloud Firestore 데이터를 삭제하면 읽기 및 삭제 비용이 발생합니다. 자세한 내용은 Cloud Firestore 청구 이해를 참조하세요.

이 명령어는 다음 플래그를 사용합니다.

  • --database DATABASE_ID: 문서가 삭제되는 데이터베이스의 이름을 지정합니다. 지정하지 않으면 문서가 기본 데이터베이스에서 삭제됩니다. 선택사항입니다.

Cloud Functions for Firebase 명령어

명령어 설명
functions:config:clone 다른 프로젝트의 환경을 활성 Firebase 프로젝트로 클론합니다.
functions:config:get 활성 프로젝트의 Cloud Functions 기존 구성 값을 검색합니다.
functions:config:set 활성 프로젝트의 Cloud Functions 런타임 구성 값을 저장합니다.
functions:config:unset 활성 프로젝트의 런타임 구성에서 값을 삭제합니다.
functions:log 배포된 Cloud Functions에서 로그를 읽습니다.

자세한 내용은 환경 구성 문서를 참조하세요.

Crashlytics 명령어

명령어 설명
crashlytics:mappingfile:generateid \
--resource-file=PATH/TO/ANDROID_RESOURCE.XML
지정된 Android 리소스(XML) 파일에 고유한 매핑 파일 ID를 생성합니다.
crashlytics:mappingfile:upload \
--app=FIREBASE_APP_ID \
--resource-file=PATH/TO/ANDROID_RESOURCE.XML \
PATH/TO/MAPPING_FILE.TXT
이 앱의 Proguarddhk 호환되는 매핑(TXT) 파일을 업로드하고 지정된 Android 리소스(XML) 파일에 선언된 매핑 파일 ID와 연결합니다.
crashlytics:symbols:upload \
--app=FIREBASE_APP_ID \
PATH/TO/SYMBOLS
Android에서 네이티브 라이브러리 비정상 종료에 대한 Crashlytics 호환 기호 파일을 생성하고 Firebase 서버에 업로드합니다.

Data Connect 명령어

이러한 명령어와 사용 사례는 Data Connect CLI 참조 가이드에 자세히 설명되어 있습니다.

명령어 설명
dataconnect:services:list Firebase 프로젝트에 배포된 모든 Data Connect 서비스를 나열합니다.
dataconnect:sql:diff \
SERVICE_ID
지정된 서비스의 경우 로컬 Data Connect 스키마와 Cloud SQL 데이터베이스 스키마 간의 차이점을 표시합니다.
dataconnect:sql:migrate \
--force \
SERVICE_ID
로컬 Data Connect 스키마와 일치하도록 Cloud SQL 데이터베이스의 스키마를 마이그레이션합니다.
dataconnect:sql:grant\
--role=ROLE \
--email=EMAIL \
SERVICE_ID
지정된 사용자 또는 서비스 계정 이메일에 SQL 역할을 부여합니다.
--role 플래그의 경우 부여할 SQL 역할은 owner, writer, reader 중 하나입니다.
--email 플래그의 경우 역할을 부여할 사용자 또는 서비스 계정의 이메일 주소를 입력합니다.
dataconnect:sdk:generate Data Connect 커넥터에 대한 입력된 SDK를 생성합니다.

Extensions 명령어

명령어 설명
ext Firebase Extensions 명령어를 사용하는 방법에 대한 정보를 표시합니다.
활성 프로젝트에 설치된 확장 프로그램 인스턴스를 나열합니다.
ext:configure \
EXTENSION_INSTANCE_ID
확장 프로그램 인스턴스의 매개변수 값을 확장 프로그램 매니페스트에서 다시 구성합니다.
ext:info \
PUBLISHER_ID/EXTENSION_ID
확장 프로그램에 대한 자세한 정보를 출력합니다.
ext:install \
PUBLISHER_ID/EXTENSION_ID
확장 프로그램의 새 인스턴스를 확장 프로그램 매니페스트에 추가합니다.
ext:list Firebase 프로젝트에 설치된 모든 확장 프로그램 인스턴스를 나열합니다.
각 확장 프로그램의 인스턴스 ID를 출력합니다.
ext:uninstall \
EXTENSION_INSTANCE_ID
확장 프로그램 매니페스트에서 확장 프로그램 인스턴스를 삭제합니다.
ext:update \
EXTENSION_INSTANCE_ID
확장 프로그램 인스턴스를 확장 프로그램 매니페스트의 최신 버전으로 업데이트합니다.
ext:export 설치된 모든 확장 프로그램 인스턴스를 프로젝트에서 확장 프로그램 매니페스트로 내보냅니다.

Extensions 게시자 명령어

명령어 설명
ext:dev:init 현재 디렉터리에서 새 확장 프로그램의 스켈레톤 코드베이스를 초기화합니다.
ext:dev:list \
PUBLISHER_ID
게시자가 업로드한 모든 확장 프로그램의 목록을 출력합니다.
ext:dev:register Firebase 프로젝트를 확장 프로그램 게시자 프로젝트로 등록합니다.
ext:dev:deprecate \
PUBLISHER_ID/EXTENSION_ID \
VERSION_PREDICATE
버전 조건자와 일치하는 확장 프로그램 버전을 지원 중단합니다.
버전 조건자는 단일 버전(예: 1.0.0)이거나 다양한 버전(예: >1.0.0)일 수 있습니다.
버전 조건자가 제공되지 않은 경우 이 확장 프로그램의 모든 버전이 지원 중단됩니다.
ext:dev:undeprecate \
PUBLISHER_ID/EXTENSION_ID \
VERSION_PREDICATE
버전 조건자와 일치하는 확장 프로그램 버전의 지원 중단을 해제합니다.
버전 조건자는 단일 버전(예: 1.0.0)이거나 다양한 버전(예: >1.0.0)일 수 있습니다.
버전 조건자가 제공되지 않은 경우 이 확장 프로그램의 모든 버전의 지원 중단이 해제됩니다.
ext:dev:upload \
PUBLISHER_ID/EXTENSION_ID
새 버전의 확장 프로그램을 업로드합니다.
ext:dev:usage \
PUBLISHER_ID
게시자가 업로드한 확장 프로그램의 설치 수 및 사용량 측정항목을 표시합니다.

Hosting 명령어

명령어 설명
hosting:disable

활성 Firebase 프로젝트에서 Firebase Hosting 트래픽 제공을 중지합니다.

이 명령어를 실행하면 프로젝트의 Hosting URL에서 '사이트를 찾을 수 없습니다' 메시지가 표시됩니다.

Hosting 사이트 관리
firebase hosting:sites:create \
SITE_ID

지정된 SITE_ID를 사용하여 활성 Firebase 프로젝트에서 새 Hosting 사이트를 만듭니다.

(선택사항) --app FIREBASE_APP_ID 플래그를 전달하여 새 사이트와 연결할 기존 Firebase 웹 앱을 지정합니다.

firebase hosting:sites:delete \
SITE_ID

지정된 Hosting 사이트를 삭제합니다.

사이트를 삭제하기 전에 CLI에 확인 메시지가 표시됩니다.

(선택사항) -f 또는 --force 플래그를 전달하여 확인 메시지를 건너뜁니다.

firebase hosting:sites:get \
SITE_ID

지정된 Hosting 사이트에 대한 정보를 가져옵니다.

firebase hosting:sites:list

활성 Firebase 프로젝트의 모든 Hosting 사이트를 나열합니다.

미리보기 채널 관리
firebase hosting:channel:create \
CHANNEL_ID

지정된 CHANNEL_ID를 사용하여 기본 Hosting 사이트에 새 미리보기 채널을 만듭니다.

이 명령어는 채널에 배포를 수행하지 않습니다.

firebase hosting:channel:delete \
CHANNEL_ID

지정된 미리보기 채널을 삭제합니다.

사이트의 실시간 채널은 삭제할 수 없습니다.

firebase hosting:channel:deploy \
CHANNEL_ID

Hosting 콘텐츠 및 구성을 지정된 미리보기 채널에 배포합니다.

미리보기 채널이 아직 없으면 이 명령어가 채널에 배포를 수행하기 전에 먼저 기본 Hosting 사이트에서 채널을 만듭니다.

firebase hosting:channel:list 기본 Hosting 사이트에 있는 모든 채널('실시간' 채널 포함)을 나열합니다.
firebase hosting:channel:open \
CHANNEL_ID
지정된 채널의 URL로 브라우저를 열거나 브라우저로 열기를 사용할 수 없으면 URL을 반환합니다.
버전 클론
firebase hosting:clone \
SOURCE_SITE_ID:SOURCE_CHANNEL_ID \
TARGET_SITE_ID:TARGET_CHANNEL_ID

지정된 '소스' 채널에서 가장 최근에 배포된 버전을 지정된 '대상' 채널로 클론합니다.

이 명령어는 또한 지정된 '대상' 채널로의 배포도 수행합니다. '대상' 채널이 아직 없으면 이 명령어가 채널에 배포를 수행하기 전에 먼저 '대상' Hosting 사이트에서 새로운 미리보기 채널을 만듭니다.

firebase hosting:clone \
SOURCE_SITE_ID:@VERSION_ID \
TARGET_SITE_ID:TARGET_CHANNEL_ID

지정된 버전을 지정된 '대상' 채널로 클론합니다.

이 명령어는 또한 지정된 '대상' 채널로의 배포도 수행합니다. '대상' 채널이 아직 없으면 이 명령어가 채널에 배포를 수행하기 전에 먼저 '대상' Hosting 사이트에서 새로운 미리보기 채널을 만듭니다.

VERSION_IDFirebase Console의 Hosting 대시보드에서 찾을 수 있습니다.

Realtime Database 명령어

Firebase Console에서나 일반 firebase init 워크플로 또는 특정 firebase init database 흐름을 사용하여 초기 기본 Realtime Database 인스턴스를 생성할 수 있습니다.

인스턴스가 생성되면 여러 개의 Realtime Database 인스턴스 관리에 설명된 대로 인스턴스를 관리할 수 있습니다.

명령어 설명
database:get 활성 프로젝트의 데이터베이스에서 데이터를 가져오고 JSON으로 표시합니다. 색인이 생성된 데이터 쿼리를 지원합니다.
database:instances:create 지정된 인스턴스 이름으로 데이터베이스 인스턴스를 만듭니다. 지정된 리전에서 데이터베이스를 만들기 위한 --location 옵션을 사용합니다. 이 옵션에 사용할 리전 이름은 프로젝트의 위치 선택을 참조하세요. 현재 프로젝트에 데이터베이스 인스턴스가 없으면 firebase init 흐름을 실행하여 인스턴스를 생성하라는 메시지가 표시됩니다.
database:instances:list 이 프로젝트의 모든 데이터베이스 인스턴스를 나열합니다. 지정된 리전의 데이터베이스를 나열하기 위한 --location 옵션을 사용합니다. 이 옵션에 사용할 리전 이름은 프로젝트의 위치 선택을 참조하세요.
database:profile 활성 프로젝트의 데이터베이스에 대한 작업 프로필을 작성합니다. 자세한 내용은 Realtime Database 작업 유형을 참조하세요.
database:push 활성 프로젝트의 데이터베이스에서 지정된 위치의 목록에 새 데이터를 내보냅니다. 파일, STDIN 또는 명령줄 인수에서 입력을 취합니다.
database:remove 활성 프로젝트의 데이터베이스에서 지정된 위치에 있는 모든 데이터를 삭제합니다.
database:set 활성 프로젝트의 데이터베이스에서 지정된 위치의 모든 데이터를 바꿉니다. 파일, STDIN 또는 명령줄 인수에서 입력을 취합니다.
database:update 활성 프로젝트의 데이터베이스에서 지정된 위치에 부분 업데이트를 수행합니다. 파일, STDIN 또는 명령줄 인수에서 입력을 취합니다.

Remote Config 명령어

명령어 설명
remoteconfig:versions:list \
--limit NUMBER_OF_VERSIONS
템플릿의 가장 최신 버전 10개를 나열합니다. 0을 지정하여 기존 버전을 모두 반환하거나 필요에 따라 --limit 옵션을 전달하여 반환되는 버전 수를 제한합니다.
remoteconfig:get \
--v, version_number VERSION_NUMBER
--o, output FILENAME
버전별로 템플릿을 가져오고(기본값은 최신 버전으로 설정), 매개변수 그룹, 매개변수, 조건 이름, 버전을 테이블로 출력합니다. 선택적으로 -o, FILENAME을 사용하여 지정된 파일에 출력을 작성할 수 있습니다.
remoteconfig:rollback \
--v, version_number VERSION_NUMBER
--force
Remote Config 템플릿을 지정된 이전 버전 번호로 롤백하거나 기본적으로 직전 버전(현재 버전 -1)으로 되돌립니다. --force가 전달되지 않으면 롤백을 진행하기 전에 Y/N 메시지를 표시합니다.