Unity/Unity Cloud(UGS)

[Unity] UGS - Cloud Code

달시_Dalsi 2024. 10. 25. 03:02

 

Cloud Code란?

Cloud Code는 Unity 클라우드 서비스 중 하나로, 게임 서버 없이도 서버 측 코드의 로직을 클라우드에서 실행할 수 있게 해주는 서비스입니다. 이를 통해 클라이언트와 서버 간의 데이터 전달이나 계산을 원활하게 수행하고, 민감한 게임 로직을 서버 측에서 처리할 수 있습니다. 주로 랭킹 시스템, 보상 계산, 이벤트 타이머 등 여러 게임 기능에 활용됩니다. 클라우드 기반으로 실행되어 게임 클라이언트 업데이트 없이도 빠르게 게임의 주요 설정과 로직을 변경할 수 있는 유연성을 제공합니다.

 

왜 Cloud Code를 사용해야 할까?

Cloud Code는 게임 로직을 서버에서 관리하게 해줍니다. 이를 통해 클라이언트에서 조작하기 어려운 보안이 필요한 작업을 안전하게 처리할 수 있습니다. 예를 들어, 클라이언트에서 직접 플레이어 보상을 계산하지 않고 서버에 요청해 서버에서 결과를 제공하도록 설정할 수 있습니다.

Cloud Code의 장점:

  • 보안성 강화: 클라이언트에서 접근할 수 없는 코드로 데이터 보호
  • 유지보수 용이: 서버 업데이트로 로직 수정 가능
  • 즉각 반영: 재배포 없이 로직 수정 가능

 

설정 방법

1. Unity 프로젝트 준비
UGS(Unity Gaming Services)와 연결된 Unity 프로젝트가 필요합니다. Unity 에디터에서 "Window > Package Manager"로 이동해 Cloud Code 패키지를 설치하세요.

 

2. Cloud Code 함수 생성

  1. Unity Dashboard에 접속해 Cloud Code 섹션을 찾습니다.
  2. New Script 버튼을 클릭해 새로운 Cloud Code 함수를 만듭니다.
  3. 예시로 플레이어가 로그인할 때마다 보상을 지급하는 GiveLoginBonus 함수를 추가합니다.함수 생성 후 Publish 버튼을 눌러 배포합니다.
// Cloud Code - GiveLoginBonus.js
module.exports = async function () {
    let bonusAmount = 100; // 보너스 금액 예시
    return bonusAmount;
};

추가 설명 : publish 왼쪽에 version 선택이 있는데 이는 다음과 같습니다.

 

  • Working Copy: 현재 작업 중인 버전을 나타냅니다. 이 버전은 개발자가 코드를 수정하고 테스트하는 중인 상태로, 아직 정식으로 배포되지 않은 임시 작업본입니다. Working Copy에서 코드를 자유롭게 수정하며 테스트할 수 있습니다.
  • 버전 번호(예: Version 1): 특정 시점에 배포된 함수의 고정된 버전을 의미합니다. 버전 번호가 붙은 상태로 배포된 함수는 클라이언트가 사용할 수 있으며, 수정이 불가능한 버전입니다. 일반적으로 배포가 완료되면 버전 번호가 붙은 상태로 관리되며, 이후 변경 사항은 Working Copy에서 계속 작업하여 업데이트된 버전으로 새로 배포할 수 있습니다.


3. 클라이언트에서 Cloud Code 호출하기

Unity 프로젝트의 코드에서 Cloud Code 함수를 호출하여 필요한 데이터를 받아올 수 있습니다. 예를 들어, Unity의 Cloud Code SDK를 사용해 함수 호출과 데이터를 송수신할 수 있습니다.

 

 

코드 작성 예제

using Unity.Services.CloudCode;
using Unity.Services.Authentication;
using Unity.Services.Core;
using UnityEngine;
using System.Threading.Tasks;

public class CloudCodeExample : MonoBehaviour
{
    async void Start()
    {
        await InitializeCloudCodeAsync();
        await GiveLoginBonus();
    }

    async Task InitializeCloudCodeAsync()
    {
        await UnityServices.InitializeAsync();

        if (!AuthenticationService.Instance.IsSignedIn)
        {
            await AuthenticationService.Instance.SignInAnonymouslyAsync();
        }
    }

    async Task GiveLoginBonus()
    {
        try
        {
            var result = await CloudCodeService.Instance.CallEndpointAsync<int>("GiveLoginBonus", new { });
            Debug.Log($"보너스 지급 완료: {result}");
        }
        catch (CloudCodeException e)
        {
            Debug.LogError($"Cloud Code 에러 발생: {e.Message}");
        }
    }
}

이 예제에서 클라이언트는 GiveLoginBonus 함수를 호출하여 서버 측에서 보상을 지급받습니다. 이처럼 중요한 로직은 서버에서 처리되어 보안과 일관성을 유지할 수 있습니다.

 

테스트

Unity에서 프로젝트를 실행해 결과를 확인합니다. GiveLoginBonus 함수 호출 시 콘솔에서 CloudCode에서 작성한 값만큼 출력되면 정상적으로 이루어진 것입니다.

 

마무리

Cloud Code는 게임 서버 개발 없이도 클라우드에서 주요 로직을 처리할 수 있는 유용한 도구로, 보안성과 유지 보수 측면에서 큰 장점을 제공합니다.

'Unity > Unity Cloud(UGS)' 카테고리의 다른 글

[Unity] UGS - Leaderboards  (1) 2024.10.27
[Unity] UGS - Asset Manager  (1) 2024.10.26
[Unity] UGS - Cloud Save  (0) 2024.10.24
[Unity] UGS - Remote Config  (0) 2024.10.23
[Unity] UGS - Player Authentication  (0) 2024.10.15