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를 사용하려면 서비스 계정 키 파일이 필요합니다.
- Firebase Console에서 프로젝트 선택.
- 설정 아이콘 > 프로젝트 설정으로 이동.
- 서비스 계정 탭에서 "새 비공개 키 생성"을 클릭.
- 다운로드된 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