본문 바로가기
Android/공부

Firebase 를 사용하기 전에!

by 소똥 2023. 9. 9.

넌 뭐니 !?

 

정의

Google에서 제공하는 클라우드 기반 앱 개발 플랫폼 [BaaS(Backend-as-a-Service)]

쉽게 개발, 배포, 운영할 수 있도록 기능을 제공하는 서비스 (실시간 데이터베이스, 인증, 스토리지, 클라우드 함수 등)

— > 즉, 서버 기능을 쉽게 만들 수 있게 해주는 API.

 

데이터베이스는 개발자가 유연하고 확장 가능한 방식으로 데이터를 저장할 수 있는 NoSQL 문서 지향 데이터 모델을 사용

데이터는 JSON 형식으로 저장되며 데이터베이스는 원자 트랜잭션 및 실시간 이벤트 알림을 지원

 

장점

쿠키-세션을 주로 사용하는 웹, 토큰을 주로 사용하는 모바일 플랫폼에서 통일된 API를 사용할 수 있기 때문에 다양한 플랫폼에서 동시 서비스 할 경우 유용

 


사용하기 위해 고려해야 할 것.

 

DB 저장소

  • Realtime Database

실시간 데이터 동기화와 관련된 애플리케이션에 적합

실시간 데이터베이스에서 데이터를 실시간으로 동기화할 수 있어, 친구 목록이 실시간으로 업데이트되어야 하는 경우에 적합

 

  • Cloud Firestore

더 강력한 쿼리 기능과 복잡한 데이터 구조를 지원

만약 친구 목록을 복잡한 쿼리로 처리해야 하거나 데이터 모델이 더 복잡한 경우, 적합

 

즉, 실시간 업데이트가 중요하다면 Realtime Database, 데이터 구조와 쿼리가 더 복잡하거나 확장성이 필요하다면 Cloud Firestore

 

데이터 모델 설계

Realtime Database와 Cloud Firestore 모두 NoSQL 기반이다.

따라서 실제로 어떤식으로 데이터를 저장해야할지 알아보자.

  1. 컬렉션(Collection): 컬렉션은 데이터의 주요 그룹. 예를 들어, 소셜 미디어 앱에서 사용자, 게시물, 댓글 등을 별도의 컬렉션으로 저장할 수 있음
  2. 문서(Document): 컬렉션 내의 개별 데이터 항목. 문서는 키-값(key-value) 쌍의 형태로 데이터를 저장하며, 일반적으로 JSON 형식으로 표현.
  3. 필드(Field): 문서 내에서 데이터의 속성 또는 필드를 나타냄. 예를 들어, 사용자 문서에서 이름, 이메일, 프로필 이미지 URL 등은 각각 필드로 표현

예를 들어, 사용자가 있고 사용자의 친구목록을 만든다고 하자.

 

컬렉션 "users":

  • 각 사용자는 별도의 문서로 표현
  • 사용자 문서의 키는 사용자의 UID(고유 식별자)
  • 각 사용자 문서는 다음과 같은 필드를 가질 수 있음 (이름, 이메일, 프로필 이미지 URL 등.)
/users
  /UID1
    - name: "John Doe"
    - email: "john@example.com"
    - profileImageUrl: "<https://example.com/john.jpg>"
  /UID2
    - name: "Alice Smith"
    - email: "alice@example.com"
    - profileImageUrl: "<https://example.com/alice.jpg>"

 

컬렉션 "friendships":

  • 친구 관계를 저장하기 위한 별도의 컬렉션을 만들 수 있음
  • 각 문서는 두 사용자 간의 친구 관계를 나타냄
/friendships
  /UID1_UID2
    - user1: "UID1"
    - user2: "UID2"
  /UID2_UID3
    - user1: "UID2"
    - user2: "UID3"

RDBMS와는 달리 모든 것이 key-value 구조로 되어있다. 즉, 번거롭지만 아래의 과정을 거쳐야 한다.

 

1) users-friendship 관계를 생성하기 위해서는users 컬렉션과 friendships 컬렉션을 생성한다. 

2) users 컬렉션에는 사용자 id를 key로, value는 사용자의 정보를 담아준다. 

3) friendships에 또다시 사용자 id를 key로 친구의 id들을 value로 저장해 주어야 한다.

 

즉, 관계 정의가 많은 구조에는 NoSQL이 불리하게 작용할 수 있다. 하지만 빠르게 데이터를 읽어와야 하는 상황에는 이점을 가진다. 

 

참고)
https://firebase.google.com/docs/database/web/start?hl=ko 
https://yozm.wishket.com/magazine/detail/522/