๋ชฉํ
Firebase ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ express๋ก ๊ตฌ์ถํ node ์๋ฒ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ค.
Cloud Firestore๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ
Firebase์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋๋ ค๋ฉด Cloud Firestore๋ผ๋ ์ ํ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
Realtime Database๊ฐ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ์์ ๋ญ ์ ํํด์ผํ์ง? ํ๋๋ฐ ๊ณต์๋ฌธ์(Cloud Firestore ๋๋ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ์ ์ ๋ฆฌ๋์ด์๋ค. ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ๋ฆฌํ ์ ์์ด ๊ณต์๋ฌธ์์์๋ Cloud Firestore๋ฅผ ๊ถ์ฅํ๊ณ ์๋ค.
Firebase ์ฝ์์์ ๋ด ํ๋ก์ ํธ๋ฅผ ๋๋ฅด๊ณ Cloud Firestore๋ฅผ ์ ํํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ถ๊ฐ ๋ฒํผ์ ๋๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค id์ ์์น๋ฅผ ์ง์ ํด์ค๋ค.
๋ณด์๊ท์น ํญ์์๋ ํ ์คํธ๋ชจ๋์์ ์์์ ์ ํํด ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฅธ๋ค.
ํ ์คํธ๋ชจ๋์์ ๋ง๋ค๋ฉด ๊ถํ ์์ด db์ ์ฝ๊ธฐ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ฐ 30์ผํ์๋ ๊ถํ์ค์ ์ ํด์ค์ผํ๋๋ฏ.
๋ฐ์ดํฐ ์์ฑํ๊ธฐ
์ด์ Firestore ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
ํ์ด์ด์คํ ์ด์ ์ ์ฅ ๋จ์๋ ๋ฌธ์์ด๋ค. ์๋์ ๊ฐ์ ๊ณ์ธต๊ตฌ์กฐ์ด๊ณ ์ฝ์์์ ์์ฃผ ์ฝ๊ฒ ui๋ก ํธ์งํ ์ ์๋ค.
- ์ปฌ๋ ์
users- ๋ฌธ์
user1- ํ๋
์ด๋ฆ name
๋์ด age
์ฃผ์ address
- ํ๋
- ๋ฌธ์
user2
- ๋ฌธ์
์๋ฒ์์ Firestore ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (Firebase Admin SDK)
Firestore๋ ํด๋ผ์ด์ธํธ์์๋ ์ง์ ์ ๊ทผ๊ฐ๋ฅํ๊ณ ์๋ฒ API๋ฅผ ํตํด์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๋๋ ์๋ฒ์์ ๋ก์ง์ ์ฒ๋ฆฌํด์ผํ๊ณ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์๋ฒ์์ ํ๊ณ ์ถ๊ธฐ๋๋ฌธ์ ์๋ฒ์์ Firestore๋ฅผ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์๋ฒ์์ Firestore์ ์ ๊ทผํ ๋๋ Firebase Admin SDK๋ฅผ ์ฌ์ฉํ๋ค. Admin SDK๋ Firestore์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Security Rules์ ๊ด๊ณ์์ด ์ ๊ทผ๊ฐ๋ฅํ๋ค.
Firebase ์ค์น ๋ฐ ์ด๊ธฐํ
Firebase Admin SDK๋ฅผ ์ฌ์ฉํ์ฌ Firebase ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํ
npm install firebase-admin
Firestore ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
Firestore์ ์ ์ฅ๋ db ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
async function getAllDocuments() {
const snapshot = await db.collection('users').get();
snapshot.forEach((doc) => {
console.log(`${doc.id} =>`, doc.data());
});
}
getAllDocuments();
GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND ์๋ฌ
์์ ์ฝ๋๋ฅผ ์คํํ๋ ํ์ผ์ด waterBillController.ts๋ผ๋ ํ์ผ์ ์๋๋ฐ ํ์ผ์ ์คํ์์ผ๋ณด๋ ์๋์๊ฐ์ ์๋ฌ๊ฐ ๋๊ณ ์ฝ์์ db ๋ฐ์ดํฐ๋ ๋ณด์ด์ง ์์๋ค. ใ
throw new Error(exports.GoogleAuthExceptionMessages.NO_PROJECT_ID_FOUND); ^ Error: Unable to detect a Project Id in the current environment. To learn more about authentication and Google APIs, visit: https://cloud.google.com/docs/authentication/getting-started at GoogleAuth.findAndCacheProjectId
์๊ณ ๋ณด๋ Firebase Admin SDK๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ณต์๋ฌธ์์์ ์ค๋ช ํ๋ ๊ฒ์ฒ๋ผ ์๋น์ค๊ณ์ ์ธ์ฆ์ ๋ณด๊ฐ ์์ด์ผํ๋ค.
Firebase ์ฝ์ > ํ๋ก์ ํธ ์ค์ > ์๋น์ค ๊ณ์ ํญ์์ ์ ๋น๊ณต๊ฐ ํค ์์ฑ์ ๋๋ฅธ๋ค.
๊ฒฝ๊ณ ํ ๊ฒ ์ฒ๋ผ ๋น๊ณต๊ฐ ํค json ํ์ผ์ ์ ๋ remote ์ ์ฅ์์ ์ฌ๋ฆฌ๋ฉด ์๋๋ค.
config/firebaseAdmin.ts ํ์ผ
import * as admin from "firebase-admin";
import * as serviceAccount from "./์๋น์ค๊ณ์ ํ์ผ.json";
import { ServiceAccount } from "firebase-admin";
admin.initializeApp({
credential: admin.credential.cert(serviceAccount as ServiceAccount),
});
export const db = admin.firestore();
์์ ๊ฐ์ด ์๋น์ค ๊ณ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฝ๋์์ ์ง์ ํด์ ์ด๊ธฐํ ํด์ค๋ค.
์ด์ ์คํํด๋ณด๋ฉด ์์์ ๋ฃ์ user1 ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ ๋ณด์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Refs