[TIL] Unity - Firebase 와 연동하기 (1)

MINO·2024년 12월 4일
post-thumbnail

2024-12-04


Firebase

Google이 제공하는 백엔드 서비스 플랫폼으로, 애플리케이션 개발에 필요한 다양한 도구를 제공한다. 서버 구축 없이도 클라우드 기반의 실시간 데이터베이스, 인증, 저장소, 분석, 테스트 등을 사용할 수 있다. 특히 Unity와 잘 통합되어 게임 개발에서도 효과적으로 활용 가능하다.

Firebase의 주요 특징

  • 클라우드 기반 백엔드 서비스 제공.
  • 서버리스 환경: 클라이언트에서 직접 Firebase와 통신 가능.
  • 실시간 동기화, 파일 저장, 인증 등 다양한 기능 지원.
  • 다중 플랫폼 지원: Android, iOS, Web, Unity 등.

예시) Firebase 를 활용해 리더보드 만들기

Firebase 의 공식 홈페이지에서 제공하는 학습 영상

1. Introduction to leaderboards

파이어베이스 공식 영상 - Introduction to leaderboards

리더보드와 순위 시스템을 위해서는
모든 플레이어를 DB 에 넣고 정렬한 다음, 각 플레이어의 순위를 정의할 수 있어야 한다.

  1. Cloud Firestore : Firebase 에서 제공하는 문서 기반의 NoSQL DB.
  • 대규모 애플리케이션에서도 빠르고 확장성 있는 데이터를 저장하고 쿼리할 수 있는 기능을 제공
  • 실시간 동기화 기능과 간편한 구조화된 데이터 저장으로 모바일, 웹, Unity 앱에 적합
  • 문서(Document) 와 컬렉션(Collection) 구조
  • Firestore 가 플레이어 기반에 맞춰 확장되어 샤딩 (Sharding) 과 같은 작업을 자동으로 처리해준다
    * 샤딩 (Sharding) : 데이터를 조각내 분산 저장하는 데이터 처리 기법
  • 백그라운드에서 추가 서버 용량을 확보하므로 걱정할 필요가 없다.
  • 플레이어의 수가 확장되더라도 접근 방식이 많이 바뀔 필요가 없다는 것을 의미
  1. Google Cloud Functions : 서버리스(serverless) 컴퓨팅 서비스
  • 특정 이벤트(트리거)가 발생했을 때 실행되는 작은 코드 조각(함수)을 작성하고 실행할 수 있는 플랫폼
  • 사용자는 서버나 인프라를 직접 관리하지 않고도, 이벤트 기반 어플리케이션을 구현할 수 있다.
  • Ex) Firestore 나 Realtime DB 에서 데이터가 변경될 때 알림 전송

2. Cloud Firestore Data model

Firebase - Cloud Firestore Data model (공식 문서)
Firebase - What is Cloud Firestore (유튜브)

Cloud Firestore 는 NoSQL Database 이다.
그렇다면 NoSQL 은 무엇일까?

NoSQL (Not Only SQL)

전통적인 관계형 데이터베이스(RDBMS) 와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스의 한 종류.

  • 유연한 스키마 : 고정된 테이블 구조 없이 데이터 구조를 유연하게 변경 가능 (JSON, BSON 등 문서 기반의 형식)
  • 수평적 확장성 : 데이터가 증가하면 더 많은 서버 (노드) 를 추가하여 확장 가능 (대규모 트래픽, 데이터를 처리)
  • 다양한 데이터 모델 : 키-값, 문서, 그래프 등 다양한 방식으로 데이터를 저장

NoSQL 이 아닌 DB (RDBMS)

관계형 데이터베이스 (Relational Database Management System) 으로, 데이터가 테이블 형태로 저장되는 DB.

  • 고정된 스키마 : 데이터 구조가 엄격하며, 스키마 변경이 복잡
  • SQL 사용 : 데이터를 조회, 삽입, 수정, 삭제할 때 SQL (Structed Query Langauge) 을 사용
  • 수직적 확장 : 성능 향상을 위해 더 강력한 하드웨어 추가
  • MySQL, Oracle DB, Microsoft SQL Server, SQLite Core…

행과 열로 이루어진 테이블에 데이터를 저장하는 구조

  • 모든 표는 고유의 도식이 있고, 엄격히 정의되어 있다.
  • 주요키와 외부키 등을 통해 서로 다른 데이터를 연결하기도 한다.

(02:58 ~ )
One thing that most of them have in common is that NoSQL databases are usually schema-less, which means there aren't any database-vel restrictions around what kind of data you can put at any point in the database.
대부분의 공통점 중 하나는 NoSQL 데이터베이스가 일반적으로 스키마가 없다는 것입니다.
즉, 데이터베이스의 언제든 어떤 종류의 데이터를 넣을 수 있는지에 대한 데이터베이스 유형에 다한 제한이 없음을 의미합니다.

필요한 경우에 필드를 추가하거나 변경함으로써 자신들의 DB 에서 반복 작업을 할 수 도 있고,
다른 문제도 일으킬 가능성이 적기 때문에 개발자들은 NoSQL 을 선호한다고 한다.
→ 그러나, 방어적으로 코드 작업을 해야할 필요가 증가하긴 한다.

NoSQL 의 장점

  • 쓰기 작업은 늘어나게 될 수 있지만, 데이터베이스의 읽기 작업은 매우 빨라진다.
  • 일반 DB 에 비해 아주 쉽게 여러 기계에서 데이터를 배포할 수 있다.
    • 일반 DB 의 경우, DB 의 양이 커진다면, 더욱 큰 하드웨어가 필요하게 된다. (수직적 확장-Scaling Vertically)
    • NoSQL 의 경우, DB 의 양이 커진다면, 다양한 서버에 걸쳐 데이터를 배포하고 모두 문제 없이 작동한다.


Cloud Firestore 의 문서 컬렉션 모델

Realtime DB 에서는 보통 Firebase 에 저장된 데이터를 큰 JSON tree 라고 한다.
(Key 와 Value 가 있고, 해당 값들은 다른 키와 값을 포함하는 오브젝트가 되기도 하는 트리모양이기 때문)

Cloud Firestore 는 오브젝트의 집합체이다.
모든 오브젝트는 문서와 집합체로 구성되어 나무처럼 생긴 위계 구조에 저장되어 있다.

문서 (Document)

  • 키 값이 쌍으로 구성되어 있고, 이는 Cloud Firestore 내의 필드를 의미한다.
  • 필드들의 값은 어떤 값도 될 수 있다.
    (string , number , binary data , 작은 JSON 값 , 맵 … )
  • 값에 매핑되는 필드를 포함하는 간단한 레코드
  • 각 문서는 이름으로 식별된다.
  • 문서의 복잡한 중첩된 객체를 맵 (map) 이라고 한다.
name : 
		first : "Kim"
		last : "Minwoo"
born : 1999

컬렉션 (Collection)

img1img2
  • 문서의 컨테이너
  • 컬렉션은 오직 문서만을 포함할 수 있으며,
    String 이나 2진 데이터 등 그 외의 대상은 포함할 수 없다.
  • 문서의 크기는 1MB 미만이어야 한다.
    ( 1MB 이상이라면, 쪼개야 한다.)
  • 문서는 다른 문서를 포함할 수 없다.
  • 문서는 다른 문서를 포함하는 하위 컬렉션은 지정할 수 있다.
  • Cloud Firestore 트리의 근본적인 뿌리는 컬렉션만을 포함할 수 있다.

일반적으로는 가장 필요한 데이터를 포함하는 문서가 나올 때까지 컬렉션 → 문서 → 컬렉션 → 문서 를 반복하여 접근한다.

DocumentReference documentRef =
db.Collection("Rooms").Document("RoomA").Collection("Messages").Document("Message1");

이렇게 파이어베이스와 유니티를 연동하기 전에
파이어베이스가 어떤건지 알아보았다.

파이어베이스와 유니티를 연동하는 작업을 하는 도중,
참고 유튜브나 블로그가 현재 버전과 많이 달라 원인 모를 버그가 발생하였을 때,
해결하는 시간이 좀 오래걸려서 아쉽다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글