• 북마크

TIMELINE

[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(
0
로그인 후 추천 또는 비추천하실 수 있습니다.

댓글목록 2

먼북소리님의 댓글

인증/로그인
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
firebase login
//firebase init

먼북소리님의 댓글

툴 설치
npm install -g firebase-tools
: https://hello-bryan.tistory.com/95

댓글쓰기

적용하기
우편번호 - 우측 주소검색 클릭하여 검색
주소검색
Note: 기본주소
Note: 상세주소
Note: 장소명
자동등록방지 숫자를 순서대로 입력하세요.
전체 139 건 - 1 페이지

뉴스타파 특종! 김만배 음성 파일...윤석열이 '대장동 특검' 못 받은 이유

뉴스타파가 2021년 9월 15일 대장동 사건 핵심 인물인 김만배 씨의 충격적인 음성파일을 특종 보도했습니다.김 씨가 검찰 수사 직전인 지난해 9월 현직 기자 시절 동료였던 신학림 전 언론노조위원장과 나눈 대화로,“박영수 변호사와 윤석열 당시 대검 중…

242

결국 긱벤치 퇴출당한 갤럭시... GOS 이슈와 계속되는 의혹들 정리!

00:00 인트로+오프닝00:48 긱벤치 퇴출 소식02:03 GOS 이슈 요약03:21 의혹1) 일반앱 성능제한03:50 의혹2) 원격 성능 조작 가능성04:54 의혹3) 벤치마크는 예외였다05:41 삼성에 아쉬운 점06:53 발열관리에 대한 불만07…

242

열람중Firestore에 데이터 저장하고 뽑는 법

Firebase 서비스에서 사용가능한 데이터베이스는 2개가 있는데Realtime DatabaseFirestore이렇게 있습니다. 읽기횟수가 많다면 Realtime Database가 가격이 저렴합니다.사용법은 비슷한데 더 최근에 나온 Fires…

466 2

단 하루 만에!! 낙동강 오리알 신세 된 안철수. 이준석·김기현 잇따라 '개무시' 발언

안철수 국민의당 대표가 윤석열 국민의힘 대선 후보와의 단일화 발표 하루 만에국민의힘으로부터 배신을 당하는 모양새입니다.국민의힘 이준석 대표와 김기현 원내대표는 잇따라 안 대표 측에 지분은 물론 안 대표의 정치개혁안에 대해서도 전혀 합의된 바 없다고 말…

254

윤석열의 충격적 녹음파일 공개

미주 한인신문인 선데이저널이 윤석열 후보의 육성파일을 단독으로 입수해 공개했습니다.이 파일에는 보수 세력을 등에 업고 대통령 후보가 된 윤석열 후보의 검사시절박근혜 전 대통령과 이명박 전 대통령에 대한 신랄한 발언이 담겨있습니다.선데이저널이 지상보도하…

240

'일본 자위대 한반도 진입 가능' 윤석열 망언이 나오기까지

 윤석열 후보가 한미일군사동맹을 통해 유사시 일본 자위대의 한반도 진입이 가능하다고 했습니다.한일관계 악화는 한국 정부 때문이라거나, 후쿠시마 원전은 폭발하지 않았고 방사능 유출도 없었다는 등 일본 극우세력 주장에 동조해온 윤석열 후…

292