[Firestore] 관련 DB 기본 개념

euni·2025년 6월 15일

[Firestore] - NoSQL 형식의 데이터베이스

컬렉션(Collection)

  • 일종의 데이터 모음(폴더)

문서(Document)

  • 컬렉션 안에 들어 있는 단일 데이터 항목
  • 각각의 문서는 고유한 ID(uid) 존재
  • Map 형태의 데이터를 저장

스냅샷(Snapshot)

  • 데이터베이스에서 특정 문서(Document)나 쿼리(Query)의 특정 시점의 데이터의 상태를 "사진처럼 찍어서" 저장한 객체
  • 현재 상태 캡처 : 데이터베이스의 특정 시점에 존재하는 데이터를 그대로 가져온다
  • 데이터 읽기 : 문서나 쿼리의 결과를 읽을 때 사용
  • 실시간 추적 : dart-.snapshots() 메서드를 사용하면 데이터의 변화를 실시간으로 추적 가능

  • QuerySnapshot<Map<String, dynamic>> QuerySnapshot - 여러 문서 검색 (collection.where(...).get())
    → snapshot.docs.map((doc){}) 로 문서 반복
  • DocumentSnapshot<Map<String, dynamic>> DocumentSnapshot - 특정 문서 1개 조회 (doc(id).get())

FirebaseFirestore.instance.batch()
여러 개의 쓰기 작업(write operations)을 하나의 트랜잭션처럼 묶어서 실행할 수 있도록 해주는 함수.

  • 즉, 한 번에 여러 문서에 대해 set, update, delete 작업을 수행하고, 모두 성공하거나, 하나라도 실패하면 전부 실패를 보장하는 역할
  • 이렇게 묶은 작업은 마지막에 batch.commit()을 호출해서 실행한다
  • 예시
// Firestore 식물 목록 저장
Future<void> savePlantList(List<PlantModel> plants) async {
  final batch = FirebaseFirestore.instance.batch();
	for (final plant in plants) {
    	final docRef = _collection.doc(plant.cntntsNo);
    	batch.set(docRef, plant.toJson(), SetOptions(merge: 	true)); // 병합 저장
  	}
  await batch.commit();
}

🔥 Firestore에서 DocumentReferenceDocumentSnapshot 차이 완벽 정리

핵심 차이 요약

구분DocumentReferenceDocumentSnapshot
의미문서의 위치(참조)문서의 실제 데이터
포함 내용문서의 경로, ID 등 메타 정보문서의 필드 데이터, 존재 여부 등
주요 메서드set(), update(), delete(), get()data(), exists, id
사용 목적문서에 접근/조작할 때문서가 있는지 확인하고 데이터를 읽을 때

🔗 DocumentReference

  • Firestore 문서를 가리키는 참조 객체
  • 예: 문서를 생성하거나, 업데이트, 삭제할 때 사용
  • 예제 코드
    final docRef = FirebaseFirestore.instance
      .collection('plants')
      .doc('myPlantId');
    await docRef.set({'name': '로즈마리'}); // 문서 생성 또는 덮어쓰기
    await docRef.update({'name': '바질'}); // 필드만 수정
    await docRef.delete(); // 문서 삭제
profile
플러터 개발자 👩🏻‍💻

0개의 댓글