# Cloud Code C# 모듈

> Deploy reusable, server authoritative C# libraries that allow multiple entry points and generate type-safe client bindings.

모듈은 재사용 가능한 서버 권한을 가지는 코드를 제공하기 위해 Cloud Code 서비스가 실행할 수 있는 C# 라이브러리입니다. Cloud Code 스크립트와 달리 모듈을 활용하면 모듈 내에서 여러 진입점을 사용하고 코드를 쉽게 재사용할 수 있습니다.

Unity 에디터에서 모듈에 바인딩을 생성하여 Cloud Code 클라이언트와 게임 간에 전송되는 데이터가 동일한 포맷을 사용하도록 합니다.

Unity로 빌드한 게임 또는 다른 클라이언트나 서버에서 모듈을 호출할 수 있습니다.

| 저작(authoring) 방법                                                    | 설명                                                                                                                           |
| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| [Unity 에디터](./how-to-guides/write-modules/unity-editor.md)          | Unity 에디터에서 Deployment 창을 사용하여 모듈을 생성 및 배포하고, 워크플로를 자동화하고, Cloud Code를 다른 Unity 서비스와 함께 배포합니다.                               |
| [Unity Gaming Services CLI](./how-to-guides/write-modules/cli.md)   | CLI를 사용하여 커맨드 라인에서 모듈을 배포하고 관리합니다. 여러 Unity 서비스 구성을 한 번에 배포하고 CI/CD와 연동합니다.                                                  |
| [Unity Dashboard](./how-to-guides/write-modules/unity-dashboard.md) | Unity Dashboard를 사용하여 배포된 모듈 목록을 미리 봅니다. 동일한 곳에서 [Remote Config](/remote-config.md) 등 다른 Unity Gaming Services에 액세스할 수 있습니다. |
| [REST API](./how-to-guides/write-modules/rest-api.md)               | REST API를 사용하여 모듈을 만들고, 배포하고, 관리합니다.                                                                                         |

> **Note:**
>
> Cloud Code C# 모듈은 \[Unity 스크립팅 API]의 네임스페이스 또는 그 외 요소에서 `UnityEngine`의 클래스를 사용할 수 없습니다. Cloud Code가 오픈 소스 \[.NET 런타임]\(최대 버전 9 지원)을 사용하기 때문입니다. 이는 Unity Runtime과는 별개이며 해당 \[스크립팅 백엔드]를 사용하지 않습니다.

## 일반적인 워크플로##typical-workflow

다음 프로세스는 일반적인 개발 주기를 자세히 설명합니다.

1. [C# 라이브러리 프로젝트를 생성](./getting-started.md)합니다. [Unity 에디터](./getting-started.md)에서 솔루션을 만들거나 [UGS CLI](./how-to-guides/write-modules/cli.md)를 사용하여 새 모듈 프로젝트를 생성합니다.
2. [코드를 작성](./how-to-guides/write-modules.md)합니다. Cloud Code C# 서비스 SDK를 사용하여 다른 [Unity 서비스](./how-to-guides/unity-services-integration.md)와 연동합니다. HTTP 클라이언트를 사용하여 [외부 서비스와 연동](./how-to-guides/external-services-integration.md)합니다.
3. [테스트하고 디버깅](./how-to-guides/unit-testing.md)합니다. 모듈의 유닛 테스트 프로젝트를 생성하여 모든 것이 의도대로 작동하는지 확인하거나, 라이브러리를 데브 환경에 배포하여 실제 사용자 데이터로 테스트합니다.
4. [모듈을 배포](./getting-started.md#deploy-the-module)합니다. [Unity 에디터의 Deployment 창](./getting-started.md#deploy-the-module)이나 [UGS CLI](./how-to-guides/write-modules/cli.md)를 통해 프로젝트를 배포하거나 Cloud Code 내에서 사용 가능하도록 합니다.
5. [모듈을 프로젝트와 연동](./getting-started.md#call-a-module-function-from-your-game)합니다. Cloud Code SDK를 게임에 임포트하고 제공된 메서드 중 하나를 사용하여 스크립트를 호출합니다.

## 시작하기##getting-started

모듈을 생성하고 실행하는 데 필요한 기본 사항을 알아봅니다.

| 주제                                           | 설명                                                                                                                                                                                                         |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [모듈 생성](./getting-started.md)                | 모듈을 시작합니다.                                                                                                                                                                                                 |
| [모듈 구조](./how-to-guides/module-structure.md) | 모듈 프로젝트의 구조에 대해 알아봅니다.                                                                                                                                                                                     |
| [모듈 작성](./how-to-guides/write-modules.md)    | [Unity 에디터](./how-to-guides/write-modules/unity-editor.md), [UGS CLI](./how-to-guides/write-modules/cli.md), [REST API](./how-to-guides/write-modules/rest-api.md)를 사용하여 모듈을 작성하는 방법을 알아봅니다.               |
| [모듈 실행](./how-to-guides/run-modules.md)      | [REST API](./how-to-guides/run-modules/rest-api.md)를 사용하거나 [Multiplay 서버](./how-to-guides/run-modules/game-server.md)에서 [Unity Runtime](./how-to-guides/run-modules/unity-runtime.md)의 모듈을 실행하는 방법을 알아봅니다. |
| [오류 처리](./how-to-guides/error-handling.md)   | 모듈에서 오류를 처리하는 방법을 알아봅니다.                                                                                                                                                                                   |
| [로깅](../logging/overview)                    | 로깅을 사용하여 모듈을 디버깅하는 방법을 알아봅니다.                                                                                                                                                                              |
| [제한 사항](./reference/limits.md)               | Cloud Code 모듈의 제한 사항에 관해 알아봅니다.                                                                                                                                                                            |
| [비용](./reference/cost.md)                    | Cloud Code 모듈의 비용에 관해 알아봅니다.                                                                                                                                                                               |

## 개발 필수 요소##development-essentials

모듈을 구조화하는 방법을 알아봅니다. 모듈에서 지원하는 종속성 삽입, DTO, 커스텀 직렬화 기능을 활용하면 더 원활하게 개발할 수 있습니다.

| 주제                                                                    | 설명                                                  |
| --------------------------------------------------------------------- | --------------------------------------------------- |
| [모듈 구조](./how-to-guides/module-structure.md)                          | 모듈 프로젝트의 구조에 대해 알아봅니다.                              |
| [종속성 삽입](./how-to-guides/initialize-modules/dependency-injection.md)  | 코드에서 종속성을 분리하는 방법을 알아봅니다.                           |
| [유닛 테스트](./how-to-guides/unit-testing.md)                             | 모듈용 유닛 테스트를 작성하는 방법을 알아봅니다.                         |
| [커스텀 직렬화](./how-to-guides/initialize-modules/custom-serialization.md) | `Newtonsoft.Json` 프로퍼티를 통해 커스텀 직렬화를 사용하는 방법을 알아봅니다. |
| [배치 요청](./how-to-guides/batch-requests.md)                            | 배치로 요청하는 방법을 알아봅니다.                                 |

## 배포 자동화##automate-deployment

모듈 개발과 배포를 간소화하기 위해 프로세스를 자동화할 수 있습니다.

| 주제                                                        | 설명                              |
| --------------------------------------------------------- | ------------------------------- |
| [CI/CD와 연동](./how-to-guides/automation.md)                | 모듈 배포를 CI/CD 파이프라인과 연동합니다.      |
| [로컬 배포 자동화](./how-to-guides/automate-local-deployment.md) | Cloud Code 서비스로의 모듈 배포를 자동화합니다. |

## 추가 연동##integrate-further

모듈을 다른 Unity Gaming Services 및 외부 서비스와 연동하여 크로스 플레이어 데이터에 액세스할 수 있습니다.

C# SDK를 사용하여 다른 서비스와 연동하려면 `NuGet` 패키지를 설치하거나 HTTP 클라이언트를 사용하면 됩니다.

| 주제                                                             | 설명                                               |
| -------------------------------------------------------------- | ------------------------------------------------ |
| [인증](./how-to-guides/authentication.md)                        | Cloud Code를 사용하여 게임 클라이언트를 인증하는 방법을 알아봅니다.       |
| [서비스 및 액세스 토큰 지원](./how-to-guides/token-support.md)            | Cloud Code가 지원하는 UGS 서비스와 액세스 토큰을 알아봅니다.         |
| [사용 가능한 라이브러리](./reference/available-libraries.md)             | Cloud Code 모듈에 포함된 사용 가능한 UGS SDK를 확인합니다.        |
| [액세스 제어](./how-to-guides/access-control.md)                    | 액세스를 제어하고 원치 않는 사용을 방지하는 방법을 알아봅니다.              |
| [Unity 서비스와 연동](./how-to-guides/unity-services-integration.md) | Cloud Code를 다른 Unity 서비스와 연결하는 방법을 알아봅니다.        |
| [외부 서비스와 연동](./how-to-guides/external-services-integration.md) | 외부 서비스와 연동하는 방법을 알아봅니다.                          |
| [크로스 플레이어 데이터와 상호 작용](./how-to-guides/cross-player-data.md)    | 다른 플레이어의 데이터에 액세스하고 이를 업데이트하는 방법을 알아봅니다.         |
| [플레이어에게 푸시 메시지 전송](./how-to-guides/push-messages.md)           | 푸시 메시지를 플레이어에게 보내는 방법을 알아봅니다.                    |
| [Triggers](/triggers.md)                                       | 예약 또는 이벤트에 대한 응답에서 트리거를 사용하여 모듈을 실행하는 방법을 알아봅니다. |

## 고급 구성##advanced-configuration

모듈에 대해 더 심층적인 구성이 필요한 경우 다음 가이드를 사용할 수 있습니다.

> **Important:**
>
> **중요**: 특정 사용 사례에 따라 모듈을 최적화하려는 고급 사용자를 위한 주제입니다.

| 주제                                                                                                     | 설명                                                                             |   |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | - |
| [수동 워크플로](./how-to-guides/manual-workflow.md)                                                          | 수동으로 모듈을 만들고, 패키징하고, 배포하는 방법을 알아봅니다.                                           |   |
| [코드 패키징](./how-to-guides/package-code.md)                                                              | 배포를 위해 모듈 코드를 `.ccm` 파일로 패키징하는 방법을 알아봅니다.                                      |   |
| [프로젝트 파일을 사용해 로컬 배포 자동화](./how-to-guides/automate-local-deployment.md#automate-using-the-project-file) | 프로젝트 파일을 사용하여 모듈 배포를 자동화합니다.                                                   |   |
| [데이터 전송 오브젝트](./how-to-guides/initialize-modules/dto.md)                                               | 데이터 전송 오브젝트를 사용하여 Cloud Code 클라이언트와 게임 간에 전송되는 모든 데이터에 동일한 포맷을 사용하는 방법을 알아봅니다. |   |
