[flutter] Firebase_core를 사용하여 플러터 앱에서 Firebase Firestore 쓰기/읽기 구현하기

Firebase는 구글의 벡엔드 클라우드 서비스 플랫폼으로, Firestore는 Firebase의 NoSQL 데이터베이스입니다. 이번 포스트에서는 Flutter 앱에서 Firebase Firestore를 사용하여 데이터를 쓰고 읽는 방법을 알아보겠습니다.

Firebase 프로젝트 설정

먼저, Firebase 프로젝트를 생성하고 앱을 추가해야 합니다. Firebase 콘솔에서 새 프로젝트를 생성하고, “프로젝트 설정” 페이지에서 android 앱과 iOS 앱을 추가합니다. 이 과정에서는 각 플랫폼의 패키지 이름과 SHA-1 인증서 지문을 제공해야 합니다.

Firebase 콘솔에서 생성한 프로젝트에 연결하기 위해 Flutter 프로젝트의 pubspec.yaml 파일에 firebase_corecloud_firestore 패키지를 추가해 주세요. 패키지를 추가하려면 dependencies 섹션에 다음과 같이 추가하면 됩니다:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.6.0
  cloud_firestore: ^3.1.0

의존성을 추가한 후, 터미널에서 flutter pub get 명령을 실행하여 패키지를 다운로드하세요.

Firebase 인증 설정

Firebase 프로젝트의 인증 설정을 구성해야 합니다. 이를 위해 Firebase 콘솔에서 “Authentication” 섹션으로 이동하고, “Sign-in method” 탭에서 “Anonymous”를 활성화하세요. 이렇게 하면 앱 사용자가 익명으로 인증됩니다.

Firebase 초기화

Firestore에 액세스하려면 Firebase를 초기화해야 합니다. 프로젝트의 main.dart 파일을 열고 다음 코드 스니펫을 추가하세요:

import 'package:firebase_core/firebase_core.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  runApp(MyApp());
}

Firebase.initializeApp() 메서드가 Firebase를 초기화하는 역할을 합니다. main() 함수를 async로 작성하려면 await Firebase.initializeApp()을 호출하기 전에 WidgetsFlutterBinding.ensureInitialized()를 호출해야 합니다.

Firestore 쓰기

Firestore에 데이터를 쓰려면 FirebaseFirestore 인스턴스를 사용해야 합니다. Firestore에 데이터를 추가하려면 collection()add() 메서드를 사용해야 합니다. 예를 들어, “users” 컬렉션에 사용자를 추가하는 코드를 작성해 보겠습니다:

import 'package:cloud_firestore/cloud_firestore.dart';

void addUser() async {
  final CollectionReference users = FirebaseFirestore.instance.collection('users');

  await users.add({
    'name': 'John',
    'age': 25,
  });
}

Firestore에서 데이터를 쓸 때는 비동기 함수로 작성해야 하므로 asyncawait 키워드를 사용했습니다. users.add() 메서드를 호출하여 데이터를 추가하고, 사용자 이름과 나이를 맵 형태로 전달했습니다.

Firestore 읽기

Firestore에서 데이터를 읽으려면 collection()get() 메서드를 사용해야 합니다. 예를 들어, “users” 컬렉션의 모든 사용자를 가져오는 코드를 작성해 보겠습니다:

import 'package:cloud_firestore/cloud_firestore.dart';

void getUsers() async {
  final CollectionReference users = FirebaseFirestore.instance.collection('users');

  final QuerySnapshot snapshot = await users.get();
  
  for (final DocumentSnapshot doc in snapshot.docs) {
    print("Name: ${doc.data()['name']}");
    print("Age: ${doc.data()['age']}");
  }
}

Firestore에서 데이터를 가져올 때도 비동기 함수로 작성해야 하므로 asyncawait 키워드를 사용했습니다. users.get() 메서드를 호출하여 데이터를 가져오고, snapshot.docs를 사용하여 모든 문서를 반복하고 이름과 나이를 출력했습니다.

마무리

이런 식으로 Flutter 앱에서 Firebase Firestore에 데이터를 쓰고 읽을 수 있습니다. Firebase에서 제공하는 다양한 기능을 사용하여 더 많은 작업을 수행할 수 있습니다. Firebase 문서와 플러터 패키지 문서를 참조하여 더 자세한 내용을 알아보시기 바랍니다.

참고 자료: