> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/ko/learn/advanced-features/managed-clusters.md).

# Managed Clusters

Edgegap 관리형 클러스터에서 사용자 지정 백엔드 서비스를 실행하고, 자체 인프라를 통합하는 빠른 시작 가이드를 확인하세요.

관리형 클러스터에 대해 알아보고 맞춤형 백엔드 솔루션으로 빠르게 시작하세요.

## ✔️ 소개

관리형 클러스터를 사용하면 자체 관리 게임 서비스와 게임 백엔드를 쉽고 빠르게 호스팅할 수 있습니다. 서비스 이미지를 준비하면, 이를 실행할 고가용성의 복원력 있는 클라우드 환경을 제공합니다:

* 플레이어 인증,
* 데이터 저장 - 계정, 진행 상황, 인벤토리, 보상, ...
* 소셜 서비스 - 채팅, 클랜, 리더보드, 토너먼트, ...
* 맞춤형 매치메이킹 - 다음을 사용하여 [#advanced-matchmaker](#advanced-matchmaker "mention"), [#nakama-by-heroic-labs](#nakama-by-heroic-labs "mention"), ...
* 서버리스 컴퓨팅 - 관리형 [서비스형 함수](https://github.com/openfaas/faas) (대안: cloudscript, lambda), ...

{% hint style="success" %}
보기 [매치메이킹](/ko/learn/matchmaking.md) 그리고 [서버 브라우저](/ko/learn/server-browser.md) 게임 클라이언트 통합을 시작하려면
{% endhint %}

프라이빗 클러스터는 서비스가 **플레이어에게 24시간 연중무휴 전용 컴퓨팅을 제공하도록 보장합니다**.

현재 제공 중인 [3가지 프라이빗 클러스터 티어](https://edgegap.com/resources/pricing#managed-infrastructure) 모두의 필요를 충족하기 위해:

<table><thead><tr><th width="160">티어</th><th align="right">취미용 티어</th><th align="right">스튜디오 티어</th><th align="right">엔터프라이즈 티어</th></tr></thead><tbody><tr><td>가장 적합한 대상</td><td align="right">열정적인 사용자,<br>개인 개발자</td><td align="right">상용 출시</td><td align="right">트래픽이 많은 출시</td></tr><tr><td>레이트 리밋 (req/s)</td><td align="right">200</td><td align="right">750</td><td align="right">2,000</td></tr><tr><td>리소스</td><td align="right">1 vCPU + 2GB RAM</td><td align="right">6 vCPU + 12GB RAM</td><td align="right">18 vCPU + 48GB RAM</td></tr><tr><td>이중화</td><td align="right">가상 노드 1개</td><td align="right">가상 노드 3개</td><td align="right">가상 노드 3개</td></tr><tr><td>가격, 시간당</td><td align="right">$0.0312</td><td align="right"> $0.146</td><td align="right">$0.548</td></tr><tr><td><strong>가격, 30일</strong><br>(중단 없는 사용)</td><td align="right"><strong>$22.464</strong></td><td align="right"><strong>$105.12</strong></td><td align="right"><strong>$394.56</strong></td></tr></tbody></table>

{% hint style="info" %}
당사의 클러스터는 최대 3.7GHz의 클록 속도를 갖춘 AMD/Intel CPU를 탑재한 클라우드 머신을 사용합니다.
{% endhint %}

## 🛠️ 개발자 도구

개선할 부분이 보이면, 저희에게 알려주세요: [커뮤니티 디스코드](https://discord.gg/NgCnkHbsGp).

원활한 경험을 즐기시길 바랍니다. 🚀

### Docker

서버의 안정성을 높이기 위해, 저희는 [Docker](https://www.docker.com/) - 가상화 소프트웨어를 사용하여 서버가 어디에서 어떻게 실행되든 운영체제 수준까지 모든 서버 코드 종속성이 항상 정확히 동일하도록 보장합니다.

{% hint style="info" %}
시청을 권장합니다 ["로컬에 설치하지 마세요" (비디오)](https://www.youtube.com/watch?v=J0NuOlA2xDc\&ab_channel=Coderized). **Docker를 사용할 때 Dockerhub를 사용할 필요는 없습니다**Docker ≠ Dockerhub. Docker를 프로그래밍 엔진으로 보고 Dockerhub를 앱 스토어로 생각하세요.
{% endhint %}

### Kubernetes(K8s)

[Kubernetes](https://kubernetes.io/docs/concepts/overview/)는 K8s라고도 하며, 컨테이너화된 애플리케이션(Docker 이미지)의 배포, 확장, 관리를 자동화하는 오픈 소스 시스템입니다. 애플리케이션을 구성하는 컨테이너를 손쉬운 관리와 탐색을 위해 논리적 단위로 묶습니다.

Edgegap 관리형 클러스터는 관리 목적으로 Kubernetes API를 제공합니다.

### K8s Lens

100만 명이 넘는 사용자를 보유한 [K8s Lens](https://k8slens.dev/) 은 세계에서 가장 인기 있는 Kubernetes IDE입니다. 클러스터에 연결하고, 탐색하고, 인사이트를 얻고, 배우고, 필요할 때 조치를 취하세요. Lens는 워크로드와 리소스의 모든 정보를 항상 올바른 맥락에서 실시간으로 제공합니다.

Edgegap 클러스터 Kubernetes API는 Lens나 다른 Kubernetes IDE를 통해 사용할 수 있습니다.

### Helm 패키지 관리자

[Helm](https://helm.sh/) 는 Kubernetes용으로 만들어진 소프트웨어를 찾고, 공유하고, 사용하는 가장 좋은 방법입니다. Helm은 Kubernetes 애플리케이션을 관리하는 데 도움을 줍니다. Helm Chart는 가장 복잡한 Kubernetes 애플리케이션까지도 정의, 설치, 업그레이드할 수 있도록 도와줍니다. Chart는 만들기, 버전 관리, 공유, 게시가 쉬워서 복사-붙여넣기는 그만하고 Helm을 사용해 보세요.

[Helm CLI 설치](https://helm.sh/docs/intro/install/) 는 개발자에게 클러스터 패키지를 관리할 수 있는 간단한 인터페이스를 제공합니다.

## 🚀 시작하기

☑️ [무료 Edgegap 계정을 등록하고](https://app.edgegap.com/auth/register) Managed Clusters를 잠금 해제하려면 종량제 요금제로 업그레이드하세요.

☑️ 다음으로 이동: [Managed Clusters](https://app.edgegap.com/cluster-management/clusters/list) 페이지.

☑️ 다음을 클릭하세요: **Create Cluster** 먼저, 다음을 입력하세요:

* **레이블** 클러스터를 나중에 쉽게 찾을 수 있도록,
* **클러스터 크기 -** 참조 [#introduction](#introduction "mention").

{% hint style="danger" %}
**개발 및 프로덕션 환경을 위해 별도의 클러스터를 만드는 것을 강력히 권장합니다.**
{% endhint %}

☑️ 예상 비용을 검토하고 **Create Cluster** 을 클릭하여 새 클러스터를 시작하세요.

☑️ 클러스터가 준비되면, **Kubeconfig를 클릭하여 구성과 자격 증명을 다운로드하세요** 새 클러스터에 연결하고 관리하기 위해.

☑️ [kubeconfig 파일을 이동하세요](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 다음을 위해 `kubectl` 에서 찾을 수 있습니다.

☑️ Lens 사용자: [kubeconfig 파일을 가져오세요](https://docs.k8slens.dev/getting-started/add-cluster/#specify-kubeconfig-files).

다음 명령으로 클러스터 연결을 테스트하세요 `kubectl get nodes` :

```bash
kubectl get nodes
NAME                            STATUS   ROLES    AGE    VERSION
lke334087-533013-294dcfe70000   Ready    <none>   10m   v1.31.0
lke334087-533013-4e69edc10000   Ready    <none>   10m   v1.31.0
lke334087-533013-50bf39880000   Ready    <none>   10m   v1.31.0
```

🙌 축하합니다, Managed Cluster 설정을 완료했습니다! 이제 서비스를 설치할 수 있습니다.

## 📦 Heroic Labs의 Nakama

{% hint style="success" %}
보기 [Managed Clusters](/ko/learn/advanced-features/managed-clusters.md#getting-started) 관리형 클러스터에 서비스를 설정하기 전에.
{% endhint %}

{% hint style="info" %}
Edgegap을 다음과 통합하세요: [Nakama 플러그인](https://github.com/edgegap/nakama-edgegap) + [Unity 플러그인](https://github.com/edgegap/edgegap-server-nakama-plugin-unity)! [다른 플랫폼/기능이 필요하면 문의하세요.](https://discord.gg/NgCnkHbsGp)
{% endhint %}

자체 호스팅할 다음 단계를 따르세요 [Nakama 게임 백엔드](https://heroiclabs.com/docs/nakama/getting-started/) 관리형 클러스터에서:

☑️ 설치: **인증서 관리자** 게임 클라이언트의 HTTPS 요청 사용을 지원하려면:

```bash
helm repo add jetstack https://charts.jetstack.io --force-update;
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --version v1.16.1 --set crds.enabled=true;
```

☑️ Lens: Services / Network 섹션에서 설치를 확인하세요, `cert-manager` 가 실행 중이어야 합니다.

☑️ 작성: **클러스터 발급자** 파일, 아래의 `<YOUR_EMAIL>` 를 교체하는 것을 잊지 마세요:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: <a data-footnote-ref href="#user-content-fn-1">&#x3C;YOUR_EMAIL></a>
    privateKeySecretRef:
      name: <a data-footnote-ref href="#user-content-fn-2">letsencrypt-staging</a>
    solvers:
    - http01:
        ingress:
          class: nginx
          
</code></pre>

{% hint style="danger" %}
)과 각 내부 포트에 대한 외부 포트가 할당됩니다. `letsencrypt-prod` 운영 클러스터용 `privateKeySecretRef`.
{% endhint %}

☑️ 생성: **클러스터 발급자** 명령줄에서:

```bash
kubectl create -f <FILE_PATH>/issuer.yaml
```

☑️ Lens: Custom Resources 섹션에서 설치 확인 / `cert-manager.io` - 클러스터 발급자가 생성되었습니다.

☑️ 설치하기 **nginx Ingress** 클라이언트 요청을 수신하고 클러스터의 서비스로 전달하기 위해:

```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace
```

☑️ Lens: Services / Network 섹션에서 설치를 확인하세요, `nginx` 가 실행 중이어야 합니다.

☑️ 다음을 생성하세요: **DNS 레코드 유형 A** DNS 공급자에서(예: [Cloudflare](https://developers.cloudflare.com/dns/get-started/)), URL을 나중을 위해 메모해 두세요. DNS 레코드의 **외부 IP는 DNS 레코드용** Lens의 Services / `ingress-nginx-controller` .

☑️ DNS 조회를 수행하여 DNS가 올바르게 설정되었는지 확인하세요 [DNSchecker 사용](https://dnschecker.org/ns-lookup.php).

다음 이름의 파일을 생성하세요 `values.yaml` 다음 내용으로(값은 직접 사용하세요):

<pre class="language-yaml"><code class="lang-yaml">isProductionEnvironment: true

# Nakama 서버의 외부 호스트 이름 - 이전 단계의 DNS 레코드
externalHostName: <a data-footnote-ref href="#user-content-fn-3">&#x3C;DNS_A_RECORD_URL></a>

nakama:
  # 배포할 Nakama 버전.
  # 사용 가능한 버전은 https://hub.docker.com/r/heroiclabs/nakama/tags 를 참조하세요.
  version: 3.26.0
  # Nakama 콘솔의 사용자 이름과 비밀번호
  username: <a data-footnote-ref href="#user-content-fn-4">&#x3C;USERNAME></a>
  password: <a data-footnote-ref href="#user-content-fn-5">&#x3C;PASSWORD></a>
</code></pre>

{% hint style="danger" %}
**위의 \<VALUES>를 자신의 값으로 바꾸세요** 위 파일에서.
{% endhint %}

☑️ Nakama helm chart를 배포하세요:

```bash
helm upgrade --install \
  --namespace nakama --create-namespace -f <FILE_PATH>/values.yaml \
  --version 1.0.0 <RELEASE_NAME> oci://registry-1.docker.io/edgegap/heroiclabs-nakama
```

☑️ Lens: Workloads / Deployments 섹션에서 설치를 확인하세요, `nakama` 가 실행 중이어야 합니다.

✅ **Nakama 콘솔에 연결하세요** 다음의 URL 및 자격 증명으로 `values.yaml` 파일.

🙌 축하합니다, 자체 호스팅 Nakama 게임 백엔드 설정을 완료했습니다!

### 서비스 업데이트

Managed Cluster에서 호스팅 중인 서비스를 업데이트하려면 다음 단계를 따르세요:

☑️ 다음을 업데이트하세요: `value.yaml` 파일을 새 파일로.

☑️ 다음 명령으로 helm chart를 업데이트하세요:

```bash
helm upgrade --reuse-values \
  --namespace nakama -f <FILE_PATH>/values.yaml \
  --version 1.0.0 <RELEASE_NAME> oci://registry-1.docker.io/edgegap/heroiclabs-nakama
```

☑️ 업데이트된 pod를 종료하여 변경 사항을 다시 로드하세요. 그러면 pod가 자동으로 재시작된 후 새 helm chart가 사용됩니다.

{% hint style="warning" %}
이것 **이번 업데이트로 짧은 다운타임이 발생합니다** 파드가 재시작하는 동안입니다.
{% endhint %}

🙌 축하합니다, Nakama Cluster 업데이트를 완료했습니다!

## 👷 고급 매치메이커

{% hint style="success" %}
보기 [Managed Clusters](/ko/learn/advanced-features/managed-clusters.md#getting-started) 관리형 클러스터에 서비스를 설정하기 전에.
{% endhint %}

다음 단계를 따라 호스팅하세요 [OpenMatch](https://open-match.dev/site/) 관리형 클러스터에서.

☑️ 설치: **인증서 관리자** 게임 클라이언트의 HTTPS 요청 사용을 지원하려면:

```bash
helm repo add jetstack https://charts.jetstack.io --force-update;
helm upgrade --install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --version v1.16.1 --set crds.enabled=true;
```

☑️ Lens: Services / Network 섹션에서 설치를 확인하세요, `cert-manager` 가 실행 중이어야 합니다.

☑️ 작성: **클러스터 발급자** 파일, 아래의 `<YOUR_EMAIL>` 를 교체하는 것을 잊지 마세요:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
  namespace: cert-manager
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: <a data-footnote-ref href="#user-content-fn-1">&#x3C;YOUR_EMAIL></a>
    privateKeySecretRef:
      name: <a data-footnote-ref href="#user-content-fn-2">letsencrypt-staging</a>
    solvers:
    - http01:
        ingress:
          class: nginx
          
</code></pre>

{% hint style="danger" %}
)과 각 내부 포트에 대한 외부 포트가 할당됩니다. `letsencrypt-prod` 운영 클러스터용 `privateKeySecretRef`.
{% endhint %}

☑️ 생성: **클러스터 발급자** 명령줄에서:

```bash
kubectl create -f <FILE_PATH>/issuer.yaml
```

☑️ Lens: Custom Resources 섹션에서 설치 확인 / `cert-manager.io` - 클러스터 발급자가 생성되었습니다.

☑️ 설치하기 **nginx Ingress** 클라이언트 요청을 수신하고 클러스터의 서비스로 전달하기 위해:

```
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx --create-namespace
```

☑️ Lens: Services / Network 섹션에서 설치를 확인하세요, `nginx` 가 실행 중이어야 합니다.

☑️ DNS 공급자에서 DNS 레코드 유형 A를 생성하세요(예: [Cloudflare](https://developers.cloudflare.com/dns/get-started/)), URL을 나중을 위해 메모해 두세요. DNS 레코드의 **외부 IP는 DNS 레코드용** Lens의 Services / `ingress-nginx-controller` .

☑️ DNS 조회를 수행하여 DNS가 올바르게 설정되었는지 확인하세요 [DNSchecker 사용](https://dnschecker.org/ns-lookup.php).

다음 이름의 파일을 생성하세요 `values.yaml` 다음 내용으로(값은 직접 사용하세요):

```yaml
isProductionEnvironment: false

director:
  credential:
    registry: <YOUR_DIRECTOR_REGISTRY>
    username: <YOUR_DIRECTOR_REGISTRY_USERNAME>
    password: <YOUR_DIRECTOR_REGISTRY_PASSWORD>
  image: <DIRECTOR_IMAGE>
  env: {
    "KEY": "VALUE"
  }

mmf:
  credential:
    registry: <MATCHMAKER_FUNCTION_REGISTRY>
    username: <MATCHMAKER_FUNCTION_REGISTRY_USERNAME>
    password: <MATCHMAKER_FUNCTION_REGISTRY_PASSWORD>
  image: <MATCHMAKER_FUNCTION_IMAGE>
  env: {
    "KEY": "VALUE"
  }

frontend:
  credential:
    registry: <FRONTEND_REGISTRY>
    username: <FRONTEND_REGISTRY_USERNAME>
    password: <FRONTEND_REGISTRY_PASSWORD>
  externalHostName: <YOUR_CLOUDFLARE_HOST_NAME> # 예: exemple.test.com
  image: <FRONTEND_IMAGE>
  env: {
    "KEY": "VALUE"
  }

# 모든 하위 차트에 표시되는 전역 설정
global:
  kubernetes:
    resources:
      requests:
        memory: 100Mi
        cpu: 100m
      limits:
        memory: 100Mi
        cpu: 100m
```

{% hint style="danger" %}
**위의 \<VALUES>를 자신의 값으로 바꾸세요** 위 파일에서.
{% endhint %}

☑️ 다음을 추가하세요 **Edgegap 저장소를** 저장소 목록에:

```bash
helm repo add edgegap-public https://registry.edgegap.com/chartrepo/edgegap-public
```

☑️ 고급 매치메이커 helm chart를 배포하세요:

```bash
helm upgrade --install \
  --namespace matchmaker --create-namespace -f <FILE_PATH>/values.yaml \
  --version 1.0.1 <RELEASE_NAME> edgegap-public/open-match-edgegap
```

🙌 축하합니다, Advanced Matchmaker 설정을 완료했습니다!

### 서비스 업데이트

Managed Cluster에서 호스팅 중인 서비스를 업데이트하려면 다음 단계를 따르세요:

☑️ 다음을 업데이트하세요: `value.yaml` 파일을 새 파일로.

☑️ 다음 명령으로 helm chart를 업데이트하세요:

```bash
helm upgrade --reuse-values \
  --namespace matchmaker -f <FILE_PATH>/values.yaml \
  --version 1.0.1 <RELEASE_NAME> edgegap-public/open-match-edgegap
```

☑️ 업데이트된 pod(director, mmf, frontend)를 종료하여 변경 사항을 다시 로드하세요. 그러면 pod가 자동으로 재시작된 후 새 helm chart가 사용됩니다.

{% hint style="warning" %}
이것 **이번 업데이트로 짧은 다운타임이 발생합니다** 파드가 재시작하는 동안입니다.
{% endhint %}

🙌 축하합니다, Advanced Matchmaker 업데이트를 완료했습니다!

### 지속적 배포

다음 셸 스크립트를 배포 파이프라인에 추가하여 서비스 업데이트를 자동화하세요:

```bash
#!/bin/bash

RELEASE_NAME="<RELEASE_NAME>"
NAMESPACE="matchmaker"  # 네임스페이스를 변경했다면 이것도 변경하세요.

helm upgrade --reuse-values -f <FILE_PATH>/value.yaml --namespace $NAMESPACE --version 1.0.1 $RELEASE_NAME edgegap-public/open-match-edgegap

echo "redis-tools 설치 중"
apt-get update
apt-get install -y redis-tools

DIRECTOR_DEPLOYMENT_NAME="$RELEASE_NAME-director"
MMF_DEPLOYMENT_NAME="$RELEASE_NAME-mmf"
CUSTOM_FRONTEND_DEPLOYMENT_NAME="$RELEASE_NAME-custom-frontend"
REDIS_HOST="$RELEASE_NAME-redis-master"

declare -A replicas

# 각 배포(director, mmf, custom-frontend)에 대해 pod를 중지합니다
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do
  echo "배포용 pod 중지 중: $deployment"
  replicas[$deployment]=$(kubectl get deployment $deployment -o=jsonpath='{.spec.replicas}' --namespace $NAMESPACE)
  kubectl scale deployment/$deployment --replicas=0 --namespace $NAMESPACE
done

# pod가 종료될 때까지 기다립니다
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do

  echo "배포용 pod 종료를 기다리는 중: $deployment"
  kubectl wait --for=delete pod -l app=$deployment --timeout=60s --namespace $NAMESPACE

  # wait 명령이 성공했는지 확인합니다. 그렇지 않으면 스크립트를 종료합니다
  if [ $? -ne 0 ]; then
    echo "배포용 pod 종료를 기다리지 못했습니다: $deployment"
    exit 1
  fi
done

# Redis 데이터베이스 정리
echo "Redis 데이터베이스 정리 중"
redis-cli -h $REDIS_HOST flushall

# 각 배포(director, mmf, custom-frontend)에 대해 pod 수를 원래대로 다시 조정합니다
for deployment in $DIRECTOR_DEPLOYMENT_NAME $MMF_DEPLOYMENT_NAME $CUSTOM_FRONTEND_DEPLOYMENT_NAME
do
  echo "배포용 pod를 ${replicas[$deployment]}로 재조정 중: $deployment"
  kubectl scale deployment/$deployment --replicas=${replicas[$deployment]} --namespace $NAMESPACE
done
```

{% hint style="warning" %}
이것 **이번 업데이트로 짧은 다운타임이 발생합니다** 파드가 재시작하는 동안입니다.
{% endhint %}

### Letsencrypt 인증서 검증(C#)

일부 클라이언트에서는 권장되는 Letsencrypt 인증서 검증이 다음 오류와 함께 실패할 수 있습니다:

```bash
Curl error 60: Cert verify failed. Certificate has expired. UnityTls error code: 7
```

{% hint style="success" %}
운영체제를 업데이트하면 오래된 루트 인증 기관으로 인한 문제를 해결할 수 있습니다.
{% endhint %}

최후의 수단으로, 게임 클라이언트는 사용자 지정 인증서 처리 함수로 구현할 수 있습니다:

````csharp
```csharp
public class CustomCertificateHandler : CertificateHandler
{
  private readonly string EXPECTED_CERT = "-----BEGIN CERTIFICATE-----<key>-----END CERTIFICATE-----\r\n";
  protected override bool ValidateCertificate(byte[] certificateData)
  {
    X509Certificate2 certificate = new X509Certificate2(certificateData);
    X509Certificate2 expectedCert = new X509Certificate2(Encoding.ASCII.GetBytes(EXPECTED_CERT));

    using (SHA256 sha256 = SHA256.Create())
    {
      Debug.Log("certificate.Thumbprint: " + certificate.Thumbprint);
      Debug.Log("expectedCert.Thumbprint: " + expectedCert.Thumbprint);

      return certificate.Thumbprint == expectedCert.Thumbprint;
    }
  }
}
```
````

사용법:

```csharp
UnityWebRequest request = UnityWebRequest.Get(...);
request.certificateHandler = new BypassCertificateHandler();
request.SendWebRequest();
request.certificateHandler.Dispose();
```

다음을 저장하는 것을 권장합니다. `EXPECTED_CERT` 값을 자체 파일 저장소에 저장하고 런타임에 가져오면 게임 클라이언트 업데이트를 배포하지 않고도 업데이트할 수 있습니다.

## 🟢 운영 및 관측 가능성

### 클러스터 티어 변경

출시 후 성공을 준비하고 최적화하여 출시 당일에 플레이어가 영향을 받지 않도록 하세요.

{% hint style="warning" %}
&#x20;클러스터 크기를 변경하려면 클러스터를 중지해야 합니다. 참조 [블루/그린 배포](https://circleci.com/blog/canary-vs-blue-green-downtime/) 무중단 업데이트를 위해.
{% endhint %}

### 지원 및 향후 업데이트

**고객님의 성공이 저희의 최우선입니다.** 맞춤 요청을 보내고 싶거나, 중요한 기능이 빠져 있다고 생각되거나, 의견이 있다면 [커뮤니티 디스코드로 연락해 주세요](https://discord.gg/MmJf8fWjnt).

[^1]: 귀하의 이메일로 교체

[^2]: 운영 환경에서는 letsencrypt-prod 사용

[^3]: 이전 단계의 DNS 레코드

[^4]: 관리자 사용자 이름을 직접 선택하세요

[^5]: 관리자용으로 안전한 비밀번호를 선택하세요
