Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

Firebase Admin SDK를 서버에 추가

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Admin SDK는 권한 있는 환경에서 Firebase와 상호작용하여 다음과 같은 작업을 수행할 수 있게 해주는 서버 라이브러리 집합입니다.

  • 전체 관리자 권한으로 실시간 데이터베이스 데이터를 읽고 씁니다.
  • Firebase Cloud Messaging 서버 프로토콜에 대한 간단한 대체 접근 방식을 사용하여 프로그래밍 방식으로 Firebase Cloud Messaging 메시지를 보냅니다.
  • Firebase 인증 토큰을 생성하고 확인합니다.
  • Firebase 프로젝트와 연결된 Cloud Storage 버킷 및 Cloud Firestore 데이터베이스와 같은 Google Cloud 리소스에 액세스하세요.
  • 사용자 데이터를 조회하거나 인증을 위해 사용자의 이메일 주소를 변경하는 등의 작업을 수행하기 위해 간소화된 관리 콘솔을 직접 만드세요.

권한 있는 환경(예: 서버)에서 관리자 액세스가 아닌 최종 사용자 액세스(예: Node.js 데스크톱 또는 IoT 애플리케이션)를 위한 클라이언트로 Node.js SDK를 사용하는 데 관심이 있는 경우 대신 클라이언트 JavaScript SDK 설정 지침을 따라야 합니다.

다음은 각 언어에서 지원되는 Firebase 기능을 보여주는 기능 매트릭스입니다.

특징 Node.js 자바 파이썬 가다 씨#
맞춤형 토큰 발행
ID 토큰 확인
사용자 관리
사용자 지정 클레임으로 액세스 제어
새로 고침 토큰 취소
사용자 가져오기
세션 쿠키 관리
이메일 작업 링크 생성
SAML/OIDC 공급자 구성 관리
다중 테넌시 지원
실시간 데이터베이스 *
Firebase 클라우드 메시징
FCM 멀티캐스트
FCM 주제 구독 관리
클라우드 스토리지
클라우드 파이어스토어
프로젝트 관리
보안 규칙
ML 모델 관리
Firebase 원격 구성
Firebase 앱 체크
Firebase 확장 프로그램

이러한 용도의 Admin SDK 통합에 대해 자세히 알아보려면 해당하는 실시간 데이터베이스 , FCM , 인증 , 원격 구성Cloud Storage 문서를 참조하세요. 이 페이지의 나머지 부분에서는 Admin SDK의 기본 설정에 중점을 둡니다.

전제 조건

  • 서버 앱이 있는지 확인하십시오.

  • 사용하는 Admin SDK에 따라 서버에서 다음을 실행하는지 확인하십시오.

    • 관리 Node.js SDK — Node.js 14+
    • 관리 자바 SDK — 자바 8+
    • Admin Python SDK — Python 3.6 이상(Python 3.7 이상 권장)
    • Admin Go SDK — Go 1.15+
    • 관리 .NET SDK — .NET Framework 4.6.1+ 또는 .Net Core 2.0+용 .NET Standard 2.0

Firebase 프로젝트 및 서비스 계정 설정

Firebase Admin SDK를 사용하려면 다음이 필요합니다.

  • Firebase 프로젝트.
  • Firebase와 통신하기 위한 Firebase Admin SDK 서비스 계정. 이 서비스 계정은 Firebase 프로젝트를 만들거나 Google Cloud 프로젝트에 Firebase를 추가할 때 자동으로 생성됩니다.
  • 서비스 계정의 사용자 인증 정보가 포함된 구성 파일.

아직 Firebase 프로젝트가 없다면 Firebase 콘솔 에서 프로젝트를 만들어야 합니다. Firebase 프로젝트에 대해 자세히 알아보려면 Firebase 프로젝트 이해 를 방문하세요.

SDK 추가

새 프로젝트를 설정하는 경우 선택한 언어에 대한 SDK를 설치해야 합니다.

Node.js

Firebase Admin Node.js SDK는 npm에서 사용할 수 있습니다. 아직 package.json 파일이 없다면 npm init 를 통해 파일을 만드세요. 다음으로 firebase-admin npm 패키지를 설치하고 package.json 에 저장합니다.

npm install firebase-admin --save

애플리케이션에서 모듈을 사용하려면 모든 JavaScript 파일에서 모듈을 require 하십시오.

const { initializeApp } = require('firebase-admin/app');

ES2015를 사용하는 경우 모듈을 import 수 있습니다.

import { initializeApp } from 'firebase-admin/app';

자바

Firebase Admin Java SDK는 Maven 중앙 저장소에 게시됩니다. 라이브러리를 설치하려면 build.gradle 파일에서 라이브러리를 종속 항목으로 선언하세요.

dependencies {
  implementation 'com.google.firebase:firebase-admin:9.1.1'
}

Maven을 사용하여 애플리케이션을 빌드하는 경우 pom.xml 에 다음 종속성을 추가할 수 있습니다.

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.1.1</version>
</dependency>

파이썬

Firebase Admin Python SDK는 pip 를 통해 사용할 수 있습니다. sudo 를 통해 모든 사용자를 위해 라이브러리를 설치할 수 있습니다.

sudo pip install firebase-admin

또는 --user 플래그를 전달하여 현재 사용자에 대해서만 라이브러리를 설치할 수 있습니다.

pip install --user firebase-admin

가다

Go Admin SDK는 go get 유틸리티를 사용하여 설치할 수 있습니다.

# Install as a module dependency
go get firebase.google.com/go/v4

# Install to $GOPATH
go get firebase.google.com/go

씨#

.NET Admin SDK는 .NET 패키지 관리자를 사용하여 설치할 수 있습니다.

Install-Package FirebaseAdmin -Version 2.3.0

또는 dotnet 명령줄 유틸리티를 사용하여 설치합니다.

dotnet add package FirebaseAdmin --version 2.3.0

또는 다음 패키지 참조 항목을 .csproj 파일에 추가하여 설치할 수 있습니다.

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="2.3.0" />
</ItemGroup>

SDK 초기화

Firebase 프로젝트를 만든 후에는 서비스 계정 파일을 Google 애플리케이션 기본 자격 증명 과 결합하는 승인 전략으로 SDK를 초기화할 수 있습니다.

Firebase 프로젝트는 앱 서버 또는 신뢰할 수 있는 환경에서 Firebase 서버 API를 호출하는 데 사용할 수 있는 Google 서비스 계정 을 지원합니다. 로컬에서 코드를 개발하거나 애플리케이션을 온프레미스에 배포하는 경우 이 서비스 계정을 통해 얻은 자격 증명을 사용하여 서버 요청에 권한을 부여할 수 있습니다.

서비스 계정을 인증하고 Firebase 서비스에 액세스할 수 있는 권한을 부여하려면 JSON 형식의 비공개 키 파일을 생성해야 합니다.

서비스 계정의 비공개 키 파일을 생성하려면 다음 안내를 따르세요.

  1. Firebase 콘솔에서 설정 > 서비스 계정 을 엽니다.

  2. 새 개인 키 생성 을 클릭한 다음 키 생성 을 클릭하여 확인합니다.

  3. 키가 포함된 JSON 파일을 안전하게 저장합니다.

서비스 계정을 통해 승인할 때 애플리케이션에 자격 증명을 제공하기 위한 두 가지 선택 사항이 있습니다. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하거나 코드에서 서비스 계정 키의 경로를 명시적으로 전달할 수 있습니다. 첫 번째 옵션은 더 안전하며 강력하게 권장됩니다.

환경 변수를 설정하려면:

환경 변수 GOOGLE_APPLICATION_CREDENTIALS 를 서비스 계정 키가 포함된 JSON 파일의 파일 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로 새 세션을 열 경우 변수를 다시 설정하십시오.

리눅스 또는 macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

윈도우

PowerShell 사용:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

위의 단계를 완료하면 애플리케이션 기본 사용자 인증 정보(ADC)가 암시적으로 사용자 인증 정보를 결정할 수 있으므로 Google 이외의 환경에서 테스트하거나 실행할 때 서비스 계정 사용자 인증 정보를 사용할 수 있습니다.

다음과 같이 SDK를 초기화합니다.

Node.js

initializeApp({
    credential: applicationDefault(),
    databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

자바

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

파이썬

default_app = firebase_admin.initialize_app()

가다

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

씨#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

OAuth 2.0 갱신 토큰 사용

Admin SDK는 Google OAuth2 갱신 토큰으로 인증할 수 있는 자격 증명도 제공합니다.

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

initializeApp({
  credential: refreshToken(myRefreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

자바

FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(refreshToken))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

파이썬

cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)

가다

opt := option.WithCredentialsFile("path/to/refreshToken.json")
config := &firebase.Config{ProjectID: "my-project-id"}
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

씨#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/refreshToken.json"),
});

매개변수 없이 초기화

매개변수 없이 SDK를 초기화할 수도 있습니다. 이 경우 SDK는 Google 애플리케이션 기본 자격 증명 을 사용합니다. Google 환경에서는 기본 자격 증명 조회가 완전히 자동화되어 환경 변수나 기타 구성을 제공할 필요가 없기 때문에 Compute Engine, Kubernetes Engine, App Engine 및 Cloud Functions에서 실행되는 애플리케이션에는 SDK를 초기화하는 이 방법을 강력히 권장합니다.

실시간 데이터베이스, Cloud Storage 또는 Cloud Functions와 같은 서비스의 초기화 옵션을 선택적으로 지정하려면 FIREBASE_CONFIG 환경 변수를 사용합니다. FIREBASE_CONFIG 변수의 내용이 { 로 시작하면 JSON 개체로 구문 분석됩니다. 그렇지 않으면 SDK는 문자열이 옵션을 포함하는 JSON 파일의 경로라고 가정합니다.

Node.js

const app = initializeApp();

자바

FirebaseApp.initializeApp();

파이썬

default_app = firebase_admin.initialize_app()

가다

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

씨#

FirebaseApp.Create();

초기화되면 Admin SDK를 사용하여 다음 유형의 작업을 수행할 수 있습니다.

여러 앱 초기화

대부분의 경우 하나의 기본 앱만 초기화하면 됩니다. 두 가지 동등한 방법으로 해당 앱에서 서비스에 액세스할 수 있습니다.

Node.js

// Initialize the default app
const defaultApp = initializeApp(defaultAppConfig);

console.log(defaultApp.name);  // '[DEFAULT]'

// Retrieve services via the defaultApp variable...
let defaultAuth = getAuth(defaultApp);
let defaultDatabase = getDatabase(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = getAuth();
defaultDatabase = getDatabase();

자바

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

System.out.println(defaultApp.getName());  // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
FirebaseAuth defaultAuth = FirebaseAuth.getInstance(defaultApp);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.getInstance();
defaultDatabase = FirebaseDatabase.getInstance();

파이썬

# Import the Firebase service
from firebase_admin import auth

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)
print(default_app.name)  # "[DEFAULT]"

# Retrieve services via the auth package...
# auth.create_custom_token(...)

가다

// Initialize default app
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access auth service from the default app
client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

씨#

// Initialize the default app
var defaultApp = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});
Console.WriteLine(defaultApp.Name); // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
var defaultAuth = FirebaseAuth.GetAuth(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.DefaultInstance;

일부 사용 사례에서는 동시에 여러 앱을 생성해야 합니다. 예를 들어 한 Firebase 프로젝트의 실시간 데이터베이스에서 데이터를 읽고 다른 프로젝트의 맞춤 토큰을 만들 수 있습니다. 또는 별도의 자격 증명으로 두 개의 앱을 인증할 수 있습니다. Firebase SDK를 사용하면 각각 자체 구성 정보가 있는 여러 앱을 동시에 만들 수 있습니다.

Node.js

// Initialize the default app
initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = initializeApp(otherAppConfig, 'other');

console.log(getApp().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
const defaultAuth = getAuth();
const defaultDatabase = getDatabase();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = getAuth(otherApp);
const otherDatabase = getDatabase(otherApp);

자바

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

파이썬

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

가다

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

씨#

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

실시간 데이터베이스 및 인증 범위 설정

실시간 데이터베이스 또는 인증을 위해 Google 애플리케이션 기본 사용자 인증 정보와 함께 Google Compute Engine VM을 사용하는 경우 올바른 액세스 범위 도 설정해야 합니다. 실시간 데이터베이스 및 인증의 경우 userinfo.emailcloud-platform 또는 firebase.database 로 끝나는 범위가 필요합니다. 기존 액세스 범위를 확인하고 변경하려면 gcloud 를 사용하여 다음 명령어를 실행합니다.

gcloud

# Check the existing access scopes
gcloud compute instances describe [INSTANCE_NAME] --format json

# The above command returns the service account information. For example:
  "serviceAccounts": [
   {
    "email": "your.gserviceaccount.com",
    "scopes": [
     "https://www.googleapis.com/auth/cloud-platform",
     "https://www.googleapis.com/auth/userinfo.email"
     ]
    }
  ],

# Stop the VM, then run the following command, using the service account
# that gcloud returned when you checked the scopes.

gcloud compute instances set-service-account [INSTANCE_NAME] --service-account "your.gserviceaccount.com" --scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"

gcloud 최종 사용자 인증 정보로 테스트

gcloud auth application-default login 을 실행하여 얻은 Google 애플리케이션 기본 사용자 인증 정보로 Admin SDK를 로컬에서 테스트할 때 Firebase 인증을 사용하려면 다음과 같은 이유로 추가 변경이 필요합니다.

  • Firebase 인증은 gcloud OAuth 클라이언트 ID를 사용하여 생성된 gcloud 최종 사용자 인증 정보를 허용하지 않습니다.
  • Firebase 인증을 사용하려면 이러한 유형의 최종 사용자 자격 증명을 초기화할 때 프로젝트 ID를 제공해야 합니다.

해결 방법으로 자체 OAuth 2.0 클라이언트 ID 를 사용하여 gcloud 에서 Google 애플리케이션 기본 사용자 인증 정보를 생성할 수 있습니다. OAuth 클라이언트 ID는 데스크톱 앱 애플리케이션 유형이어야 합니다.

gcloud

gcloud auth application-default login --client-id-file=[/path/to/client/id/file]

앱 초기화 시 명시적으로 프로젝트 ID를 지정하거나 GOOGLE_CLOUD_PROJECT 환경 변수를 사용할 수 있습니다. 후자는 코드를 테스트하기 위해 추가로 변경할 필요가 없습니다.

프로젝트 ID를 명시적으로 지정하려면 다음 안내를 따르세요.

Node.js

import { initializeApp, applicationDefault } from 'firebase-admin/app';

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

자바

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

파이썬

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

가다

config := &firebase.Config{ProjectID: "<FIREBASE_PROJECT_ID>"}
app, err := firebase.NewApp(context.Background(), config)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

씨#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

다음 단계

Firebase에 대해 알아보기:

앱에 Firebase 기능을 추가합니다.