Firestore는 Google Firebase에서 제공하는 NoSQL 클라우드 데이터베이스이다. Firestore는 클라이언트 SDK 및 Admin SDK를 통해 접근할 수 있으며, 서버리스 환경에서도 쉽게 사용할 수 있도록 설계되었다.
NoSQL 문서 기반 데이터베이스
실시간 동기화
트랜잭션 지원
보안 및 접근 제어
Firestore 인스턴스 초기화
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";
const firebaseConfig = {
FIREBASE_CONFIGURATION
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
문서 생성 - Client SDK
import { collection, addDoc, setDoc, doc } from "firebase/firestore";
// 자동 생성되는 문서 ID
await addDoc(collection(db, "collection명"), {
field1: "content1",
field2: "content2"
});
// 특정 문서 ID 지정
await setDoc(doc(db, "collection명", "문서ID"), {
field1: "content1",
field2: "content2"
});
문서 조회 - Client SDK
import { doc, getDoc } from "firebase/firestore";
const docRef = doc(db, "cities", "SF");
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log("Document data:", docSnap.data());
} else {
console.log("No such document!");
}
문서 수정 - Client SDK
import { setDoc, doc, updateDoc } from "firebase/firestore";
// 전체 업데이트
await setDoc(doc(db, "collection명", "문서ID"), {
field1: "newContent",
field2: "newContent2"
});
// 부분 업데이트
await updateDoc(doc(db, "collection명", "문서ID"), {
field1: "updatedContent"
});
문서 삭제 - Client SDK
import { deleteDoc, doc } from "firebase/firestore";
await deleteDoc(doc(db, "collection명", "문서ID"));
Admin SDK는 서버에서 Firestore를 제어할 때 사용한다.
import * as admin from "firebase-admin";
admin.initializeApp();
const db = admin.firestore();
const userQuerySnapshot = await db
.collection("users")
.where("email", "==", "user@example.com")
.get();
const docRef = db.collection('users').doc('user123');
await docRef.update({ isActive: true });
const docSnapshot = await docRef.get();
const docSnapshot = db
.collection('users')
.where('uid','==',uid);
.get();
const userData = docSnapshot.docs[0].data();
console.log("유저 이름: ", userData.name);
arrayUnion을 사용한 배열 업데이트Firestore의 arrayUnion은 배열 필드를 업데이트할 때 중복을 방지하면서 안전하게 값을 추가하는 메서드이다.
import { FieldValue } from "firebase-admin";
const docRef = db.collection("users").doc("user123");
await docRef.update({
hobbies: FieldValue.arrayUnion("reading", "coding")
});
WriteResult 객체를 반환하며, 여기에 마지막 업데이트 시간만 포함된다.create()를 호출하면 새로 생성된 객체를 바로 반환할 수 있다.