랭킹 시스템 만들기
1. Firebase 개요
Firebase는 Google에서 제공하는 클라우드 기반 백엔드 서비스이다.
Unity 플러그인이 지원되어 프로젝트에서 비교적 쉽게 연결할 수 있다.
무료로 사용이 가능하지만, 용량 및 처리량 제한이 있어서 요금제를 고려해야 한다.
2. Firebase 데이터베이스 종류
Firebase에는 대표적으로 두 가지 데이터베이스가 있다.
- Realtime Database
- JSON 트리 구조로 데이터를 저장하며, 실시간 동기화 기능에 최적화된 DB
- 구조가 단순하고 빠르게 동기화해야 하는 경우(ex. 채팅, 랭킹, 간단한 상태 정보) 많이 사용됩니다.
- 데이터를 직렬화하여 JSON 형태로 업로드·다운로드한다.
- Cloud Firestore
- NoSQL 기반 문서-컬렉션 구조로 데이터를 저장함
- 트랜잭션, 복잡한 쿼리, 세분화된 보안 규칙 등을 지원하며 복잡한 구조를 다룰 수 있다.
- 대규모/복합 데이터, 고급 쿼리가 필요한 경우 적합
랭킹 랭킹 시스템처럼 간단한 데이터를 빠르게 읽고 써야 하는 경우에 Realtime Database가 적합하다.
3. Firebase Console 기본 설정
새로운 게시글로 작성 예정.
4. Database rule
Realtime Database / Firestore를 활성화하면, 기본적으로 read = false, write = false 상태이다.
이 상태이면 기본적으로 외부에서 데이터를 읽거나 쓸 수 없는데, 추가적인 인증 과정을 거치면 이 상태에서도 read/write가 가능하게 만들 수 있다고 한다.
중요한 정보를 다루지 않는 우리 프로젝트에서는 read = true, write = true로 설정했다.
5. Unity + Realtime Database 연동
1) 데이터 전송 방식 : REST API
REST API를 이용해 JSON으로 데이터를 송/수신한다.
2) UnityWebRequest, 코루틴
UnityWebRequest는 비동기로 동작한다.
따라서 코루틴(IEnumerator) 형태로 요청을 보내고 응답을 기다린 뒤 결과를 처리한다.
// ...
yield return www.SendWebRequest();
if (!www.isNetworkError && !www.isHttpError)
{
onSuccess?.Invoke();
}
else
{
Debug.LogError($"Upload Error: {www.error}");
}
// ...
이후 콜백을 이용해서 랭킹 갱신을 처리했다.
6. JSON 직렬화 - Newtonsoft.Json
유니티에서 많이 쓰이는 JSON 직렬화/역직렬화 라이브러리이다.
Package Manager에서 깃허브 링크로 다운로드하는 게 편하다.
https://github.com/JamesNK/Newtonsoft.Json
GitHub - JamesNK/Newtonsoft.Json: Json.NET is a popular high-performance JSON framework for .NET
Json.NET is a popular high-performance JSON framework for .NET - JamesNK/Newtonsoft.Json
github.com
이 라이브러리는 JsonConvert.DeserializeObject<T>() 같은 편리한 API를 제공한다.
이걸 활용해서 Dictionary로 변환해서 랭킹 시스템을 띄워줬다.
전체적인 데이터 업로드 다운로드 과정을 보면
- Unity 내장 JsonUtility로 스코어 데이터를 Json으로 변환 후 Byte[] 에 담아 DB에 보낸다.
// 객체를 JSON 문자열로 직렬화
string jsonString = JsonUtility.ToJson(yourObject);
// JSON 문자열을 UTF-8 바이트 배열로 변환
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonString);
- DB에서 받아온 데이터를 Newtonsoft.Json을 이용해 Dictionary로 변환한다.
// JSON 문자열을 Dictionary<string, object>로 변환
Dictionary<string, object> dataDictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);
( 25년 2월 2주차 공부 )인턴 하면서 배운 내용을 정리한 것입니다.
틀린 내용이 있다면 말씀해 주세요.

'Unity > 공부' 카테고리의 다른 글
[Unity] Share, WebGL Build (1) | 2025.02.13 |
---|---|
[Unity] 프로젝트 용량 줄이기 : 텍스처, 모델링 (2) | 2025.01.27 |
[Unity] 프로젝트 용량 줄이기 : 이미지 압축 (0) | 2025.01.22 |
[Unity] Unity에서 딜레이를 주는 방법 (1) | 2024.10.12 |