Node.js Firebase Admin SDK

Firebase Admin SDK를 Node.js에서 사용하는 방법을 단계별로 설명드리겠습니다.


1. Firebase 프로젝트 생성 및 서비스 계정 키 생성

  1. Firebase Console에 접속합니다.
  2. 새 프로젝트를 생성하거나 기존 프로젝트를 엽니다.
  3. 설정(톱니바퀴) > 프로젝트 설정으로 이동합니다.
  4. 서비스 계정 탭을 선택한 후, Firebase Admin SDK를 선택합니다.
  5. 새 비공개 키 생성을 클릭하여 JSON 키 파일을 다운로드합니다.

2. Node.js 프로젝트 설정

Firebase Admin SDK를 설치하고 설정합니다.

1) Node.js 프로젝트 초기화

mkdir firebase-admin-example
cd firebase-admin-example
npm init -y

2) Firebase Admin SDK 설치

npm install firebase-admin

3. Firebase Admin SDK 초기화

서비스 계정 키를 사용하여 Firebase Admin SDK를 초기화합니다.

index.js 파일 생성

const admin = require('firebase-admin');
const serviceAccount = require('./path/to/your/serviceAccountKey.json'); // 다운로드한 JSON 파일 경로

// Firebase Admin SDK 초기화
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://<your-project-id>.firebaseio.com' // Firebase 실시간 데이터베이스 URL
});

// Firebase 기능 사용 예시
(async () => {
  try {
    const user = await admin.auth().getUserByEmail('user@example.com');
    console.log('User data:', user);
  } catch (error) {
    console.error('Error fetching user data:', error);
  }
})();

⚠️ 서비스 계정 키 보안
서비스 계정 키 파일은 민감한 정보이므로 깃헙 등 공개 저장소에 업로드하지 마세요. .gitignore 파일에 추가하세요.

echo "path/to/your/serviceAccountKey.json" >> .gitignore

4. Firebase 기능 사용

Firebase Admin SDK로 사용할 수 있는 주요 기능:

  • 인증(Authentication): 사용자 관리 (생성, 읽기, 삭제 등)
  • 실시간 데이터베이스(Realtime Database): 데이터 읽기 및 쓰기
  • 클라우드 Firestore(Cloud Firestore): 데이터 관리
  • 클라우드 메시징(Cloud Messaging): 푸시 알림 전송
  • 스토리지(Storage): 파일 업로드 및 다운로드

예시: 사용자 생성

(async () => {
  try {
    const user = await admin.auth().createUser({
      email: 'newuser@example.com',
      password: 'password123',
      displayName: 'New User'
    });
    console.log('Successfully created new user:', user);
  } catch (error) {
    console.error('Error creating new user:', error);
  }
})();

5. Firebase Admin SDK 테스트

  1. Node.js 서버 실행: node index.js
  2. 로그에서 Firebase 기능이 정상적으로 작동하는지 확인합니다.

6. 추가 참고 자료

Leave a Reply

Your email address will not be published. Required fields are marked *