과제

시그니천·2024년 7월 23일

WEB SERVER

목록 보기
5/7

1. AWS 서버 및 MySQL 데이터베이스 설정

1) EC2 인스턴스 설정

A. EC2 인스턴스 시작

  • AWS 관리 콘솔로 이동
  • EC2로 이동하여 새 인스턴스를 시작
  • Ubuntu Server와 같은 Amazon 머신 이미지(AMI)를 선택
  • 인스턴스 유형을 선택(예: 무료 등급의 경우 t2.micro).
  • 인스턴스 세부 정보를 구성하고 필요에 따라 스토리지를 추가
  • HTTP(포트 80), HTTPS(포트 443) 및 MySQL(포트 3306)을 허용하도록 보안 그룹을 구성
  • 인스턴스를 시작하고 SSH를 사용하여 연결

2) LAMP 스택 설치

A. 패키지 목록 업데이트

sudo apt update

B. 아파치 설치

sudo apt install apache2
sudo systemctl start apache2
sudo systemctl enable apache2

C. MySQL 설치

sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

D. 보안 MySQL 설치

sudo mysql_secure_installation

E. PHP 설치

sudo apt install php libapache2-mod-php php-mysql
sudo systemctl restart apache2

3) phpMyAdmin 설치 및 구성

A. phpMyAdmin 설치

sudo apt install phpmyadmin

B. phpMyAdmin을 제공하도록 Apache 구성

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

C. Apache 다시 시작

sudo systemctl restart apache2

2. phpMyAdmin을 사용하여 MySQL 데이터베이스 및 테이블 생성

1) phpMyAdmin에 액세스

  • 웹 브라우저를 열고 http:///phpmyadmin으로 이동

2) 데이터베이스 생성

  • phpMyAdmin에 로그인
  • 데이터베이스 생성

3) 테이블 생성

  • 생성된 데이터 베이스 선택
  • 테이블 생성 ( 이름 : players )

3. Unity에서 GamePlayer 클래스 생성 및 테스트

1) GamePlayer 클래스 정의

public class GamePlayer
{
    public string Name;
    public int Score;
}

2) 데이터 직렬화 후 서버로 보내기

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour
{
    public GamePlayer player;

    void Start()
    {
        // 예제 플레이어 데이터
        player = new GamePlayer("PlayerOne", 1500);

        // 플레이어 데이터를 JSON으로 직렬화
        string jsonData = JsonUtility.ToJson(player);
        Debug.Log("Serialized JSON: " + jsonData);

        // jsonData를 서버로 보내는 코루틴 시작
        StartCoroutine(SendDataToServer(jsonData));
    }

    private IEnumerator SendDataToServer(string jsonData)
    {
        string url = "https://<your-ec2-public-ip>/save_player_data.php";

        WWWForm form = new WWWForm();
        form.AddField("playerData", jsonData);

        using (UnityEngine.Networking.UnityWebRequest www = UnityEngine.Networking.UnityWebRequest.Post(url, form))
        {
            yield return www.SendWebRequest();

            if (www.result != UnityEngine.Networking.UnityWebRequest.Result.Success)
            {
                Debug.LogError(www.error);
            }
            else
            {
                Debug.Log("Player data successfully sent to the server.");
            }
        }
    }
}
  

4. 데이터 저장 및 로드를 위한 PHP 스크립트 만들기

1) 데이터 저장을 위한 PHP 스크립트 (save_player_data.php)

<?php
$servername = "localhost";
$username = "your_db_username";
$password = "your_db_password";
$dbname = "game_database";

// 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Unity 게임에서 JSON 데이터 가져오기
$playerData = $_POST['playerData'];

// JSON 데이터를 PHP 연관 배열로 디코딩
$player = json_decode($playerData, true);

$Name = $player['Name'];
$score = $player['score'];

// 준비 및 바인드
$stmt = $conn->prepare("INSERT INTO players (name, score) VALUES (?, ?) ON DUPLICATE KEY UPDATE score=?");
$stmt->bind_param("sii", $Name, $score, $score);

if ($stmt->execute()) {
    echo "Player data saved successfully";
} else {
    echo "Error: " . $stmt->error;
}

$stmt->close();
$conn->close();
?>

2) 데이터를 로드하는 PHP 스크립트 (load_player_data.php)

<?php
$servername = "localhost";
$username = "your_db_username";
$password = "your_db_password";
$dbname = "game_database";

// 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 요청에서 플레이어 이름 가져오기
$Name = $_GET['Name'];

// 쿼리 준비 및 실행
$stmt = $conn->prepare("SELECT name, score FROM players WHERE name = ?");
$stmt->bind_param("s", $Name);
$stmt->execute();
$stmt->bind_result($Name, $score);

$player = array();
if ($stmt->fetch()) {
    $player['Name'] = $Name;
    $player['score'] = $score;
}

// 플레이어 데이터를 JSON으로 반환
echo json_encode($player);

$stmt->close();
$conn->close();
?>

5. Unity에서 데이터 가져오기

using UnityEngine;
using System.Collections;

public class GameManager : MonoBehaviour
{
    public GamePlayer player;

    void Start()
    {
        // 서버에서 플레이어 데이터 가져오기
        StartCoroutine(LoadDataFromServer("PlayerOne")); // "PlayerOne"을 실제 플레이어 이름으로 변경
    }

    private IEnumerator LoadDataFromServer(string playerName)
    {
        string url = "https://<your-ec2-public-ip>/load_player_data.php?Name=" + playerName;

        using (UnityEngine.Networking.UnityWebRequest www = UnityEngine.Networking.UnityWebRequest.Get(url))
        {
            yield return www.SendWebRequest();

            if (www.result != UnityEngine.Networking.UnityWebRequest.Result.Success)
            {
                Debug.LogError(www.error);
            }
            else
            {
                string jsonData = www.downloadHandler.text;
                player = JsonUtility.FromJson<GamePlayer>(jsonData);
                Debug.Log("Player data loaded: " + jsonData);
            }
        }
    }
}

profile
우주최강개발자

0개의 댓글