배포 대상

배포 대상은 고유한 정적 애셋을 포함한 Hosting 사이트 또는 동일한 보안 규칙을 공유하는 Realtime Database 인스턴스 그룹과 같은 Firebase 프로젝트 내 Firebase 리소스의 닉네임 식별자(직접 정의)입니다.

Hosting 사이트, Cloud Storage 버킷 또는 Realtime Database 인스턴스가 여러 개인 경우에 배포 대상을 사용하면 유용합니다. 배포 대상을 활용하면 Firebase CLI는 프로젝트의 특정 Firebase 리소스 또는 리소스 그룹에 다음과 같은 설정을 배포할 수 있습니다.

  • Hosting 사이트의 호스팅 구성
  • Hosting 사이트 프로젝트 디렉터리의 정적 애셋
  • 여러 Realtime Database 인스턴스 또는 여러 Cloud Storage 버킷에서 공유하는 보안 규칙

배포 대상을 설정하려면 다음을 수행하세요.

  1. 대상 Firebase 리소스 또는 Firebase 리소스 그룹에 TARGET_NAME을 적용합니다.
  2. 각 리소스 또는 리소스 그룹의 설정을 구성할 경우 firebase.json 파일에서 연결된 TARGET_NAME을 참조합니다.

Firebase CLI 명령어(예: firebase deploy)를 실행하면 Firebase CLI가 각 TARGET_NAME을 연결된 Firebase 리소스와 페어링합니다. 그러면 CLI가 각 리소스의 설정을 Firebase 프로젝트에 전달합니다.

Firebase 리소스의 배포 대상 설정

Firebase CLI를 사용하여 TARGET_NAME(직접 정의하는 닉네임 식별자)을 Firebase 리소스 또는 Firebase 리소스 그룹에 적용합니다. Firebase는 다음에 대한 배포 대상을 지원합니다.

배포 대상 설정은 프로젝트 디렉터리의 .firebaserc 파일에 저장되므로 프로젝트당 배포 대상을 한 번만 설정하면 됩니다.

Hosting의 배포 대상 설정

배포 대상을 만들고 TARGET_NAMEHosting 사이트에 적용하려면 다음 CLI 명령어를 실행하세요.

firebase target:apply TYPE TARGET_NAME RESOURCE_IDENTIFIER

여기에서 매개변수는 다음과 같습니다.

  • TYPE - 관련 Firebase 리소스 유형

    • Firebase Hosting 사이트의 경우 hosting을 사용합니다.
  • TARGET_NAME - 배포할 Hosting 사이트의 고유한 이름

  • RESOURCE_IDENTIFIER - Firebase 프로젝트에 나열된 Hosting 사이트의 SITE_ID

예를 들어 Firebase 프로젝트에서 두 개의 사이트(myapp-blogmyapp-app)를 만든 경우 다음 명령어를 실행하여 각 사이트에 고유한 TARGET_NAME(blogapp)을 적용할 수 있습니다.

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

Cloud Storage 또는 Realtime Database의 배포 대상 설정

배포 대상을 만들고 TARGET_NAMECloud Storage 또는 Realtime Database 리소스 집합에 적용하려면 다음 CLI 명령어를 실행하세요.

firebase target:apply TYPE TARGET_NAME RESOURCE-1_IDENTIFIER RESOURCE-2_IDENTIFIER ...

여기에서 매개변수는 다음과 같습니다.

  • TYPE - 관련 Firebase 리소스 유형

    • Cloud Storage 버킷의 경우 storage를 사용합니다.
    • Realtime Database 인스턴스의 경우 database를 사용합니다.
  • TARGET_NAME - 보안 규칙을 공유하는 리소스 또는 리소스 그룹의 고유한 이름

  • RESOURCE_IDENTIFIER - 모두 동일한 보안 규칙을 공유하는 Firebase 프로젝트에 나열된 리소스 식별자(예: 스토리지 버킷 이름 또는 데이터베이스 인스턴스 ID)

예를 들어 다음 명령어를 실행하여 mainTARGET_NAME을 모두 같은 보안 규칙을 공유하는 세 리전별 Cloud Storage 버킷 그룹에 적용할 수 있습니다.

firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja

myproject.appspot.com은 기본 버킷의 식별자이고 myproject-eumyproject-ja는 Firebase 프로젝트에서 생성되는 두 개의 추가 버킷입니다.

배포 대상을 사용하도록 firebase.json 파일 구성

Firebase 리소스의 배포 대상을 설정한 후 firebase.json 구성 파일에서 적용된 각 TARGET_NAME을 참조합니다.

  1. Firebase 리소스 TYPE(hosting, storage, database)별로 구성 객체의 배열을 만듭니다.
  2. 배열에서 target(TARGET_NAME 사용)을 지정하고 연결된 Firebase 리소스 또는 리소스 그룹의 설정을 정의합니다.

Firebase 프로젝트에 Hosting 사이트 두 개와 Cloud Storage 세 개(동일한 보안 규칙 공유)가 있는 위 예시의 경우 firebase.json 파일은 다음과 같습니다.

{
  "hosting": [ {
      "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
      "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"

      // ...
    },
    {
      "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
      "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"

      // ...

      "rewrites": [...]  // You can define specific Hosting configurations for each site
    }
  ]
}

{
  "storage": [ {
      "target": "main",  // "main" is the applied TARGET_NAME for the group of Cloud Storage buckets
      "rules": "storage.main.rules"  // the file that contains the shared security rules
    }
  ]
}

리소스 구성이 여러 개 있으면 배포 대상을 여러 개 만들어 firebase.json 파일에서 각각 지정하면 됩니다. firebase deploy를 실행하면 연결된 모든 리소스가 함께 배포됩니다.

배포 대상 관리

배포 대상 설정은 프로젝트 디렉터리의 .firebaserc 파일에 저장됩니다. 프로젝트 디렉터리의 루트에서 다음 명령어를 실행하면 프로젝트의 배포 대상을 관리할 수 있습니다.

명령어 설명
firebase target 현재 프로젝트 디렉터리의 배포 대상을 나열합니다.
firebase target:remove \
TYPE RESOURCE_IDENTIFIER
할당된 대상에서 리소스를 삭제합니다.
firebase target:clear \
TYPE TARGET_NAME
지정된 대상에서 모든 리소스 또는 Hosting 사이트를 삭제합니다.

target:remove 명령어와 target:clear 명령어는 프로젝트 디렉터리에 있는 .firebaserc 파일에서 배포 대상 설정을 자동으로 업데이트합니다.

배포하기 전에 로컬에서 테스트

프로젝트 디렉터리의 루트에서 다음 명령어 중 하나를 실행합니다.

명령어 설명
firebase emulators:start 프로젝트 디렉터리에 구성된 모든 리소스를 에뮬레이션합니다.
firebase emulators:start \
--only hosting:TARGET_NAME
지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성만 에뮬레이션합니다.
firebase emulators:start \
--only storage:TARGET_NAME
지정된 Cloud Storage 대상의 규칙 파일만 에뮬레이션합니다.
firebase emulators:start \
--only database:TARGET_NAME
지정된 Realtime Database 대상의 규칙 파일만 에뮬레이션합니다.

Firebase Local Emulator Suite 구성 및 사용에 대해 자세히 알아보세요.

특정 Firebase 리소스 배포

프로젝트 디렉터리의 루트에서 다음 명령어 중 하나를 실행합니다.

명령어 설명
firebase deploy 프로젝트 디렉터리에서 배포 가능한 모든 리소스의 출시 버전을 만듭니다.
firebase deploy \
--only hosting:TARGET_NAME
지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성만 사이트의 실시간 채널에 배포합니다.
firebase hosting:channel:deploy CHANNEL_ID \
--only TARGET_NAME
지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성만 사이트의 미리보기 채널에 배포합니다.
firebase deploy \
--only storage:TARGET_NAME
지정된 Cloud Storage 대상의 규칙 파일만 배포합니다.
firebase deploy \
--only database:TARGET_NAME
지정된 Realtime Database 대상의 규칙 파일만 배포합니다.