# 시작하기

> Follow this workflow to create a C# module in the Unity Editor and deploy it to the Cloud Code service.

이 페이지에는 Unity 에디터에서 C# 모듈을 만들고 Cloud Code 서비스에 배포하는 데 필요한 단계가 나와 있습니다.

> **Note:**
>
> **참고:** Unity 2021.3 이상 버전에서만 모듈과의 Unity 에디터 연동을 지원합니다.

워크플로의 예시에서는 간단한 Hello World C# 모듈을 만들어 봅니다. Cloud Code 모듈을 시작하려면 다음 단계를 따릅니다.

1. [Unity 에디터 설정:](#set-up-the-unity-editor) Unity Gaming Services 프로젝트를 Unity 에디터와 연결하고 필수 패키지를 설치합니다.
2. [C# 모듈 레퍼런스 파일 생성:](#create-a-c-module-reference-file) 에디터에서 모듈 레퍼런스 파일을 생성하고 해당 파일을 모듈 프로젝트에 연결합니다.
3. [새 모듈 생성:](#generate-a-new-module) Deployment 창에서 새 모듈을 생성합니다.
4. [바인딩 생성:](#generate-bindings) 솔루션에서 클라이언트 코드를 생성합니다.
5. [모듈 배포:](#deploy-the-module) Cloud Code 서비스에 모듈을 배포합니다.
6. [게임에서 모듈 함수 호출:](#call-a-module-function-from-your-game) 게임 클라이언트에서 모듈 엔드포인트를 호출합니다.

> **Note:**
>
> **참고:** 모듈을 생성하고 배포하기 위한 대체 저작(authoring) 메서드는 [모듈 작성](./how-to-guides/write-modules.md)을 참고하십시오.

## 동영상 가이드##video-walkthrough

Unity 에디터에서 C# 모듈을 생성하고 Cloud Code 서비스에 배포하는 단계를 자세히 알아보려면 다음 동영상을 참고하십시오.


[Video content](https://youtu.be/l_iD06qOu6Q)

## Unity 에디터 설정##set-up-the-unity-editor

에디터 내에서 Cloud Code 모듈을 생성하려면 필수 패키지를 설치하고 Unity Gaming Services 프로젝트를 Unity 에디터와 연결해야 합니다.

### 프로젝트 연결##link-project

[Unity Gaming Services 프로젝트](/cloud/projects.md)를 Unity 에디터와 연결합니다. [Unity Dashboard](https://cloud.unity.com)에서 UGS 프로젝트 ID를 확인할 수 있습니다.

새 Unity 프로젝트를 생성하면 프로젝트 생성 과정에서 Unity Gaming Services 프로젝트를 Unity 에디터와 연결할 수 있습니다.

기존 Unity 프로젝트로 작업하는 경우 Services 창에서 Unity Gaming Services를 Unity 에디터와 연결하는 것이 가능합니다.

1. Unity 에디터에서 **Edit** > **Project Settings** > **Services**를 선택합니다.

2. 프로젝트를 연결합니다.
   프로젝트에 Unity 프로젝트 ID가 없는 경우 다음 단계를 진행합니다.

   1. **Create a Unity Project ID** > **Organizations**를 선택한 다음 드롭다운에서 조직을 선택합니다.
   2. **Create project ID**를 선택합니다.

   Unity 프로젝트 ID가 있는 경우 다음 단계를 진행합니다.

   1. **Use an existing Unity project ID**를 선택합니다.
   2. 드롭다운에서 조직과 프로젝트를 선택합니다.
   3. **Link project ID**를 선택합니다.

Unity 프로젝트 ID가 표시되고 이제 Unity 서비스에 프로젝트가 연결됩니다.

### 필수 패키지 설치##install-required-packages

에디터에서 Cloud Code 모듈을 생성하려면 다음 패키지를 설치해야 합니다.

* Deployment
* Cloud Code(2.6.1 이상)

> **Note:**
>
> **참고:** [Unity - 매뉴얼: Package Manager 창](https://docs.unity3d.com/Manual/upm-ui.html)을 확인하여 Unity 패키지 관리자 인터페이스를 익혀 두십시오.

Unity 에디터 Package Manager 창에서 사용 가능한 패키지 목록에 이러한 패키지를 설치하고 추가할 수 있습니다.

1. Unity 에디터에서 **Window** > **Package Manager**를 선택하여 Package Manager 창을 엽니다.
2. **+ (add)** > **Add package by name…** 을 선택합니다.
3. `com.unity.services.deployment`를 입력합니다.
4. **Add**를 선택합니다.
5. `com.unity.services.cloudcode`에도 같은 단계를 반복합니다.

### .NET를 설치하고 설정합니다##install-and-set-up-net

에디터에서 Cloud Code 모듈을 배포하려면 [.NET](https://dotnet.microsoft.com/en-us/)를 설치해야 합니다.

에디터에서 기본값 .NET 경로를 설정하려면 다음 단계를 따릅니다.

1. Unity 에디터에서 Preferences 창을 엽니다.
   * Windows의 경우 **Edit** > **Preferences..** > **Cloud Code**를 선택합니다.
   * macOS의 경우 **Unity** > **Settings..** > **Cloud Code**를 선택합니다.
2. **.NET development environment** 섹션에서 **.NET path**를 .NET가 설치된 경로로 수정합니다.
3. **Apply**를 선택합니다.

### Deployment 창 설정##set-up-the-deployment-window

Deployment 창에서는 Cloud Code 모듈을 원격 환경에 배포할 수 있습니다.

Deployment 패키지를 설치한 경우, Unity 에디터에서 Deployment 창에 액세스할 수 있습니다.

* Unity 에디터 버전 2021.3+에서 **Window** > **Deployment**를 선택합니다.
* Unity 에디터 버전 2022+에서 **Services** > **Deployment**를 선택합니다.

Deployment 창을 사용하려면 먼저 배포하려는 환경을 선택해야 합니다.

1. Unity 에디터에서 [**Deployment 창**](#set-up-the-deployment-window)을 엽니다.
2. Deployment 창에서 **Deployment Settings**를 선택합니다.
3. 새 Environments 창의 **Editor Environment** 드롭다운에서 환경을 선택합니다.

## C# 모듈 레퍼런스 파일 생성##create-a-c-module-reference-file

Unity 에디터 내에서 Cloud Code 모듈을 생성하려면 Cloud Code C# 모듈 레퍼런스 파일을 만들어야 합니다. 이 파일은 솔루션에 대한 레퍼런스로, 배포하려는 C# 모듈 프로젝트가 포함되어 있습니다.

1. Unity 에디터에서 프로젝트(Project) 창을 오른쪽 클릭하고 **Create** > **Cloud Code C# Module Reference**를 선택합니다.
2. 모듈 레퍼런스 파일 이름을 `HelloWorld`로 지정합니다.
3. **Enter** 키를 누릅니다.


**Frame:**
![](/api/media?file=/cloud-code/media/images/create-ref-file.png)

이제 프로젝트 창과 Deployment 창에서 새로 만든 모듈 레퍼런스를 볼 수 있습니다.

## 새 모듈 생성##generate-a-new-module

Cloud Code 모듈은 게임 클라이언트가 호출할 수 있는 엔드포인트를 공개하는 단순한 .NET 프로젝트입니다. Unity 에디터에서 모듈을 생성하면 수정할 수 있는 모듈 템플릿이 포함된 솔루션이 만들어집니다. Cloud Code 모듈의 구조에 대해 자세히 알아보려면 [모듈 구조](./how-to-guides/module-structure.md)를 참고하십시오.

모듈 레퍼런스 파일을 사용하면 Deployment 창에서 새 모듈을 생성할 수 있습니다. 생성된 모듈에는 모듈 개발을 시작하는 데 도움이 되는 필수 기본 설정이 포함되어 있습니다.

1. Unity 에디터의 프로젝트 창에서 모듈 레퍼런스 파일을 선택합니다.
2. [인스펙터](https://docs.unity3d.com/Manual/UsingTheInspector.html) 창에서 **Generate Solution**을 클릭합니다.

Deployment 창에서 새 모듈을 직접 생성하는 것도 가능합니다.

1. Unity 에디터에서 [**Deployment 창**](#set-up-the-deployment-window)을 엽니다.
2. 모듈 레퍼런스 파일을 오른쪽 클릭하고 **Generate Solution**을 선택합니다.


**Frame:**
![](/api/media?file=/cloud-code/media/images/module-generate-solution.png)

생성된 모듈은 Unity 프로젝트의 루트 디렉토리인 `HelloWorld` 폴더에서 찾을 수 있습니다. 모듈은 .NET 프로젝트이며 수정과 확장이 가능합니다.

> **Note:**
>
> **참고**: Cloud Code 모듈은 .NET 프로젝트이므로 [NuGet 패키지 관리자](https://docs.microsoft.com/en-us/nuget/what-is-nuget)를 사용하여 종속성을 관리합니다. 호출 가능한 엔드포인트를 만들려면 Cloud Code 모듈에 Cloud Code Authoring 패키지가 필요합니다. 이는 프로젝트에 설치할 수 있는 NuGet 패키지이며 생성된 모듈에 이미 포함되어 있습니다.

## 바인딩 생성##generate-bindings

새 모듈을 생성하면 바인딩을 생성할 수 있습니다. 바인딩은 유형 안전성을 유지하는 클라이언트 코드로, 게임 클라이언트에서 모듈 엔드포인트를 호출하는 데 사용할 수 있습니다.

1. Unity 에디터의 프로젝트 창에서 모듈 레퍼런스 파일을 선택합니다.
2. [인스펙터](https://docs.unity3d.com/Manual/UsingTheInspector.html) 창에서 **Generate Bindings**를 선택합니다.

## 모듈 배포##deploy-the-module

모듈 엔드포인트에서 게임 클라이언트에 액세스할 수 있도록 하려면 Cloud Code 서비스에 모듈을 배포해야 합니다. [Deployment 창](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest/index.html?subfolder=/manual/deployment_window.html)을 사용하여 모듈을 배포할 수 있습니다.

모듈을 배포하려면 다음 내용을 따릅니다.

1. Unity 에디터에서 [**Deployment 창**](#set-up-the-deployment-window)을 엽니다.
2. 프로젝트 창에서 모듈 레퍼런스 파일을 선택합니다.
3. Deployment 창에서 **Deploy Selected**를 선택합니다.

자세한 내용은 [배포 패키지 매뉴얼](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest)을 확인하십시오.

성공적인 배포인 경우 프로젝트 창의 모듈 레퍼런스 창 옆에 초록색 체크 표시가 나타납니다.

## 게임에서 모듈 함수 호출##call-a-module-function-from-your-game

배포의 성공 여부를 확인하려면 게임 클라이언트에서 모듈 엔드포인트를 호출하면 됩니다. 생성된 모듈에는 `SayHello`라는 기본값 엔드포인트가 있습니다.

### SDK 설정##sdk-setup

게임에서 모듈 함수를 호출하려면 먼저 게임 클라이언트에서 Cloud Code SDK를 설정해야 합니다.

1. [Unity Dashboard](https://cloud.unity.com)의 Cloud Code 페이지를 통해 서비스를 활성화합니다.
2. Unity 패키지 관리자에서 Cloud Code와 Authentication SDK를 모두 설치합니다.
3. Unity 에디터에서 새 C# Monobehaviour 스크립트를 생성합니다. 자세한 내용은 Unity 매뉴얼의 [스크립트 생성 및 사용](https://docs.unity3d.com/Manual/CreatingAndUsingScripts.html)을 참고하십시오.

> **Note:**
>
> **참고**: Cloud Code 서비스에 액세스하려면 플레이어에게 유효한 플레이어 ID와 액세스 토큰이 있어야 합니다. Cloud Code API를 사용하려면 먼저 Authentication SDK로 플레이어를 인증해야 합니다.

### 모듈 함수 호출##call-the-module-function

다음 예시는 게임 클라이언트 내에 있는 `HelloWorld` 모듈에서 `SayHello` 모듈 함수를 호출하는 방법을 보여 줍니다.

*C#*

```cs
using Unity.Services.Authentication;
using Unity.Services.CloudCode;
using Unity.Services.CloudCode.GeneratedBindings;
using Unity.Services.Core;
using UnityEngine;

public class TestModule : MonoBehaviour
{
    private async void Start()
    {
        // Initialize the Unity Services Core SDK
        await UnityServices.InitializeAsync();

        // Authenticate by logging into an anonymous account
        await AuthenticationService.Instance.SignInAnonymouslyAsync();

        try
        {
            // Call the function within the module and provide the parameters we defined in there
            var module = new HelloWorldBindings(CloudCodeService.Instance);
            var result = await module.SayHello("World");

            Debug.Log(result);
        }
        catch (CloudCodeException exception)
        {
            Debug.LogException(exception);
        }
    }
}
```

> **Important:**
>
> **중요**: 지난 15분 내에 모듈에 어떤 트래픽도 수신되지 않으면 콜드 스타트 지연을 경험하게 될 수 있습니다. 모듈에 대한 후속 호출이 발생하면 이는 더 빠르게 처리됩니다.

## 다음 단계##next-steps

첫 번째 모듈 배포 이후의 단계를 살펴보십시오.

| **주제**                                                            | **설명**                               |
| ----------------------------------------------------------------- | ------------------------------------ |
| [모듈 구조](./how-to-guides/module-structure.md)                      | 모듈 구조에 익숙해집니다.                       |
| [다른 Unity 서비스와 연동](./how-to-guides/unity-services-integration.md) | 모듈을 다른 Unity Gaming Services와 연동합니다. |
| [외부 서비스와 연동](./how-to-guides/external-services-integration.md)    | 외부 서비스와 모듈을 연동합니다.                   |
| [유닛 테스트 작성](./how-to-guides/unit-testing.md)                      | 모듈용 유닛 테스트를 작성합니다.                   |
