Firebase Firestore & Storage

threeplef·2022년 8월 12일
0

Flutter

목록 보기
19/29
post-thumbnail

Firebase

Firebase는 사용자가 좋아하는 앱과 게임을 빌드하고 성장시키는 데 도움이 되는 앱 개발 플랫폼이다. Google의 지원과 전 세계 수백만 기업의 신뢰를 받고 있다.

Firestore

Firestore는 유연하고 확장 가능한 NoSQL 클라우드 데이터베이스를 사용해 클라이언트 및 서버 측 개발에 사용되는 데이터를 저장하고 동기화 할 수 있는 플랫폼이다.
Cloud Firestore는 Firebase 및 Google Cloud의 모바일, 웹, 서버 개발에 사용되는 유연하고 확장 가능한 데이터베이스이다. Firebase 실시간 데이터베이스와 마찬가지로 실시간 리스너를 통해 클라이언트 애플리케이션 간에 데이터의 동기화를 유지하고 모바일 및 웹에 대한 오프라인 지원을 제공해 네트워크 지연 시간이나 인터넷 연결에 상관없이 원활하게 반응하는 앱을 개발할 수 있다.

  • Firestore 하면서 자주 발생하는 이슈

    1. 권한 문제 : 규칙 살펴볼 것
    2. 보안 규칙 : 문서에 Security 항목 참고
  • 네트워크 끊어졌을 때 오프라인 지원
    추후 네트워크 연결되면 동기화 된다.

  • 데이터 모델링
    컬렉션 - 문서 - 필드

Map 대신 객체 사용하기

  1. 먼저 fromJson(), toJson()을 가지는 모델 클래스 준비
class Movie {
  Movie({required this.title, required this.genre});

  Movie.fromJson(Map<String, Object?> json)
  : this(
    title: json['title']! as String,
   genre: json['genre']! as String,
  );

  final String title;
  final String genre;

  Map<String, Object?> toJson() {
    return {
      'title': title,
      'genre': genre.
    };
  }
}
  1. withConverter() 메서드를 사용하여 변환 가능
final moviesRef = FirebaseFirestore.instance.collection('movies').withConverter<Movie>(
  fromFirestore: (snapshot, _) => Movie.fromJson(snapshot.data()!),
  toFirestore: (movie, _) => movie.toJson(),
);
List<QueryDocumentSnapshot<Movie>> movies = await moviesRef
  .where('genre', isEqualTo: 'Sci-fi')
  .get()
  .then((snapshot) => snapshot.docs);
  
await moviesRef.add(
  Movie(
    title: 'Star Wars: A New Hope (Episode IV)',
    genre: 'Sci-fi'
  ),
);

Movie movie42 = await moviesRef.doc('42').get().then((snapshot) => snapshot.data()!);

Firestore ODM (Object Document Mapper)
현재 알파 버전, 주의깊게 살펴볼 것

Storage

Storage는 이름 그대로 클라우드 환경의 파일 저장소이다. 서비스를 이용하는 사용자의 사진, 문서, 동영상 등의 파일들을 업로드하고 다운로드 할 수 있다. 더욱이 업로드 된 파일의 URL을 제공하여 접근이 가능하기 때문에 앱에서 사용자의 프로필 사진을 Storage로 업로드한 후 업로드 된 프로필 사진의 URL를 이용해서 화면을 구성할 수 있다.

  • 주의사항 : 권한 들어가서 접근 가능 여부 확인하기
profile
하늘이의 개발 일기

0개의 댓글