[flutter] Firebase Firestore에서 데이터 읽기

Firebase Firestore는 실시간 데이터베이스로 사용할 수 있는 클라우드 기반 NoSQL 데이터베이스입니다. 이 데이터베이스를 사용하면 앱에서 데이터를 쉽게 읽고 쓸 수 있으며, 실시간 업데이트를 처리할 수도 있습니다.

이번 글에서는 Flutter에서 Firebase Firestore에서 데이터를 읽는 방법을 알아보겠습니다.

Firestore 라이브러리 추가하기

Firestore를 사용하기 위해 먼저 cloud_firestore 라이브러리를 프로젝트에 추가해야 합니다. pubspec.yaml 파일을 열고 dependencies 섹션에 아래의 코드를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^2.5.4

변경사항을 저장한 후, 터미널에서 flutter pub get 명령을 실행하여 라이브러리를 다운로드합니다.

Firestore 데이터 읽기

Firestore에서 데이터를 읽기 위해서는 쿼리(Query)를 사용해야 합니다. 쿼리는 조건에 맞는 문서(Document) 또는 컬렉션(Collection)을 가져올 수 있도록 해줍니다.

아래의 코드는 users 컬렉션의 모든 문서를 가져오는 방법을 보여줍니다.

import 'package:cloud_firestore/cloud_firestore.dart';

Future<void> getUsers() async {
  QuerySnapshot<Map<String, dynamic>> snapshot =
      await FirebaseFirestore.instance.collection('users').get();

  if (snapshot != null && snapshot.docs.isNotEmpty) {
    for (QueryDocumentSnapshot<Map<String, dynamic>> doc in snapshot.docs) {
      print(doc.data());
    }
  }
}

get() 메소드를 호출하여 쿼리를 실행한 후, QuerySnapshot 객체를 반환합니다. 이 객체는 docs 속성을 통해 문서를 가져올 수 있습니다. 각 문서는 QueryDocumentSnapshot 형식으로 반환되며, data() 메소드를 사용하여 문서의 데이터를 가져올 수 있습니다.

정렬과 필터링

Firestore에서 데이터를 가져올 때, 정렬과 필터링을 사용하여 원하는 데이터만 가져올 수 있습니다. 예를 들어, 나이가 30살 이상인 사용자만 가져오려면 다음과 같이 where() 메소드를 사용할 수 있습니다.

QuerySnapshot<Map<String, dynamic>> snapshot = await FirebaseFirestore.instance
    .collection('users')
    .where('age', isGreaterThanOrEqualTo: 30)
    .get();

이 코드는 users 컬렉션에서 age 필드 값이 30 이상인 문서만 가져옵니다.

또한, 데이터를 정렬하기 위해서는 orderBy() 메소드를 사용할 수 있습니다. 예를 들어, 이름 순으로 정렬된 사용자 목록을 가져오려면 다음과 같이 사용할 수 있습니다.

QuerySnapshot<Map<String, dynamic>> snapshot = await FirebaseFirestore.instance
    .collection('users')
    .orderBy('name')
    .get();

실시간 업데이트 처리하기

Firestore에서는 실시간 업데이트를 처리하는 기능을 제공합니다. 해당 기능을 사용하려면 snapshots() 메소드를 호출하면 됩니다.

Stream<QuerySnapshot<Map<String, dynamic>>> stream =
    FirebaseFirestore.instance.collection('users').snapshots();

stream.listen((QuerySnapshot<Map<String, dynamic>> snapshot) {
  for (QueryDocumentSnapshot<Map<String, dynamic>> doc in snapshot.docs) {
    print(doc.data());
  }
});

이 코드는 users 컬렉션의 데이터가 업데이트 될 때마다 데이터를 받아와 출력하는 기능을 구현합니다. 이를 위해 snapshots() 메소드를 호출하여 스트림(Stream)을 생성하고, listen() 메소드를 사용하여 스트림의 데이터를 구독합니다.

결론

이제 Firebase Firestore에서 데이터를 읽는 방법을 알게 되었습니다. Firestore는 강력한 기능을 제공하며, 실시간 업데이트를 처리하는 데에도 효과적입니다. 이를 활용하여 앱의 데이터 관리를 효율적으로 처리할 수 있습니다.

더 많은 Firestore 기능과 사용 방법을 알고 싶다면 Firebase 공식 문서를 참고해보세요.