[flutter] Firebase Firestore와 플러터를 이용한 책 추천 애플리케이션 만들기

Firebase는 구글에서 제공하는 백엔드 서비스로, 실시간 데이터베이스인 Firestore를 통해 데이터를 저장하고 불러올 수 있습니다. 이번 블로그에서는 Firebase Firestore와 플러터(Flutter)를 사용하여 책 추천 애플리케이션을 만드는 방법에 대해 알아보겠습니다.

목차

  1. Firebase 설정
  2. 프로젝트 구성
  3. 데이터베이스 연동
  4. 책 목록 표시
  5. 사용자 평가 저장
  6. 책 추천 기능 추가

1. Firebase 설정

먼저 Firebase 계정을 만들고, Firebase 콘솔에서 새 프로젝트를 생성하세요. 생성한 프로젝트에 Firestore를 활성화하고, 사용할 언어를 선택하세요.

2. 프로젝트 구성

플러터 프로젝트를 생성하고, firebase_corecloud_firestore 패키지를 pubspec.yaml 파일에 추가하세요. 이후, Firebase 프로젝트의 구성 파일(google-services.json 또는 GoogleService-Info.plist)을 프로젝트에 추가하세요.

3. 데이터베이스 연동

Firebase Firestore와 플러터를 연동하기 위해 Firebase.initializeApp()를 호출하고, Firestore 인스턴스를 초기화하세요. 이때, Firebase 프로젝트의 구성 파일이 제대로 추가되어 있는지 확인하세요.

import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

void main() async {
  // Firebase 초기화
  await Firebase.initializeApp();

  // Firestore 인스턴스 생성
  FirebaseFirestore firestore = FirebaseFirestore.instance;

  // 나머지 코드 작성
}

4. 책 목록 표시

Firestore에서 책의 정보를 불러와서 앱에서 표시해야 합니다. StreamBuilder 위젯을 사용하여 Firestore 컬렉션을 감시하고, 데이터가 변경될 때마다 UI를 업데이트하세요.

StreamBuilder(
  stream: firestore.collection('books').snapshots(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) {
      return CircularProgressIndicator();
    }

    List<DocumentSnapshot> documents = snapshot.data.documents;

    return ListView.builder(
      itemCount: documents.length,
      itemBuilder: (context, index) {
        DocumentSnapshot document = documents[index];

        return ListTile(
          title: Text(document['title']),
          subtitle: Text(document['author']),
        );
      },
    );
  },
)

5. 사용자 평가 저장

사용자가 책을 평가하면, 해당 정보를 Firestore에 저장해야 합니다. Firestore.collection('ratings').add() 메서드를 사용하여 평가를 저장하세요.

void saveRating(String bookId, double rating) async {
  await firestore.collection('ratings').add({
    'bookId': bookId,
    'rating': rating,
  });
}

6. 책 추천 기능 추가

Firestore에서 저장된 사용자의 평가를 기반으로 책 추천 기능을 구현할 수 있습니다. Firestore.collection('ratings').where() 메서드를 사용하여 사용자의 평가를 필터링하고, Firestore.collection('books').where() 메서드를 사용하여 추천할 책을 찾아옵니다.

void getRecommendedBooks() async {
  String userId = '123456';

  QuerySnapshot userRatings = await firestore
      .collection('ratings')
      .where('userId', isEqualTo: userId)
      .get();

  List<String> ratedBooks = userRatings.docs.map((doc) => doc['bookId']).toList();

  QuerySnapshot recommendedBooks = await firestore
      .collection('books')
      .where('genre', isEqualTo: 'fiction')
      .where('bookId', whereNotIn: ratedBooks)
      .limit(5)
      .get();

  // 추천된 책 목록 처리
}

위 방법을 활용하여 Firebase Firestore와 플러터를 이용한 책 추천 애플리케이션을 만들 수 있습니다.

참고 자료