[TIL] #6 Firebase Database, Storage

phdljr·2023년 10월 5일
0

TIL

목록 보기
6/70
post-custom-banner

Firebase database

  • NoSQL 기반 데이터 베이스

  • await getDocs()

    import { collection, getDocs } from "firebase/firestore";
    
    const querySnapshot = await getDocs(collection(db, "users"));
    querySnapshot.forEach((doc) => {
      console.log(`${doc.id} => ${doc.data()}`);
    });();
  • await addDoc()

    import { collection, addDoc } from "firebase/firestore";
    
    // Add a new document with a generated id.
    const docRef = await addDoc(collection(db, "cities"), {
      name: "Tokyo",
      country: "Japan"
    });
    console.log("Document written with ID: ", docRef.id);
    • id를 무작위로 생성해주면서 추가
  • await setDoc(doc(db, "컬렉션 명", "id"), 데이터)

    import { doc, setDoc } from "firebase/firestore";
    
    const cityRef = doc(db, 'cities', 'BJ');
    
    setDoc(cityRef, { capital: true }, { merge: true });
    • 해당 컬렉션에서 id값을 가진 도큐먼트값을 데이터로 수정
    • 이미 도큐먼트가 존재하면 수정
    • 없으면 새로 추가
    • merge 값이 true이면 데이터가 없다면 추가해버리고데이터가 있을경우 update처럼 작용한다
  • await updateDoc()

    import { doc, updateDoc } from "firebase/firestore";
    
    const washingtonRef = doc(db, "cities", "DC");
    
    // Set the "capital" field of the city 'DC'
    await updateDoc(washingtonRef, {
      capital: true
    });
    • 특정 필드값만 수정
    • 만약 특정필드의 값이 없을경우 마찬가지로 필드값을 그냥 추가해버린다
  • await deleteDoc()

    import { doc, deleteDoc } from "firebase/firestore";
    
    await deleteDoc(doc(db, "cities", "DC"));

Firebase Storage

  • 정적 파일을 저장할 수 있는 공간
  • AWS의 S3와 비슷한 느낌

초기 설정

// Firebase SDK 라이브러리 가져오기
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js";
import { getStorage } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-storage.js"
import { firebaseConfig } from "./config.js"

// Firebase 인스턴스 초기화
const app = initializeApp(firebaseConfig);

export const storage = getStorage(app);
  • getStorage()

    const storage = getStorage(app);
    • storage를 가리키는 래퍼런스(포인터같은 느낌)
  • ref(storage, file.name)

    const storageRef = ref(storage, file.name);
    • storage 내부의 파일 위치를 가리키는 래퍼런스(포인터같은 느낌)
    • file.name은 storage 내부의 위치를 가리키도록 설정
  • getDownloadURL(ref).then(url => {})

    getDownloadURL(ref(storage, imgUrl))
            .then((url) => {
                      $("#testimg").attr("src", url);
            })
    • 다운로드
    • url은 다운로드한 파일에 대한 주소
  • uploadBytes(ref, file).then(snapshot => {})

    uploadBytes(storageRef, file).then((snapshot) => {
                    console.log(snapshot);
                });
    • file 데이터를 ref로 업데이트
    • snapshotfile에 대한 메타데이터
  • deleteObject(desertRef).then(() => {})

    import { getStorage, ref, deleteObject } from "firebase/storage";
    
     const storage = getStorage();
    
     // Create a reference to the file to delete
     const desertRef = ref(storage, 'images/desert.jpg');
    
     // Delete the file
     deleteObject(desertRef).then(() => {
       // File deleted successfully
     }).catch((error) => {
       // Uh-oh, an error occurred!
     });
     ```
profile
난 Java도 좋고, 다른 것들도 좋아
post-custom-banner

0개의 댓글