본문 바로가기
✍️ 기록/Firebase

[Firebase] 파이어베이스 프로젝트 생성 및 연동

by 김물사 2025. 5. 21.

📌 Firebase란?

파이어베이스(Firebase)는 2011년 파이어베이스(Firebase, Inc)사가 개발하고 2014년 구글에 인수된 

웹/모바일 앱 개발의 여러 측면을 간소화해주는 Google의 플랫폼

 

🔗 Firebase

 

Firebase | Google's Mobile and Web App Development Platform

개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.

firebase.google.com

 

- 서버 구축 없이 바로 백엔드 기능 사용 가능

- 실시간 데이터 베이스 (Firestore Database)

- 인증 시스템 (Google, Email, GitHub 등)

- 클라우드 스토리지 (이미지, 파일 업로드 등)

- 푸쉬 알림, 분석, 호스팅 등 서비스 제공 

 

📍 Firebase 프로젝트 만들기

🔗 Firebase 프로젝트 만들기

 

✅ Firebase 프로젝트 생성

 

 

✅ 계속 버튼을 눌러 다음으로 진행하다보면 프로젝트만들기 버튼으로 마무리!

 

✅ 프로젝트 생성 완료!!

 

📍 Firebase 추가하여 시작하기

✅ IOS, Android, 웹과 Unity, Flutter 선택할 수 있고 저는 웹 </> 선택해서 진행!

 

 

✅ 앱 닉네임을 입력하고 앱 등록

 

 

✅ npm 또는 <script> 태그 중 선택해서 사용할 수 있어요

✅ 프로젝트 설정 > 일반 > 내 앱 > SDK 설정 및 구성에서 다시 확인할 수 있어요

 

📍 데이터베이스 만들기

 

빌드 > Firestore Database 선택

✅ 데이터가 저장될 서버 위치 -> asia-northeast3 (Seoul) 선택

 

✅ 데이터베이스 보안 규칙을 설정 프로덕션 모드에서 시작하는 경우 초기에 모든 읽기 쓰기가 거부 되어 추가로 규칙 설정이 필요하고 데이터베이스 생성 후 수정할 수 있으니  테스트 모드로 시작!!

 

 

✅ 데이터 베이스 생성 이후 규칙에서 보안 규칙을 수정하여 강화할 수 있어요

 

📍 Firestore의 컬렉션과 문서란?

✅ 컬렉션(collections)- 문서들의 집합체, 그룹- 관련된 문서들을 그룹화하는 폴더와 유사한 개념- 문서만 포함할 수 있고 직접 데이터를 저장할 수 없습니다.- 삭제 시 모든 문서 하위 컬렉션, 문서 자동으로 삭제 

 

✅문서 (Documents) - 실제 데이터를 저장하는 기본 단위- key-value 형식의 데이터 객체로 저장각 문서는 고유한 ID를 가지고 있습니다.- 문서 ID는 자동으로 생성 또는 직접 지정할 수 있습니다.

 

database
└── collections (컬렉션)
    └── documents (문서)
        └── subcollections (하위 컬렉션)
            └── documents (문서)
                └── ...

✅ 컬렉션 > 문서 > 하위 컬렉션 > 문서 구조 반복 가능

 

컬렉션 > 문서 - 구조 1단
test(문서) > blog(하위 컬렉션) 생성 > 문서 자동 ID 값 > { title:blogTitle}

 

database
└── tistory (컬렉션)
    └── test (문서) : test 객체 포함
        └── blog (하위 컬렉션)
        	└── 자동ID 생성 (문서)

 

✅ Firestore Database에서 직접 컬렉션 문서를 생성할 수 있고 프로젝트 내에서도 firestore에 요청을 보내 컬렉션, 문서를 추가, 삭제, 수정하는 작업이 가능합니다!

 

📍 연동 및 테스트

📗 CDN

<script type="module">
    import { initializeApp } from "https://www.gstatic.com/firebasejs/11.8.0/firebase-app.js";
    import { getFirestore, collection, getDocs } from "https://www.gstatic.com/firebasejs/11.8.0/firebase-firestore.js";
	// ⭐ 개인 config key
    const firebaseConfig = {
      apiKey: apiKey,
      authDomain: authDomain,
      projectId: projectId,
      storageBucket: storageBucket,
      messagingSenderId: messagingSenderId,
      appId: appId,
      measurementId: measurementId
    };
    // Initialize Firebase
    const app = initializeApp(firebaseConfig);
    // Firestore 초기화
    const db = getFirestore(app);
    async function fetchData() {
      try {
        // ✅ tistory : 컬렉션 이름
        // getDocs : 컬렉션 문서 가져오기
        const querySnapshot = await getDocs(collection(db, "tistory"));
        console.log(querySnapshot);
        
        // 문서가 없는 경우 예외 처리
        if (querySnapshot.empty) {
          console.log("문서가 없습니다.");
          return;
        }
        
        // 각 문서 ID와 데이터 조회
        querySnapshot.forEach((doc) => {
          const data = doc.data();
          console.log('문서 ID : ', doc.id);
          Object.keys(data).forEach((key) => {
            console.log(`${key} : `, data[key]);
          });
        });
      } catch (error) {
        console.error("❌ 에러", error);
      }
    }
    fetchData();
</script>

 

 getDocs()

- 컬렉션의 모든 문서를 한 번에 가져오는 비동기 함수

- 반환값은 문서들의 리스트 정보를 가지고 있고 문서에 접근 가능

 

⚠️ getDocs()로 문서를 조회하는 경우 문서 수에 따라 요청 비용이 발생

- 1개 -> 1회 읽기 비용, 10개 -> 10회 읽기 비용

- 컬렉션 이름, 문서 ID가 정해져 있다면 getDoc()를 통해 해당 문서만 요청 가능

- 문서 여러개를 가져오는 경우 query,  limit(가져오고 싶은 문서 수) 사용

 

 .empty

- 해당 컬렉션에 문서가 하나도 없는 경우 true를 반환

- 빈 배열 또는 undefined로 생기는 오류 방지

※ 컬렉션의 이름 또는 컬렉션이 없는 경우에도 .empty -> true 반환

- 컬렉션과 문서 체크

 

✅ 정상적으로 확인 완료!

 

📗 <script type="module"> 사용하지 않는 경우

- import -> script src 

- initializeApp, getFirestore -> firebase.firestore()

<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>
<script>
  // ⭐ 개인 config key
  const firebaseConfig = {
    apiKey: apiKey,
    authDomain: authDomain,
    projectId: projectId,
    storageBucket: storageBucket,
    messagingSenderId: messagingSenderId,
    appId: appId,
    measurementId: measurementId
  };
  // Firebase 초기화
  firebase.initializeApp(firebaseConfig);
  const db = firebase.firestore();

  async function fetchData() {
    try {
      const querySnapshot = await db.collection("tistory").get();
      if (querySnapshot.empty) {
        console.log("문서가 없습니다.");
        return;
      }

      querySnapshot.forEach((doc) => {
        const data = doc.data();
        console.log('문서 ID : ',doc.id)
        Object.keys(data).forEach((key) => {
          console.log(`${key} : `, data[key]);
        });
      });
    } catch (e) {
      console.error("❌ 에러", error);
    }
  }
  fetchData();
</script>

 

 

 

✍️ 기록

 

감사합니다. 😁

반응형
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.