> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Content Delivery Network 빠른 시작

> 레거시 PlayFab CDN에서 키로 게임 자산을 저장하고 제공합니다. 폴더 경로, 에지 캐싱 동작, 업로드/덮어쓰기/삭제 지연 사항을 포함합니다.

<Info>
  PlayFab CDN은 이전에 CDN을 구성한 적이 있는 타이틀이 하나 이상 있는 계정에 대해 지원되는 레거시 기능입니다. 콘텐츠 관리 솔루션에 관심이 있는 신규 PlayFab 개발자에게는 Azure CDN 사용을 권장합니다. 시작하려면 [Azure CDN 문서](https://learn.microsoft.com/en-us/azure/cdn/)를 참조하세요.
</Info>

PlayFab Content Delivery Network(CDN)는 개별 자산을 파일 이름(*key*라고도 함)으로 고유하게 식별되는 파일로 저장합니다. 이는 자산을 키로 추가, 업데이트, 제거 및 검색한다는 것을 의미합니다.

PlayFab CDN을 사용하면 폴더별로 자산을 분리할 수 있습니다. 자산에 대한 폴더 경로는 *자산 키*의 일부가 됩니다.

다음 예는 `Android`라는 폴더 내에 저장된 유효한 자산 키입니다.

`Android/Image.png`.

사용자가 자산을 가져올 때 요청은 가장 가까운 에지 위치로 자동으로 라우팅되므로 콘텐츠는 가능한 최상의 성능으로 전달됩니다.

그러나 다음 예에서 볼 수 있듯이 이는 파일 관리 작업에 지연을 발생시킬 수 있습니다.

* **파일 업로드**: 파일은 즉시 사용할 수 있습니다.

* **파일 덮어쓰기**: 새 파일로 덮어쓸 때까지 최대 24시간 동안 이전 파일이 사용자에게 표시됩니다.

* **파일 삭제**: 삭제 명령이 모든 에지 위치에서 파일을 제거하는 동안 파일은 최대 24시간 동안 계속 존재합니다.

## 자산 업로드

사용자가 자산을 가져올 수 있으려면 먼저 자산이 CDN에 업로드되어야 합니다. 이는 **Game Manager**에서 수행할 수 있습니다.

* 왼쪽 메뉴에서 **Content**를 선택합니다.
* **File Management** 탭을 선택합니다.
* 그런 다음 **Upload Files**를 선택합니다.

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-content-file-management-upload-files.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=8434341dcd92836b082c55dbaa661e4b" alt="Game Manager - Content - File Management - Upload Files" width="2560" height="1184" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-content-file-management-upload-files.png" />

수행할 수 있는 작업:

* 여러 **Files (1)** 을 선택합니다.
* 선택한 모든 파일이 목록 **(2)** 에 나타납니다.
* **Upload Files** 버튼 **(3)** 을 선택하여 파일을 제출합니다.

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-choose-and-upload-files.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=7c6bbd20066b2a6c40bdc062c8ec9603" alt="Game Manager - Choose and Upload Files" width="924" height="580" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-choose-and-upload-files.png" />

* 업로드된 파일이 목록 **(1)** 에 나타납니다.

* *폴더*도 관리할 수 있다는 점을 명심하세요.
  * 폴더를 만들려면 **New Folder** 버튼 **(2)** 을 선택합니다.

* **Folder name (1)** 을 입력합니다.

* **Create Folder** 버튼 **(2)** 을 선택합니다.

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-create-new-folder.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=b25109c958f0156cb00fd5a84d75ddbd" alt="Game Manager - Create New Folder" width="913" height="240" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-create-new-folder.png" />

이렇게 하면 트리에 새 폴더가 만들어집니다. 그런 다음 이 폴더를 선택하고 파일을 정상적으로 업로드할 수 있습니다.

또는 관리자 SDK를 사용하여 코드를 통해 자산을 업로드할 수 있습니다. 이는 두 단계로 구성된 과정입니다.

1. 먼저 [GetContentUploadUrl](xref:titleid.playfabapi.com.admin.content.getcontentuploadurl)을 호출하여 업로드 권한을 부여하는 미리 서명된 URL을 가져옵니다.
2. 그런 다음 URL을 사용하여 `HTTP PUT` 요청을 만들고 데이터와 (선택적으로) 콘텐츠 형식을 제공합니다.

미리 서명된 URL을 가져오는 방법을 보여주는 아래 스니펫을 사용하는 것을 고려하세요.

```csharp theme={null}
public void UploadFileToCDN(string key, byte[] content, string contentType = "binary/octet-stream") {
    GetUploadUrl(key, contentType, presignedUrl => {
        PutFile(presignedUrl, content, contentType);
    });
}

void GetUploadUrl(string key, string contentType, Action<string> onComplete) {
    PlayFabAdminAPI.GetContentUploadUrl(new GetContentUploadUrlRequest() {
        ContentType = contentType,
        Key = key
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void PutFile(string presignedUrl, byte[] content, string contentType = "binary/octet-stream") {
    // Implement your own PUT HTTP request here.
    // - Must use PUT method
    // - Must set content type Header
}
```

그런 다음 PlayFab Game Manager를 통해 결과를 확인할 수 있습니다. 파일이 목록에 있는지 확인하세요.

## 자산 가져오기

코드를 통해 자산을 다운로드하는 것은 자산 업로드와 동일합니다. 앞서 언급한 바와 같이 두 단계로 구성된 과정입니다.

1. 먼저 [GetContentDownloadUrl](xref:titleid.playfabapi.com.client.content.getcontentdownloadurl)을 호출하여 다운로드 권한을 부여하는 미리 서명된 URL을 가져옵니다.
2. 그런 다음 미리 서명된 URL을 사용하여 `HTTP GET` 요청을 만들고 데이터를 가져옵니다.

과정의 기본 골격을 보여주는 아래 스니펫을 사용하는 것을 고려하세요.

```csharp theme={null}
public void DownloadFileFromCDN(string key) {
    GetDownloadUrl(key, presignedUrl =>
    {
        GetFile(presignedUrl);
    });
}

void GetDownloadUrl(string key, Action<string> onComplete) {
    PlayFabClientAPI.GetContentDownloadUrl(new GetContentDownloadUrlRequest() {
        Key = key,
        ThruCDN = true
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void GetFile(string preauthorizedUrl) {
    // Implement your own GET HTTP request here.
}
```

앞서 언급했듯이 CDN은 파일 업데이트와 관련하여 지연이 발생할 수 있습니다. 개발 중에는 때때로 최신의 새로운 파일을 강제로 가져오는 것이 유용합니다.

[GetContentDownloadUrl](xref:titleid.playfabapi.com.client.content.getcontentdownloadurl) 호출을 통해 `ThruCDN` 매개 변수를 `False`로 설정할 수 있습니다. 반환된 URL은 캐시되지 않은 최신 파일을 가리킵니다.

<Note>
  게시된 게임 클라이언트는 이 옵션을 *절대* 사용해서는 안 됩니다!
</Note>


## Related topics

- [빠른 시작](/ko/services/playfab/economy-monetization/economy-v2/quickstart.md)
- [빠른 시작 iOS](/ko/services/playfab/sdks/c/quickstart-ios.md)
- [빠른 시작 macOS](/ko/services/playfab/sdks/c/quickstart-macos.md)
- [Unreal Engine 빠른 시작](/ko/services/playfab/sdks/unreal/quickstart.md)
- [Title Data 빠른 시작](/ko/services/playfab/live-service-management/game-configuration/titledata/quickstart.md)
