본문 바로가기
Study/Flutter

[Flutter] FireStore 사용하기

https://firebase.flutter.dev/docs/firestore/overview/

 

Cloud Firestore | FlutterFire

This page is archived and might not reflect the latest version of the

firebase.flutter.dev

 

위에 기본적인 사용 쿡북이 존재하며 잘 나와있지만, 실 사용을 하며 정리해보자.

 

1. FireStore 란?

FireStore는 NoSQL기반에,

파이어 베이스에서 제공하는 무료 클라우드 데이터베이스이다.

다양한 앱/웹 프로젝트에서 활용가능하며,

데이터를 저장하고 동기화하기 위한 유연하고 확장 가능한 기술이다.

실시간 수신기를 통해 클라이언트 앱 간에 데이터 동기화를 유지하고,

오프라인 지원을 제공하므로 네트워크 대기 시간이나 인터넷 연결에 관계없이 작동하는 반응형 앱을 구축할 수 있다.

 

 

2. 설치

FireStore는 firebase에 기반을 두는 기술이므로, firebase_core를 필수적으로 사용해야 한다. 

여기 사이트에서 cloud_firestore 를 확인하고 pub에 추가하여 설치하자..

pub에 추가하여 get 해주었다면 사용이 가능하다

 

3. 사용설정

이제부터 파이어스토어를 사용할건데, 

먼저 파이어베이스 콘솔에서 firestore 사용을 설정해주어야 한다.

아직 Firebase와 프로젝트를 연결 해주지않았다면 이 글을 보고 먼저 연결을 해주시기 바랍니다.

사용을 설정은 어렵지않으니, 가볍게 하나의 컬렉션에 하나의 문서를 임의로 추가해보자.

여기서 등장하는 Collection, Document 는 생소하다 생각하겠지만 어려울것 없다.

 

 

+ Collection, Document 란?

Documentkey : value 쌍의 데이터들로 구성되는 데이터 구조를 가진다.

 

RDB에서는 정해진 컬럼명에 정해진 길이의 자료형이 Value로 저장되야만 했다면,

nonRDB는 그저 원하는 Key:Value 를 중복을 허용해서 마음껏 만들어 넣을 수 있다.

 

기본키를 가지는 컬럼이 있는 RDB에서는 저장되는 순서가 중요하지 않았지만,

nonRDB는 키가 없이 저장되는 key : Value 쌍들의 순서일치 여부가 문서의 신원을 결정하는 중요한 역할을 한다.

 

이미 알겠지만, nonRDB은 Document안에 Document를 key안에 Value로 넣을수 있다.

{ 'employeeName' : 'Janice Collins',
  'department' : 'Software engineering',
  'startDate' : '10-Feb-2010',
  'pastProjects' : [
      { 'projectCode' : 189847,
         'projectName' : 'Product Recommendation System',
         'projectManager' : 'Jennifer Delwiney' },
      { 'projectCode' : 187731,
        'projectName' : 'Finance Data Mart version 3',
        'projectManager' : 'James Ross'},
      { 'projectCode': 176533,
        'projectName' : 'Customer Authentication',
        'projectManager' : 'Nick Clacksworth'},
      { 'projectCode' : 154812,
        'projectName' : 'Monthly Sales Report',
        'projectManager' : 'Bonnie Rendell'}
  ]
}

 

이러한 Document들이 저장되는 데이터가 Colletion이다.  (RDB로 치면, 테이블 )

이제 기본적인 NoSQL에 대해서도 알았으니 사용을 해보자!

 

 

4. FireStore 사용

1) 인스턴스 초기화

FireStore를 사용하기 위해서는 아래와 같이 앱에서 초기화를 해주어야한다.

FirebaseFirestore firestore = FirebaseFirestore.instance;

프로젝트 안에서 파이어베이스를 이미 사용하고 있다면,

아래와 같은 방법으로 FireStore 인스턴스를 만들수도 있다.

FirebaseApp secondaryApp = Firebase.app('SecondaryApp');
FirebaseFirestore firestore = FirebaseFirestore.instanceFor(app: secondaryApp);

이렇게 프로젝트 상위 레벨의 클래스에서 파이어스토어 인스턴스를 만들어주었다면,

데이터를 CRUD, 읽고 쓰고 수정하고 삭제할 수 있다.

 

2) Read 읽기 

get() 메소드를 통해  one-time Read를 한다.

  // JSON 객체 연결
  final lotteryNumberRef = FirebaseFirestore.instance.collection('lottery').withConverter<LotteryNumber>(
	fromFirestore: (snapshot, _) => LotteryNumber.fromJson(snapshot.data()!),
    toFirestore: (LotteryNumber, _) => LotteryNumber.toJson(),
    // drwNo로 데이터 가져오기
    LotteryNumber lotteryNumber = lotteryNumberRef.doc(drwNo.toString()).get();

  );

나의 firestore내에 lottery collection

먼저 NoSQL 기반에 firestore는 json형식으로 key:value 구조를 가지므로,

다루고자하는 객체안에서 fromJson과 toJson을 구현두어야한다. (선행지식이 필요하므로 여기글을 참고)

 

3) Write 쓰기

void createdata(String drwNo, LotteryNumber lotteryNumber){
	final lottery=FirebaseFirestore.instance.collection("lottery").doc(drwNo);
  	lottery.set(lotteryNumber);
}

 

4) update 수정

void deletedata(String drwNo){
  final lottery=FirebaseFirestore.instance.collection("lottery").doc(drwNo);
  lottery.delete();
}

 

5) Delete 삭제

void deletedata(String drwNo){
  final lottery=FirebaseFirestore.instance.collection("lottery").doc(drwNo);
  lottery.delete();
}