개인 프로젝트

다른 데이터베이스 연동

hanui1210 2024. 9. 14. 14:08

1. Firebase (Firestore/Realtime Database)

Firebase는 Google에서 제공하는 클라우드 기반 서비스로, 특히 모바일 게임에서 많이 사용됩니다. Firebase는 Cloud FirestoreRealtime Database라는 두 가지 주요 데이터베이스 서비스를 제공합니다. 둘 다 클라우드에서 데이터를 저장하고 관리하며, 실시간 데이터 동기화가 가능합니다.

특징:

  • 클라우드 기반: 데이터를 로컬이 아닌 클라우드에서 관리.
  • 실시간 동기화: Firestore나 Realtime Database는 데이터가 변경될 때 실시간으로 사용자에게 반영.
  • 플랫폼 독립적: Android, iOS, Web, Unity 등 다양한 플랫폼에서 사용 가능.
  • 백엔드 관리 불필요: 서버 관리를 신경 쓰지 않고 데이터베이스와 보안 규칙 설정 가능.

Unity에서 Firebase 연동:

  1. Firebase SDK를 Unity 프로젝트에 설치.
  2. Firebase Console에서 프로젝트를 생성하고 Unity 프로젝트를 연결.
  3. Firestore 또는 Realtime Database를 사용하여 데이터를 관리하고 가져올 수 있습니다.
using Firebase.Firestore;

FirestoreDb db;

void Start() {
    db = FirestoreDb.DefaultInstance;
    LoadDialogueData();
}

void LoadDialogueData() {
    CollectionReference dialogueCollection = db.Collection("dialogues");
    dialogueCollection.GetSnapshotAsync().ContinueWithOnMainThread(task => {
        foreach (DocumentSnapshot document in task.Result.Documents) {
            Debug.Log("대사: " + document.GetString("dialogue_text"));
        }
    });
}

2. MySQL (with PHP or REST API)

MySQL은 매우 널리 쓰이는 관계형 데이터베이스(RDBMS)로, Unity에서는 주로 원격 서버에 저장된 데이터를 가져올 때 사용됩니다. MySQL과 같은 서버 기반 데이터베이스는 직접 Unity에서 접근하기보다는 PHP와 같은 서버 사이드 언어를 사용하여 REST API를 구축한 뒤, Unity에서 API를 호출해 데이터를 가져오는 방식으로 많이 사용됩니다.

특징:

  • 원격 데이터베이스: 대규모 데이터를 클라우드 서버에서 관리.
  • SQL 사용: 표준 SQL 언어를 사용해 데이터 관리.
  • 보안: PHP와 같은 중간 서버를 통해 보안이 강화됨.

Unity와 MySQL 연동 (PHP + REST API):

  1. MySQL에 데이터베이스 설정.
  2. PHP로 API 구축 (GET/POST 요청 처리).
  3. Unity에서 UnityWebRequest를 사용해 API로부터 데이터를 받아옴.
// example.php
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT * FROM dialogues WHERE id = 1";
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
echo json_encode($row);
?>
// Unity C# 코드
IEnumerator GetDialogueData() {
    UnityWebRequest www = UnityWebRequest.Get("https://yourserver.com/example.php");
    yield return www.SendWebRequest();

    if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) {
        Debug.LogError(www.error);
    } else {
        // JSON 데이터를 처리
        string jsonResult = www.downloadHandler.text;
        Debug.Log("서버 응답: " + jsonResult);
    }
}

3. MongoDB

MongoDBNoSQL 기반의 문서형 데이터베이스로, JSON 형식의 데이터를 쉽게 저장하고 처리할 수 있습니다. 관계형 데이터베이스와 달리 고정된 스키마가 필요 없기 때문에 유연하게 데이터를 다룰 수 있습니다. MongoDB도 MySQL과 마찬가지로 직접 Unity와 연결하기보다는 서버(API)를 통해 접근하는 방식이 주로 사용됩니다.

특징:

  • NoSQL: 고정 스키마가 없어 유연하게 데이터 구조 변경 가능.
  • JSON 기반 문서 저장: 데이터가 JSON 형식으로 저장되므로 직관적인 데이터 구조.
  • 확장성: 큰 데이터를 처리하는 데 적합하며, 클러스터링 기능으로 확장이 용이.

Unity와 MongoDB 연동 (Node.js + REST API):

  1. Node.jsMongoDB를 사용해 API 서버를 구축.
  2. Unity에서 해당 API를 호출하여 데이터를 가져옴.
// Node.js 서버 예시 (Express + MongoDB)
const express = require('express');
const mongoose = require('mongoose');
const app = express();

mongoose.connect('mongodb://localhost:27017/gameDB', { useNewUrlParser: true, useUnifiedTopology: true });

const dialogueSchema = new mongoose.Schema({ dialogue_text: String });
const Dialogue = mongoose.model('Dialogue', dialogueSchema);

app.get('/dialogue/:id', (req, res) => {
    Dialogue.findById(req.params.id, (err, dialogue) => {
        if (err) return res.status(500).send(err);
        res.json(dialogue);
    });
});

app.listen(3000, () => console.log('Server is running on port 3000'));

 

Unity에서는 UnityWebRequest를 사용하여 MongoDB에 연결된 API로부터 데이터를 받아옵니다.

IEnumerator GetDialogueData() {
    UnityWebRequest www = UnityWebRequest.Get("http://localhost:3000/dialogue/1");
    yield return www.SendWebRequest();

    if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError) {
        Debug.LogError(www.error);
    } else {
        string jsonResult = www.downloadHandler.text;
        Debug.Log("MongoDB 응답: " + jsonResult);
    }
}

 

4. PostgreSQL

PostgreSQL은 고급 기능을 제공하는 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 데이터 무결성과 복잡한 SQL 쿼리가 중요한 프로젝트에서 유용합니다. 마찬가지로, PHP나 Node.js로 API를 구축하여 Unity에서 데이터를 가져올 수 있습니다.

특징:

  • SQL 지원: 복잡한 SQL 쿼리를 처리할 수 있으며, 트랜잭션과 복잡한 데이터 무결성 관리 기능이 뛰어남.
  • 확장성: 확장 가능하며, 큰 규모의 애플리케이션에 적합.

PostgreSQL은 MySQL처럼 PHP 또는 Node.js를 통해 접근할 수 있으며, Unity에서 API를 호출하는 방식은 동일합니다.

5. Amazon DynamoDB

DynamoDB는 AWS에서 제공하는 NoSQL 데이터베이스로, 매우 높은 확장성과 성능을 자랑합니다. 대규모 게임 서버나 모바일 애플리케이션에서 주로 사용됩니다. AWS SDK를 사용해 Unity에서 DynamoDB와 직접 통신할 수 있습니다.

특징:

  • NoSQL: 유연한 스키마를 지원하며 대규모 데이터를 빠르게 처리.
  • 클라우드 기반: 서버 없이 AWS에서 데이터베이스를 관리.
  • AWS Lambda와 연동: 서버리스 아키텍처와 결합 가능.

Unity에서 AWS SDK 사용:

  1. AWS SDK for Unity를 설치.
  2. AWS 자격 증명을 통해 DynamoDB와 통신.
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.Model;

public class DynamoDBManager : MonoBehaviour
{
    private AmazonDynamoDBClient client;

    void Start() {
        client = new AmazonDynamoDBClient();
        GetDialogueData("dialogue_id_1");
    }

    void GetDialogueData(string dialogueId) {
        var request = new GetItemRequest {
            TableName = "Dialogues",
            Key = new Dictionary<string, AttributeValue> {
                { "DialogueID", new AttributeValue { S = dialogueId } }
            }
        };

        client.GetItemAsync(request, (result) => {
            if (result.Exception == null) {
                Debug.Log("대사: " + result.Response.Item["DialogueText"].S);
            } else {
                Debug.LogError("Error: " + result.Exception.Message);
            }
        });
    }
}

 

요약

  • Firebase: 실시간 데이터 동기화가 필요한 프로젝트에 적합.
  • MySQL: REST API를 통해 서버 기반의 대규모 데이터를 처리할 때 사용.
  • MongoDB: NoSQL 데이터베이스로 유연한 데이터 구조를 필요로 할 때 적합.
  • PostgreSQL: 복잡한 SQL 쿼리와 데이터 무결성이 중요한 프로젝트에서 사용.
  • Amazon DynamoDB: 클라우드 기반 확장성과 성능이 중요한 대규모 프로젝트에 적합.

'개인 프로젝트' 카테고리의 다른 글

json예시2  (0) 2024.09.15
json으로 대사처리  (2) 2024.09.15
데이터베이스 SQLite 사용  (2) 2024.09.14
대사를 대입했을때  (1) 2024.09.14
팝업창  (0) 2024.09.14