여러 사이트에서 프로젝트 리소스 공유

각 Firebase 프로젝트에 하나 이상의 Firebase Hosting 사이트를 설정할 수 있습니다. 사이트가 모두 같은 Firebase 프로젝트에 있으므로 모든 사이트에서 프로젝트의 다른 Firebase 리소스에 액세스할 수 있습니다.

  • 각 사이트에는 고유한 호스팅 구성이 있습니다.
  • 각 사이트는 고유한 콘텐츠 모음을 호스팅합니다.
  • 각 사이트는 연결된 도메인을 하나 이상 포함할 수 있습니다.

같은 Firebase 프로젝트 내에서 여러 Hosting 사이트를 설정하여 관련 사이트 및 앱 사이에 Firebase 리소스를 보다 쉽게 공유할 수 있습니다. 예를 들어 블로그, 관리 패널, 공개 앱을 동일한 Firebase 프로젝트에 개별 사이트로 설정한 경우 이러한 사이트 및 앱은 고유한 자체 도메인 또는 콘텐츠를 보유하면서도 모두 같은 Firebase Authentication 사용자 데이터베이스를 공유할 수 있습니다.

1단계: Firebase CLI 버전 업데이트

Firebase CLI를 최신 버전으로 업데이트하여 최신 Firebase Hosting 기능을 사용하세요.

2단계: 사이트 더 추가

다음 방법 중 하나를 사용하여 Firebase 프로젝트에 사이트를 추가합니다.

  • Firebase Console의 Hosting 페이지에 있는 워크플로를 사용합니다.

  • Firebase CLI 명령어를 사용합니다. firebase hosting:sites:create SITE_ID

  • Hosting REST API를 사용합니다. projects.sites.create

각 방법마다 사이트의 Firebase에서 프로비저닝된 기본 하위 도메인을 구성하는 데 사용되는 SITE_ID를 지정합니다.

  • SITE_ID.web.app
  • SITE_ID.firebaseapp.com

이러한 URL에는 SITE_ID가 사용되기 때문에 사이트 ID에는 다음과 같은 요구사항이 있습니다.

  • 유효한 호스트 이름 라벨이어야 합니다. 즉, ., _ 등을 포함할 수 없습니다.
  • 30자(영문 기준) 이하여야 합니다.
  • Firebase 내에서 전역적으로 고유해야 합니다.

필요에 따라 각 사이트에 커스텀 도메인을 추가하여 여러 URL에 같은 콘텐츠 및 구성을 제공할 수도 있습니다.

보조 사이트 삭제

다음 방법 중 하나를 사용하여 Firebase 프로젝트에서 원하지 않는 사이트를 삭제합니다.

  • Firebase Console의 Hosting 페이지에 있는 워크플로를 사용합니다.

  • Firebase CLI 명령어를 사용합니다. firebase hosting:sites:delete SITE_ID

  • Hosting REST API를 사용합니다. projects.sites.delete

Firebase 프로젝트 ID와 SITE_ID가 같은 기본 사이트는 삭제할 수 없습니다.

3단계: 사이트 배포 대상 설정

사이트가 여러 개 있고 Firebase CLI 배포 명령어를 실행하는 경우 CLI에는 각 사이트에 배포해야 하는 설정을 전달하는 방법이 필요합니다. 배포 대상을 사용하면 테스트 또는 사이트에 배포하기 위한 firebase.json 구성 파일Firebase CLI 명령어에서 TARGET_NAME으로 특정 사이트를 고유하게 식별할 수 있습니다.

배포 대상을 만들고 TARGET_NAMEHosting 사이트에 적용하려면 프로젝트 디렉터리의 루트에서 다음 CLI 명령어를 실행합니다.

firebase target:apply hosting TARGET_NAME RESOURCE_IDENTIFIER

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

  • 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

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

4단계: 각 사이트의 호스팅 구성 정의

firebase.json 파일에서 호스팅 구성을 정의할 때 사이트의 적용된 TARGET_NAME을 사용합니다.

  • 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
        }
      ]
    }
  • firebase.json 파일에 한 사이트의 구성만 정의되어 있으면 배열 형식을 사용할 필요가 없습니다.

    {
      "hosting": {
          "target": "blog",
          "public": "dist",
    
          // ...
    
          "rewrites": [...]
      }
    }

5단계: 로컬 테스트, 변경사항 미리보기, 사이트에 배포

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

명령어 설명
firebase emulators:start --only hosting 로컬로 호스팅된 URL에서 기본 Hosting 호스팅 사이트의 Hosting 콘텐츠 및 구성을 에뮬레이션합니다.
firebase emulators:start --only hosting:TARGET_NAME 로컬로 호스팅된 URL에서 지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성을 에뮬레이션합니다.
firebase hosting:channel:deploy \
CHANNEL_ID
미리보기 URL에서 기본 Hosting 사이트의 Hosting 콘텐츠 및 구성을 배포합니다.
firebase hosting:channel:deploy \
CHANNEL_ID --only TARGET_NAME
미리보기 URL에서 지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성을 배포합니다.
firebase deploy --only hosting firebase.json에 구성된 모든 Hosting 사이트의 라이브 채널에 Hosting 콘텐츠 및 구성을 배포합니다.
firebase deploy --only hosting:TARGET_NAME 지정된 Hosting 사이트의 실시간 채널에 Hosting 콘텐츠 및 구성을 배포합니다.
명령어 설명
(권장되지 않음, 대신 emulators:start 사용)
firebase serve --only hosting
로컬로 호스팅된 URL에서 기본 Hosting 사이트의 Hosting 콘텐츠 및 구성을 제공합니다.
(권장되지 않음, 대신 emulators:start 사용)
firebase serve --only hosting:TARGET_NAME
로컬로 호스팅된 URL에서 지정된 Hosting 사이트의 Hosting 콘텐츠 및 구성을 제공합니다.