[flutter] Firestore에 데이터 저장하고 뽑는 법
본문
Firebase 서비스에서 사용가능한 데이터베이스는 2개가 있는데
Realtime Database
Firestore
이렇게 있습니다.
읽기횟수가 많다면 Realtime Database가 가격이 저렴합니다.
사용법은 비슷한데 더 최근에 나온 Firestore를 써보도록 합시다.
Firestore 특징
- NoSQL 데이터베이스입니다.
SQL 문법 없이 님들 평소에 쓰던 언어 그대로 써서 자료 입출력 가능
- 폴더를 하나 만들고 그 안에 문서들을 넣는 식으로 자료를 저장합니다.
컴퓨터 폴더 안에 워드 파일 하나 만들고 거기 자료 넣는 거랑 동작방식이 똑같습니다.
폴더는 collection, 문서는 document라고 부릅니다.
- document 안엔 Map 자료형으로 자료를 저장할 수 있으며
document 하나 당 최대 2MB의 문자자료만 저장가능합니다.
{ name : 'kim', age : 20 } 이런거 넣을 수 있는 것임
- 누가 어떤 document를 읽고 쓸 수 있는지 rules 메뉴에서 제한가능합니다.
- collection과 document의 실시간 변동사항 감지하는게 매우 쉽습니다.
Firestore 공간 만들기
Firebase console 들어가서 좌측에서 Firestore 누르고 데이터베이스 만들기 누르면 됩니다.
- 뭐 고르라고 하면 프로덕션모드를 선택하고
- 물리적 위치는 asia-northeast3 을 고릅시다. 이게 서울일걸요
▲ 컬렉션 시작 눌러서 컬렉션 만들면 됩니다.
컬렉션은 폴더입니다 비슷한 문서들을 안에 보관하면 됩니다.
예시로 product 라는 이름의 컬렉션을 하나 만들어봅시다.
안에 데이터는 저런 식으로 저장해봅시다. 문서 ID는 자동발급하면 됩니다.
문서를 하나 더 만들어봤습니다.
이게 여러분의 데이터베이스입니다.
컬렉션을 하나 만들고 문서를 넣고 문서 안에 데이터들 맘대로 { } 형식으로 넣으면 됩니다.
Firestore에 저장된 문서 가져오는 법
import 'package:cloud_firestore/cloud_firestore.dart';
final firestore = FirebaseFirestore.instance;
우선 dart 파일 맨 위에 이런 코드를 추가하면 됩니다.
그럼 이제 firestore.어쩌구 이런 코드를 짜서 여러가지 재밌는 기능들을 사용할 수 있습니다.
var result = await firestore.collection('product').doc('문서id').get();
print(result);
원하는 하나의 문서를 가져오고 싶으면 이렇게 코드짜면 됩니다.
문서id는 Firestore에 있던 문서의 id 넣으면 됩니다.
진짜 되는지 확인하려면 위 코드를 함수안에 담고 initState() 이런 곳에서 실행해보십시오.
권한 없다고 에러 뜨는데요
하지만 저것만 쓰면 대부분 "Permission 없음" 에러가 출력됩니다.
데이터를 꺼내려면 우선 Firestore 규칙 메뉴에 들어가서 누가 어떤 데이터를 읽을 수 있는지 정의부터 하셔야합니다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
테스트할 땐 규칙 이렇게 쓰면 됩니다.
지금은 모든 이름의 문서를
누구나 read, write할 수 있다고 정의해놓았습니다.
그럼 개나소나 모든 문서 읽을 수 있음
나중에
"문서에 저장된 id가 회원id와 일치하면 read 허락해라"
"로그인한 사람만 write 허락해라"
이런 식으로도 코드짤 수 있습니다.
Firestore 컬렉션의 모든 문서 가져오는 법
이런 코드를 짜면 해당 컬렉션에 있던 모든 문서를 가져와줍니다.
var result = await firestore.collection('product').get();
for (var doc in result.docs) {
print('dsf');
}
);
- 결과는 실은 result.docs 에 담겨오는데 문서는 여러개니까 보통 [ 문서1, 문서2, 문서3 ... ] 이렇게 보내줍니다.
- [] 이런 자료로 담겨오기 때문에 for 반복문을 이용하면 하나하나 출력해볼 수 있습니다.
반복문이라든지 그런게 처음이라면 프로그래밍 기초 공부할 때지 플러터같은거 할 때가 아님
- 문서가 없을 때의 예외 처리는 if문과 result.docs.isEmpty 이런거 쓰면 됩니다.
데이터 읽을 때
- price가 10000 이하인 것만 가져와달라는 쿼리를 작성할 수도 있습니다. where() 함수를 붙여봅시다.
- 실시간으로 변동사항이 생기면 알려주는 snapshots 이런 기능도 있습니다. 나중에 알아봅시다.
Firestore에 데이터 저장하는 법
await firestore.collection('product').add({'name' : '내복', 'price' : 6000});
이런 코드 실행하면 정말 product 컬렉션에 문서가 하나 생기고
그 안엔 {'name' : '내복', 'price' : 6000} 이런 데이터가 들어가있습니다.
버튼누르면 저거 실행해보고 한번 데이터 진짜 추가되었나 확인해보십시오
try {
await firestore.collection('product').add({'name' : '내복', 'price' : 6000});
print('성공');
} catch (e) {
print(에러);
}
await 문법 사용시 에러처리는 try, catch 문법을 이용해야합니다.
try 안에 있는거 해보고 에러나면 catch 안에 있는거 실행해달라는 문법입니다.
e 안엔 에러메세지 이런게 들어있습니다.
firestore.collection('product').add({'name' : '내복', 'price' : 6000}).then((){
print(
댓글목록 2
먼북소리님의 댓글
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
firebase login
//firebase init
먼북소리님의 댓글
npm install -g firebase-tools
: https://hello-bryan.tistory.com/95
댓글 포인트 안내