Firebase는 구글에서 제공하는 백엔드 서비스로, 실시간 데이터베이스인 Firestore를 통해 데이터를 저장하고 불러올 수 있습니다. 이번 블로그에서는 Firebase Firestore와 플러터(Flutter)를 사용하여 책 추천 애플리케이션을 만드는 방법에 대해 알아보겠습니다.
목차
- Firebase 설정
- 프로젝트 구성
- 데이터베이스 연동
- 책 목록 표시
- 사용자 평가 저장
- 책 추천 기능 추가
1. Firebase 설정
먼저 Firebase 계정을 만들고, Firebase 콘솔에서 새 프로젝트를 생성하세요. 생성한 프로젝트에 Firestore를 활성화하고, 사용할 언어를 선택하세요.
2. 프로젝트 구성
플러터 프로젝트를 생성하고, firebase_core
와 cloud_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와 플러터를 이용한 책 추천 애플리케이션을 만들 수 있습니다.
참고 자료
- Firebase: https://firebase.google.com/
- Firestore: https://firebase.google.com/products/firestore
- Flutter: https://flutter.dev/