NodeJS 라이브러리

Firebase Admin SDK: Node.js 서버에서 Firebase 활용하기

ReactRoster 2024. 12. 4. 12:53
SMALL

Firebase Admin SDK: Node.js 서버에서 Firebase 활용하기

Firebase Admin SDK는 서버 환경에서 Firebase 서비스를 통합적으로 관리할 수 있는 도구입니다. 데이터베이스, 인증, 푸시 알림 등 다양한 Firebase 기능을 Node.js 서버와 함께 활용할 수 있습니다. 이번 포스팅에서는 Firebase Admin SDK의 주요 기능과 사용법을 알아보겠습니다.

1. Firebase Admin SDK란?

Firebase Admin SDK는 Node.js 환경에서 Firebase의 관리 작업을 수행할 수 있는 라이브러리입니다. 일반적으로 클라이언트 앱에서 사용되는 Firebase SDK와는 달리, 서버에서만 실행할 수 있으며 높은 권한으로 작업을 수행할 수 있습니다.

주요 기능

  • Firebase Authentication 관리: 사용자 계정 생성, 업데이트, 삭제.
  • Firebase Realtime Database 및 Firestore 관리: 서버에서 데이터 읽기/쓰기.
  • Cloud Messaging: FCM(푸시 알림) 메시지 전송.
  • Cloud Storage 관리: 파일 업로드 및 다운로드.
  • Custom Claims: 사용자 권한 관리.

2. Firebase Admin SDK 설치 및 초기화

1) Firebase Admin SDK 설치

npm install firebase-admin

2) Firebase 서비스 계정 생성

Firebase Admin SDK를 사용하려면 서비스 계정 키 파일이 필요합니다.

  1. Firebase Console에서 프로젝트 선택.
  2. 설정 아이콘 > 프로젝트 설정으로 이동.
  3. 서비스 계정 탭에서 "새 비공개 키 생성"을 클릭.
  4. 다운로드된 JSON 파일을 프로젝트에 저장합니다. (예: serviceAccountKey.json)

3) Firebase Admin 초기화


const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json"); // 키 파일 경로

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://your-project-id.firebaseio.com" // Firebase 프로젝트 URL
});

3. Firebase Admin SDK 주요 기능

1) Firebase Authentication 관리

사용자 생성


admin.auth().createUser({
    email: "user@example.com",
    emailVerified: false,
    password: "password123",
    displayName: "John Doe",
    disabled: false,
})
.then((userRecord) => {
    console.log("Successfully created new user:", userRecord.uid);
})
.catch((error) => {
    console.error("Error creating new user:", error);
});

사용자 정보 조회


admin.auth().getUser("user-uid") // user-uid는 실제 UID로 변경
.then((userRecord) => {
    console.log("Successfully fetched user data:", userRecord.toJSON());
})
.catch((error) => {
    console.error("Error fetching user data:", error);
});

사용자 삭제


admin.auth().deleteUser("user-uid") // user-uid는 실제 UID로 변경
.then(() => {
    console.log("Successfully deleted user");
})
.catch((error) => {
    console.error("Error deleting user:", error);
});

2) Firebase Realtime Database 관리

데이터 쓰기


const db = admin.database();
const ref = db.ref("users");

ref.child("user1").set({
    name: "John Doe",
    age: 25,
})
.then(() => {
    console.log("Successfully wrote data to database");
})
.catch((error) => {
    console.error("Error writing data to database:", error);
});

데이터 쓰기


const db = admin.database();
const ref = db.ref("users");

ref.child("user1").set({
    name: "John Doe",
    age: 25,
})
.then(() => {
    console.log("Successfully wrote data to database");
})
.catch((error) => {
    console.error("Error writing data to database:", error);
});

데이터 읽기


const db = admin.database();
const ref = db.ref("users/user1");

ref.once("value")
.then((snapshot) => {
    const userData = snapshot.val();
    console.log("Successfully read data from database:", userData);
})
.catch((error) => {
    console.error("Error reading data from database:", error);
});

3) Firestore 관리

데이터 추가


const firestore = admin.firestore();

firestore.collection("users").doc("user1").set({
    name: "Jane Doe",
    age: 30,
})
.then(() => {
    console.log("Successfully added document to Firestore");
})
.catch((error) => {
    console.error("Error adding document to Firestore:", error);
});

데이터 조회


const firestore = admin.firestore();

firestore.collection("users").doc("user1").get()
.then((doc) => {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        console.log("No such document!");
    }
})
.catch((error) => {
    console.error("Error getting document:", error);
});

4) Cloud Messaging (FCM) 푸시 알림

알림 메시지 전송


const message = {
    token: "YOUR_FCM_TOKEN", // 실제 FCM 토큰으로 변경
    notification: {
        title: "알림 제목",
        body: "알림 내용"
    }
};

admin.messaging().send(message)
.then((response) => {
    console.log("Successfully sent message:", response);
})
.catch((error) => {
    console.error("Error sending message:", error);
});

5) Cloud Storage 관리

파일 업로드


const bucket = admin.storage().bucket();

bucket.upload("./path/to/your/file.txt", { // 파일 경로
    destination: "uploads/file.txt"
})
.then(() => {
    console.log("Successfully uploaded file");
})
.catch((error) => {
    console.error("Error uploading file:", error);
});

파일 다운로드 URL 생성


bucket.file("uploads/file.txt").getSignedUrl({
    action: 'read',
    expires: '03-01-2025' // 만료일
})
.then((url) => {
    console.log("Download URL:", url[0]);
})
.catch((error) => {
    console.error("Error getting download URL:", error);
});

결론

Firebase Admin SDK는 서버에서 Firebase 서비스를 효율적으로 관리할 수 있는 강력한 도구입니다. 인증, 데이터베이스, 메시징, 스토리지 등 다양한 기능을 Node.js 환경에서 손쉽게 사용할 수 있습니다. Firebase 프로젝트를 구축 중이라면 Firebase Admin SDK를 적극 활용해보세요!

Firebase Admin SDK 공식 GitHub: https://github.com/firebase/firebase-admin-node

여러분은 Firebase Admin SDK를 어디에 활용하고 싶으신가요? 댓글로 공유해주세요! 🚀

LIST