# 코드 패키징

> Package your C# code into compression files before you deploy as a live Cloud Code module.


**Frame:**
![](/api/media?file=/cloud-code/media/images/cloud-code-manual-module-publishing-workflow.svg)

모듈을 배포하려면 코드를 아카이브로 패키징해야 합니다. 아카이브는 모듈을 배포하는 데 사용하는 저작(authoring) 방법에 따라 .ccm 파일이거나 .zip 파일일 수 있습니다. .ccm 파일은 확장자가 .ccm으로 변경된 ZIP 파일입니다.

* [UGS CLI를 사용하여 배포](./write-modules/cli.md)하려면 코드를 .ccm 파일로 패키징해야 합니다.
* [Cloud Code 관리자 API](./write-modules/rest-api.md)는 .ccm 파일 또는 .zip 파일을 수용합니다.

x64 Linux에서 실행할 패키징 어셈블리만 아카이브에 포함되어야 합니다.

스토리지 제한을 확인하려면 [Cloud Code 제한](../reference/limits)을 참고하십시오.

> **Important:**
>
> **중요**: 이 작업은 고급 워크플로입니다. 대부분의 사용 사례에서 [Unity 에디터](./write-modules/unity-editor.md)나 [UGS CLI](./write-modules/cli.md)를 사용하여 자동 패키징으로 모듈을 배포하고 이 단계를 건너뛸 수 있습니다.

## R2R 컴파일##ready-to-run-r2r-compilation

모듈 프로젝트의 어셈블리를 생성할 때 R2R(Ready to Run) 컴파일을 활성화할 수 있습니다. 이렇게 하면 모듈에서 콜드 스타트(cold start) 시간이 약간 개선되지만, 첫 번째 호출 후 응답 시간은 개선되지 않습니다. 이 옵션으로 인해 어셈블리의 크기도 늘어납니다. 자세한 내용은 [ReadyToRun 컴파일](https://learn.microsoft.com/en-us/dotnet/core/deploying/ready-to-run)에 관한 Microsoft 기술 자료(영문)를 확인하십시오.

## 어셈블리 생성##producing-assemblies

이 포맷으로 어셈블리를 생성하려면 아래 섹션에 설명된 대로 .NET CLI(커맨드 라인 인터페이스) 또는 JetBrains Rider나 Microsoft Visual Studio 같은 IDE를 사용합니다. Cloud Code 모듈 엔드포인트가 포함된 [메인 모듈 프로젝트](./module-structure.md)에 대해서만 어셈블리를 생성해야 합니다.

> **Note:**
>
> **참고**: .NET 6.0을 사용하는 것이 좋습니다.

### .NET 커맨드 라인 인터페이스 사용##using-the-net-command-line-interface

.NET CLI로 어셈블리를 생성하려면 `dotnet publish` 커맨드를 사용합니다. 자세한 내용은 [dotnet publish](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-publish)에 관한 Microsoft 기술 자료(영문)를 참고하십시오.

```sh
dotnet publish -c Release -r linux-x64 -p:PublishReadyToRun=true
```

`<PublishReadyToRun>` 설정을 추가하여 프로젝트에서 타겟 플랫폼과 R2R 컴파일을 지정할 수 있습니다.

```xml
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
```

다음 커맨드를 사용하여 모듈을 퍼블리시합니다.

```sh
dotnet publish -c Release -r linux-x64
```

기본적으로 `bin/Release/net6.0/linux-x64/publish` 폴더에 어셈블리가 생성됩니다.

### Microsoft Visual Studio 사용##using-microsoft-visual-studio

Microsoft Visual Studio를 사용하여 어셈블리를 생성할 수 있습니다. 이렇게 하려면 다음 단계를 따릅니다.

1. 모듈의 C# 프로젝트를 오른쪽 클릭하고 메뉴에서 **Publish**를 선택합니다.
2. **Publish** 페이지에서 다음 단계를 진행합니다.
   1. **Folder**를 타겟으로 선택하고 **Next**를 선택합니다.
   2. **Folder**를 특정 타겟으로 선택하고 **Next**를 선택합니다.
   3. **Finish**를 선택합니다.
   4. Publish profile creation progress 페이지에서 **Close**를 선택합니다.
   5. Publish 창의 Publish 탭에서 **Show all settings**를 선택합니다.
   6. 타겟 런타임을 `linux-x64`로 설정합니다.
   7. (선택 사항) PublishReadyToRun을 활성화해야 합니다.
   8. **Publish**를 선택합니다.

자세한 내용은 Microsoft 기술 자료에서 [자습서: Visual Studio를 사용하여 .NET 콘솔 애플리케이션 퍼블리시](https://learn.microsoft.com/en-us/dotnet/core/tutorials/publishing-with-visual-studio?pivots=dotnet-7-0)(영문)를 확인하십시오.

### JetBrains Rider 사용##using-jetbrains-rider

JetBrains Rider를 사용하여 어셈블리를 생성할 수 있습니다. 이렇게 하려면 다음 단계를 따릅니다.

1. **Run** > **Edit Configurations...** 를 열거나 내비게이션에서 **Edit Configurations**를 선택합니다.
2. **+** > **Add New Configuration**을 선택합니다.
3. **Publish to folder** 구성 유형을 선택합니다.
4. **Target runtime**을 `linux-x64`로 설정합니다.
5. (선택 사항) **Enable ReadyToRun compilation**을 활성화합니다.
6. **Apply**를 선택하여 구성을 저장합니다.
7. 모듈을 퍼블리시할 준비가 되었으면 툴바에서 생성한 실행 구성을 선택한 다음 **Run**을 선택합니다.

자세한 내용은 JetBrains Rider 기술 자료 [폴더에 .NET 애플리케이션 퍼블리시](https://www.jetbrains.com/help/rider/Run_Debug_Configuration_Publish_to_Folder.html)(영문)를 확인하십시오.

## 어셈블리 패키징##packaging-the-assemblies

어셈블리를 생성한 후 아카이브에서 압축합니다. UGS CLI를 사용하여 배포하려는 경우 아카이브 확장자를 .ccm으로 설정하면 됩니다.

> **Note:**
>
> **참고**: Windows의 파일 탐색기를 사용하는 경우 아카이브 확장자를 .ccm으로 변경하려면 [일반 파일 이름 확장자를 활성화](https://support.microsoft.com/en-us/windows/common-file-name-extensions-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01)해야 합니다.

아카이브의 구조는 다음과 같습니다.

```text
MyModule.ccm
├─ MyModule.dll
├─ MyModule.deps.json
├─ Dependency1.dll
├─ Dependency2.dll
└─ ...
```

기본적으로 Cloud Code NuGet 패키지의 종속성이 여기에 포함됩니다.

> **Note:**
>
> **참고**: 생성된 어셈블리에는 .pdb 파일도 포함됩니다. 이러한 파일은 행 숫자로 스택 트레이스를 생성하는 데 필요합니다. 하지만 모듈을 실행하는 데는 필요하지 않습니다.

그런 다음 [UGS CLI](./write-modules/cli.md#deploy-modules) 또는 [Cloud Code 관리자 API](./write-modules/rest-api.md#deploy-modules)를 사용하여 아카이브를 배포할 수 있습니다.
