# 로컬 배포 자동화

> Automate the deployment of your Cloud Code module with the Unity Gaming Services CLI or project file.

이 가이드에서는 UGS(Unity Gaming Services) CLI나 프로젝트 파일을 사용하여 Cloud Code 모듈의 배포를 자동화하는 방법을 보여 줍니다.

배포를 CI/CD 파이프라인에 연동하려면 [CI/CD와 연동](./automation.md)을 참고하십시오.

## 필수 조건##prerequisites

로컬 배포를 자동화하려면 Cloud Code 모듈과 UGS CLI가 필요합니다.

1. [Cloud Code 모듈](../getting-started)을 생성합니다.
2. [CLI 설치](https://services.docs.unity.com/guides/ugs-cli/latest/general/get-started/install-the-cli/)(Unity Gaming Services CLI)의 단계에 따라 UGS CLI를 설치하고, 구성하고, 인증합니다.

## UGS CLI로 자동화##automate-with-the-ugs-cli

UGS CLI는 솔루션을 배포하는 데 사용할 수 있는 `deploy` 커맨드를 제공합니다. `deploy` 커맨드는 모듈을 압축하여 Cloud Code 서비스에 배포합니다.

배포하려면 프로젝트 디렉토리의 터미널에서 다음 커맨드를 실행합니다.

```bash
ugs deploy <path_to_solution>
```

> **Note:**
>
> **참고**: 컴파일을 지원하려면 솔루션에 [메인 프로젝트](./module-structure.md#main-project)에 대한 퍼블리시 프로필이 포함되어야 합니다. 자세한 내용은 [C# 솔루션 배포](./write-modules/cli.md#deploy-c-solutions)를 참고하십시오.

## 프로젝트 파일을 사용하여 자동화##automate-using-the-project-file

빌드 시 프로젝트를 퍼블리시, 압축, 배포하도록 프로젝트 파일을 구성하는 경우 프로젝트 파일을 사용하여 Cloud Code 모듈의 배포를 자동화할 수 있습니다.

> **Note:**
>
> **참고**: 이 작업은 고급 워크플로입니다. 대부분의 경우 UGS CLI [배포 커맨드](#automate-with-the-ugs-cli)만 사용해도 충분합니다.

자세한 내용은 [프로젝트 파일 이해](https://learn.microsoft.com/en-us/aspnet/web-forms/overview/deployment/web-deployment-in-the-enterprise/understanding-the-project-file)에 관한 Microsoft 가이드를 참고하십시오.

이 스크립트에서는 [UGS CLI Deploy](./write-modules/cli.md#deploy-modules) 커맨드를 사용합니다.

### 프로젝트 파일 구성##project-file-configuration

다음 프로젝트 파일 구성을 사용하여 Cloud Code 모듈의 배포를 자동화할 수 있습니다.

```xml
<Target Name="RemoveDirectory">
    <RemoveDir Directories="$(OutDir)Module/" />
 </Target>
<Target Name="PublishModule" DependsOnTargets="RemoveDirectory">
    <Exec Command="dotnet publish -r linux-x64 --no-self-contained -o $(OutDir)Module/$(AssemblyName)" />
</Target>
<Target Name="ZipModule" DependsOnTargets="PublishModule">
    <ZipDirectory SourceDirectory="$(OutDir)Module/$(AssemblyName)" DestinationFile="$(OutDir)Module/$(AssemblyName).ccm" />
</Target>
<Target Name="DeployModule" DependsOnTargets="ZipModule">
    <Exec Command="ugs deploy $(OutDir)/Module/$(AssemblyName).ccm" />
</Target>
```

위 구성을 프로젝트 파일에 복사하여 붙여 넣습니다.

* `RemoveDirectory` 타겟이 `OutDir` 디렉토리에서 `Module` 디렉토리를 제거합니다.
* `PublishModule` 타겟이 모듈을 `Module` 디렉토리에 퍼블리시하고 필요한 어셈블리를 생성합니다.
* `ZipModule` 타겟이 `Module` 디렉토리를 압축합니다.
* `DeployModule` 타겟이 모듈을 Cloud Code 서비스에 배포합니다.

#### R2R 컴파일(선택 사항)##ready-to-run-compilation-optional

R2R(Ready to Run) 컴파일은 Cloud Code 모듈의 콜드 스타트 시간을 개선하는 선택적 기능입니다. 이 옵션이 모듈에 미치는 영향을 확인하려면 \[Ready to Run]\(./package-code.mdx#ready-to-run-r2r-compilation을 참고하십시오.

Ready to Run 컴파일을 활성화하려면 `PublishModule` 타겟에 `PublishReadyToRun` 프로퍼티가 포함되도록 다음과 같이 수정합니다.

```xml
<Target Name="PublishModule" DependsOnTargets="RemoveDirectory">
    <Exec Command="dotnet publish -r linux-x64  -p:PublishReadyToRun=true --no-self-contained -o $(OutDir)Module/$(AssemblyName)" />
 </Target>
```

### 타겟 실행##running-targets

타겟을 실행하려면 프로젝트 디렉토리의 터미널에서 다음 커맨드를 실행합니다.

```bash
msbuild /t:DeployModule
```

`msbuild ` 커맨드를 찾을 수 없는 경우 `msbuild` 경로를 `PATH` 환경 변수에 추가해야 할 수도 있습니다.

> **Note:**
>
> **참고**: `DeployModule`을 다른 타겟 이름으로 바꾸면 다른 타겟을 개별적으로 실행할 수 있습니다. 타겟은 서로 종속되어 있으므로 실행되는 모든 타겟은 자신이 종속된 타겟도 실행합니다.

### 예상 출력##expected-output

배포가 성공하면 다음과 같은 출력이 표시됩니다.

```text
Deployed:
    ExampleModule.ccm
```
