유니티

직접 해보면서 배우고 Edgegap에 첫 전용 서버를 배포하세요. 이 가이드를 마치면 비용 없이 Edgegap에 전용 서버를 배포하게 됩니다.

✔️ 준비

시작하기 전에 반드시 Edgegap에 무료 계정 생성 (신용카드 불필요).

개발 머신에서 몇 가지 필수 사항을 구성하세요:

Unity Linux 빌드 지원 모듈 설치
  • Unity Hub에서 탭 선택 설치, 접근 설정모듈 추가 Edgegap 플랫폼과 함께 사용하려는 각 Unity 버전에 대해:

  • 아래로 스크롤하여 다음 Unity 모듈을 선택하고 설치하십시오:

    • Linux 빌드 지원(IL2CPP),

      • Linux 빌드 지원(Mono),

      • Linux 전용 서버 빌드 지원

Docker Desktop(또는 Docker CLI)를 설치하세요
Edgegap의 Unity Dedicated Servers Quickstart 플러그인 설치

참조하십시오 공식 플러그인 저장소 설치에 대한 자세한 지침은.

서버 빌드에 자신이 있나요? 건너뛰기 유니티 또는 고급 기능 자세한 내용은.

⚙️ 1. 계정 연결

☑️ 로그인하고 Unity 콘솔에 Edgegap 플러그인과 관련된 새로운 오류가 없는지 확인하세요.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

!성공: 400 잘못된 요청 - POST | https://api.edgegap.com/v1/wizard/init-quick-start - {"message": "브라우저(또는 프록시)가 이 서버가 이해할 수 없는 요청을 보냈습니다."}

  • ZIP 파일을 복사해서 설치했거나 샘플 프로젝트를 사용하여 플러그인을 복사해 설치한 경우 Newtonsoft JSON 라이브러리를 포함한 패키지 종속성을 수동으로 설치해야 합니다. 자세한 내용은 공식 플러그인 저장소.

  • 문제가 계속되면 다음으로 문의하세요 커뮤니티 디스코드 도움이 필요한 경우.

🔧 2. 게임 서버 빌드

Windows, Mac 또는 Linux 머신을 사용하든 상관없이, Linux 런타임용으로 서버를 빌드해야 합니다현재 대부분의 클라우드 제공업체(Edgegap 포함)는 Linux에서 실행됩니다. 걱정 마세요, 플러그인을 사용하면 Linux 지식이 없어도 이를 수행할 수 있습니다.

☑️ 필수 Unity Linux 빌드 도구가 설치되어 있는지 확인하세요.

Unity Linux 빌드 지원 모듈 설치
  • Unity Hub에서 탭 선택 설치, 접근 설정모듈 추가 Edgegap 플랫폼과 함께 사용하려는 각 Unity 버전에 대해:

  • 아래로 스크롤하여 다음 Unity 모듈을 선택하고 설치하십시오:

    • Linux 빌드 지원(IL2CPP),

      • Linux 빌드 지원(Mono),

      • Linux 전용 서버 빌드 지원

☑️ 빌드 설정 편집하여 필요한 모든 게임 씬이 포함되었는지 확인하세요.

고급 Unity 사용자 - 선택적으로 Unity 빌드 설정을 변경하세요. 주의! 이로 인해 빌드가 깨질 수 있습니다.

☑️ 선택 사항: Edgegap Server Hosting 메뉴에서 초기 서버 씬에 포트 검증 및 환경 부트스트랩을 위한 넷코드 전용 스크립트를 추가하세요(계층 창에서 우클릭 / 에서).

단계 유니티을 완료하면 포트 검증 스크립트가 Netcode 주소나 포트가 Edgegap 앱 버전 포트 매핑 구성과 일치하지 않으면 경고를 기록합니다.

☑️ 구성에 만족하면 서버 빌드를 클릭하고 프로세스가 완료될 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 프로젝트 루트에 새 폴더가 생성됩니다 - Builds/EdgegapServer/ServerBuild .

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

Unity: 지원되는 단독 실행 대상은 Windows x64와 OpenXR이 포함된 OSX뿐입니다.

  • 패키지를 열고 서버를 빌드하기 전에 OpenXR을 비활성화하세요.

  • OpenXR 플러그인은 클라이언트에만 필요하며 Linux 서버 빌드와 호환되지 않습니다. 서버 빌드에서 제외해도 기능을 잃는 것은 아닙니다.

🐋 3. 서버 컨테이너화

개발자 팀으로 일할 때는 코드를 공유해야 합니다. 문제가 발생했을 때 ‘내 머신에서는 작동해’라는 말은 듣고 싶지 않습니다. 게임 서버는 성공한 게임의 경우 전 세계 수천 대의 서버 머신에서 안정적으로 실행되어야 합니다.

서버를 신뢰성 있게 만들기 위해 Docker를 사용합니다 - 운영체제 수준까지 포함한 모든 서버 코드 종속성이 서버가 어디서 어떻게 실행되든 항상 정확히 동일하게 유지되도록 하는 가상화 소프트웨어입니다.

다음 시청을 권장합니다 "로컬에 절대 설치하지 마세요" (비디오). Docker와 함께 Dockerhub를 사용할 필요가 없습니다. Docker ≠ Dockerhub. Docker를 프로그래밍 엔진으로, Dockerhub를 앱 스토어로 생각하세요.

☑️ 우선, 검증 버튼을 눌러 완료했는지 확인하세요 개발자 도구.

Docker Desktop(또는 Docker CLI)를 설치하세요

☑️ 다음 옵션들을 구성할 수 있습니다(또는 기본값을 유지):

  • 빌드 경로 는 서버 빌드 아티팩트에 대한 상대 경로입니다. 지금은 기본값을 유지합시다.

  • 이미지 이름 은 전송 전에 서버 빌드를 라벨링하는 고유 식별자입니다.

    • 보통 게임 이름을 포함합니다 - 예: “my-game-server”.

  • 이미지 태그 는 이미지의 특정 버전을 가리키는 식별자입니다.

    • “빌드 아티팩트”라는 용어는 때때로 이미지의 특정 버전을 가리키는 데 사용됩니다.

    • 타임스탬프는 태깅에 좋은 옵션입니다. 예: 2024.01.30-16.23.00-UTC .

  • Dockerfile 경로 는 이미지 레시피를 사용자화하는 데 사용할 수 있습니다.

    • 지금은 기본 설정을 유지하는 것을 권장합니다. 자세한 내용은 나중 섹션 유니티.

  • 선택적 docker 빌드 매개변수 를 통해 Docker에 세부 지침을 추가할 수 있습니다.

☑️ 구성에 만족하면 Docker로 컨테이너화를 클릭하고 프로세스가 완료될 때까지 기다린 후 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 로컬 머신에 새 이미지가 생성됩니다. Docker Desktop에서 Local(기본) 아래의 Images 탭이나 docker CLI에서 docker images .

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

/bin/bash: docker: 명령을 찾을 수 없음 또는 Packages\com.edgegap.unity-servers-plugin\Editor를 찾을 수 없습니다

  • 우선, 단계 개발자 도구.

  • 을 완료했는지 확인하세요. Edgegap 계정을 확인했는지 확인하세요. 확인 링크가 이메일로 발송되었을 것입니다.

  • Docker Desktop을 업데이트한 후 일부 설정이 재설정되었을 수 있습니다. Docker Desktop 설정 / 고급으로 이동하여 “Docker의 CLI 도구 설치 구성 방법 선택:”에서 “시스템(암호 필요)”를 선택해 보세요.


docker build는 정확히 1개의 인수를 필요로 합니다

  • 이미지 태그에 공백 문자(공백, 탭 등)가 포함되지 않았는지 확인하세요. 이미지 태그 값을 다시 입력하면 실수로 공백을 복사한 것을 방지할 수 있습니다.


(HTTP 코드 400) 예상치 못한 - 잘못된 태그 형식


ERROR: failed to solve: ubuntu:22.04: failed to resolve source metadata for http://docker.io/library/ubuntu:22.04: failed to authorize: failed to fetch oauth token

  • 중국에 위치해 있나요? 차단 방화벽(Great Firewall)로 인해 연결이 방해받을 수 있습니다. 다음을 수동으로 실행해보세요 docker pull ubuntu:22.04 명령줄에서 수동으로(Win+R을 눌러 명령줄을 열고, 다음을 입력한 후 cmd 를 누르고 Enter).


System.IndexOutOfRangeException: 인덱스가 배열의 범위를 벗어났습니다.

  • ZIP으로 Unity 퀵스타트 플러그인을 설치한 경우 Unity 에디터 캐시가 손상되었을 수 있습니다. 플러그인 복사본을 삭제하고 git URL이나 Unity Asset Store에서 설치해 보세요. Newtonsoft.JSON 패키지는 다른 소스와 함께 자동으로 포함되므로 더 이상 필요하지 않을 수 있습니다.


내 도커 이미지 크기가 매우 크다(1GB 이상) / 매우 작다(100MB 미만). 괜찮나요?

  • 서버를 실행하고 성공적으로 연결할 수 있다면(참조 유니티) 일부 경우에는 괜찮을 수 있습니다. 그렇지 않다면 빌드 옵션을 검토하고 기본값으로 재설정한 후 옵션을 점진적으로 추가하여 빌드 크기에 미치는 영향을 확인하세요. 또한 유니티.


이 문서에 언급되지 않은 다른 문제가 발생했습니다.

🧪 4. 로컬에서 서버 테스트

서버 이미지를 업로드하고 배포하기(시간이 좀 걸릴 수 있음) 전에, 로컬(사용자 컴퓨터)에서 배포하고 게임 클라이언트를 연결해 서버 이미지가 제대로 작동하는지 확인해 보겠습니다.

☑️ 다음 옵션들을 구성할 수 있습니다(또는 기본값을 유지):

  • 서버 이미지 태그 이전 단계에서 사용한

    • 플러그인으로 마지막으로 빌드한 태그가 기본값입니다.

  • 선택적 docker 실행 매개변수 여러 포트를 노출하거나 macOS 머신에서 이미지를 실행할 때 제공할 수 있습니다.

    • 필요한 경우 컨테이너에 여러 포트를 게시할 수 있습니다. 각 포트에 대해 매개변수 -p {내부 포트}/{프로토콜} 를 추가하면 됩니다. 예: -p 8080/tcp -p 7770/udp 서버 포트 8080 를 TCP 연결을 위해 임의의 외부 포트에 매핑하고 서버 포트 7777 를 UDP 연결을 위해 동시에 임의의 외부 포트에 매핑합니다.

    • 서버 포트 구성은 Transport 또는 넷코드 전용 설정에서 찾으세요.

    • ARM 아키텍처(macOS M1, M2, M3 등)를 사용하는 머신을 사용하는 경우 선택적 docker 빌드 매개변수에 다음이 포함되어야 합니다: --platform=linux/amd64 .

☑️ 구성에 만족하면 로컬 컨테이너 배포, 프로세스가 완료될 때까지 기다리고 Unity 콘솔에 새로운 오류가 없는지 확인하세요. 이 단계를 완료하면 개발 머신에서 새 컨테이너가 시작됩니다 .

자세한 내용은 Docker Desktop / Containers 또는 Docker CLI 명령 docker ps .

☑️ 이제 Unity 에디터 게임 클라이언트를 로컬 도커 컨테이너에 연결하여 서버 이미지가 제대로 작동하는지 확인할 시간입니다. 넷코드 클라이언트 설정을 찾아 다음을 입력하세요:

  • localhost 또는 127.0.0.1 (대부분의 경우 동등) 를 서버 IP 대신에,

  • Docker Desktop / Containers / edgegap-server-test에서 찾은 임의의 외부 포트 값을 입력하세요.

☑️ 로컬 서버 컨테이너에 연결하여 문제없이 플레이할 수 있는 것을 확인한 후에는 기기의 다른 프로그램을 위해 리소스를 확보하기 위해 컨테이너를 삭제할 수 있습니다 🗑️.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

Unity 에디터 게임 클라이언트를 사용하여 로컬 도커 컨테이너에 연결할 수 없습니다.

  • 먼저 컨테이너 상태가 Up이고 Restarting 또는 Exited가 아닌지 확인하세요. 이는 런타임 예외를 나타냅니다. 컨테이너가 실행 중이 아니면 Docker Desktop의 Containers 탭(컨테이너 클릭) 또는 docker CLI에서 다음을 사용해 로그를 검사하세요. docker logs {container_id} --timestamps docker CLI를 통해.

  • 다음으로 서버 빌드의 Network Manager 포트 설정이 선택적 docker 실행 매개변수에 게시된 포트와 일치하는지 확인하세요. 일치하지 않으면 이 입력 필드 값을 재설정하거나 수동으로 변경하여 {container} 포트가 Network Manager 설정과 일치하도록 하세요. 프로토콜은 넷코드 설정에서 찾으세요.

  • 마지막으로 Unity 에디터 게임 클라이언트 넷코드 설정이 선택적 docker 실행 매개변수 에 게시된 포트를 사용하고 있는지 확인하세요(위 스크린샷 참조).


(세그멘테이션 오류) - 코어 덤프

  • ARM 아키텍처(macOS M1, M2, M3 등)를 사용하는 머신을 사용하는 경우 선택적 docker 빌드 매개변수에 다음이 포함되어야 합니다: --platform=linux/amd64 . 그렇지 않다면 이 입력 필드의 값을 재설정해 보세요.


SceneId 9120233082191360994이 SceneObjects에서 발견되지 않았습니다.

  • 이는 로드하려는 씬이 빌드에 올바르게 포함되지 않았음을 의미할 수 있으며, 이전 플러그인 버전에서 알려진 문제입니다. 이를 해결하려면 넷코드 통합 버전을 업데이트하거나 Edgegap 플러그인 업데이트.


http2: server: error reading preface from client //./pipe/docker_engine: 파일이 이미 닫혔습니다


Curl 오류 35: 인증서 핸드셰이크 실패. 치명적 오류. UnityTls 오류 코드: 7

  • 이 오류는 루트 SSL 인증서 검증 문제를 나타냅니다. 이전 플러그인 버전에서 알려진 문제입니다. 이를 해결하려면 다음을 시도해 보세요 Edgegap 플러그인 업데이트.

☁️ 5. Edgegap에 업로드

서버를 온라인에 배포할 시간입니다! 이제 이미지가 플레이어를 성공적으로 호스팅할 수 있으므로 이를 Edgegap에 업로드하고 전 세계 어디서나 실행할 수 있습니다. 이 가이드에서는 Edgegap의 컨테이너 레지스트리 (이미지 저장소).

☑️ 다음 옵션들을 구성할 수 있습니다(또는 기본값을 유지):

  • Edgegap의 애플리케이션 이름 은 이미지 이름과 일치하거나 사용자화할 수 있습니다.

    • 우리는 지금은 이미지 이름을 복사하도록 선택했습니다.

  • 애플리케이션 버전 은 태그와 일치하거나 사용자화할 수 있습니다.

    • 앱 버전 이름에 타임스탬프는 좋은 옵션입니다. 예: 2024.01.30-16.50.20-UTC .

    • 여러 애플리케이션 버전이 동일한 이미지 태그를 가리킬 수 있습니다. 예: v1.1.0dev .

    • 에 대해 자세히 알아보세요 앱 및 버전 나중에.

  • 서버 이미지 이름 단계 유니티.

  • 서버 이미지 태그 단계 유니티.

☑️ 구성에 만족하면 이미지 업로드 및 앱 버전 생성, 프로세스가 완료될 때까지 기다리고 Unity 콘솔에 새로운 오류가 없는지 확인하세요.

☑️ 대시보드로 이동됩니다 대시보드에서 선택적 설정을 구성할 수 있습니다. 이 단계를 완료하면 새 애플리케이션 버전이 생성됩니다그리고 당신의 빌드 아티팩트에 태그가 붙고 Edgegap의 컨테이너 레지스트리에 업로드됩니다.

☑️ 이제 새 애플리케이션 버전에 대한 포트를 정의하라는 메시지가 표시됩니다. Transport 또는 넷코드 전용 설정의 단계 유니티 에서 사용한 것과 동일한 서버 포트 값을 설정했는지 확인하세요.

✅ 이제 다음 단계로 진행할 수 있습니다.

문제 해결 및 FAQ

거부됨: 756.6 MiB의 스토리지 리소스를 추가하면 현재 사용량 4.3 GiB로 업데이트될 때 구성된 상한 4.7 GiB를 초과합니다 , 참조 "layer-sha256:--------"에 대한 커밋 실패: https://registry.edgegap.com/로의 PUT 요청에서 예상치 못한 상태가 반환되었습니다

  • 이미지 스토리지 공간이 다음에서 부족한 것 같습니다 컨테이너 레지스트리입니다. 사용하지 않는 빌드 아티팩트(있는 경우)를 제거하거나 서버 빌드 크기를 최적화하는 것을 고려하세요. 사용자 지정 Dockerfile 또는 .dockerignore를 사용하는 경우 필요하지 않은 파일을 이미지에 복사하고 있을 수 있습니다.


애플리케이션 한도 2개에 도달했습니다 , 도커 태그/버전을 업데이트할 수 없습니다: 애플리케이션 버전 한도 2개에 도달했습니다

  • 무료 요금제 한도에 도달했습니다. 계정 업그레이드를 고려해 주세요. 또는 기존 리소스를 통해 제거할 수 있습니다 대시보드.


플러그인/확장에 새 애플리케이션 버전이 나열되어 있지 않습니다.

  • 마지막 단계에서 앱 버전 생성 양식을 작성했는지 확인하세요.

🚀 6. 클라우드에 배포

이 안내서의 마지막 단계입니다. 이 단계를 완료하면 전 세계 어디에서나 플레이어가 접속할 수 있는 Edgegap 클라우드에 서버가 배포됩니다.

☑️ 애플리케이션과 버전을 선택하세요 이전 단계에서 배포합니다.

☑️ 준비가 되면, 을(를) 누르세요 클라우드에 배포, 도달할 때까지 기다리세요 배포를 누르세요. 이 단계를 완료하면 새 배포가 시작됨 귀하의 Edgegap 계정에.

☑️ 콘솔 출력에 새로운 오류가 없는지 확인하세요. 또한 귀하의 배포 오류가 표시되지 않는지 및 귀하의 배포 자원(가상 CPU 또는 메모리)이 100% 사용 중으로 표시되지 않는지 확인하세요. 그렇지 않으면 새 플레이어 연결이 거부되거나 서버가 재시작 루프에 빠질 수 있습니다. 문제 해결 단계는 아래를 참조하세요.

☑️ 이제 마지막 테스트를 수행하고 Unity 에디터 게임 클라이언트를 클라우드 배포에 연결하세요. 배포의 다음 정보에서 게임 클라이언트 연결 세부 정보를 입력하세요:

  • 호스트 URL 서버의 IP를 가리키며, 보통 NetworkManager 컴포넌트에 있습니다.

  • 외부 포트서버의 내부 수신 포트에 매핑되며, 보통 Transport 컴포넌트에 있습니다.

Edgegap 클라우드에 배포되는 리소스의 외부 포트는 잠재적 공격자(해커)를 지연시키고 피해를 일으키기 전에 탐지할 수 있도록 무작위로 선택됩니다.

☑️ 배포에 문제 없이 연결할 수 있는지 확인하고 테스트가 완료되면, 배포 중지 다음 빌드를 위해 계정의 용량을 확보하려면.

🙌 Edgegap에서의 첫 배포를 축하합니다! 더 알아보고 싶다면 계속 읽어보세요.

문제 해결 및 FAQ

클라이언트를 서버에 연결할 수 없음 - 요청 시간이 초과되었습니다. , 요청 시간이 초과됨 , 연결 실패 또는 포트 검증 실패

  • 먼저 배포가 Ready 상태인지, 배포 로그에 런타임 예외나 오류가 없는지 확인하세요. 배포가 중단된 경우 우리 대시보드.

  • 에서 로그를 검사하세요. Mirror 넷코드를 사용하는 경우 "Auto Start Server” 가 선택되어 있어야 합니다 NetworkManager 다시 빌드하고 푸시한 후 재배포하세요.

  • FishNet 넷코드를 사용하는 경우 “Start on Headless” 를 활성화해야 합니다 ServerManager다시 빌드하고 푸시한 후 재배포하세요.

  • Photon Fusion 2 넷코드를 사용하는 경우 서버가 배포 공개 IP, 외부 포트 및 roomCode 를 서버에서 전달하고 클라이언트에서 동일한 룸 코드를 “NetworkRunner.StartGame” 매개변수 StartGameArgs로 전달하도록 하세요. 배포 ID(예: b63e6003b19f)는 전역적으로 고유하며 클라이언트가 매치메이커심층 분석.

  • 를 통해 쉽게 접근할 수 있으므로 좋은 선택입니다. 다음으로 서버 빌드의 넷코드 설정에 있는 포트 설정이앱 버전 다음으로 서버 빌드의 넷코드 설정에 있는 포트 설정이 의 내부 포트와 일치하는지 확인하세요. 포트 매핑은

  • 을 편집하여 재빌드 없이 변경할 수 있습니다. 프로토콜은 넷코드 통합에서 찾으세요. 게임 클라이언트가 배포 상세 페이지에 표시된 외부 포트

  • 에 연결하고 있는지 확인하세요. 이 값은 보안상의 이유로 항상 무작위로 할당됩니다. 다음으로 서버 빌드의 넷코드 설정에 있는 포트 설정이 넷코드 통합에서 Secure Websocket(WSS) 프로토콜을 사용하는 경우 WSS 포트에 대한 포트 구성에 TLS 업그레이드가 활성화되어 있는지 확인하세요.

  • 중국에 위치해 있고 스마트 플릿(Smart Fleets)를 사용 중인가요? 연결이 차단될 수 있습니다. 플릿에 중국 내 서버를 추가하거나 VPN을 사용해 연결하는 것을 고려하세요.


내 배포가 중지/재시작되어 더 이상 로그에 접근할 수 없습니다.

  • 서버 프로세스가 예외로 인해 충돌하면 시스템이 자동으로 서버를 재시작하려고 시도합니다. 원인 파악을 위해 로컬에서 서버를 테스트 해 보세요.

  • 우리는 배포 기간 동안만 로그를 보관합니다. 배포가 중지된 후 로그를 검사하려면 타사 로그 저장소를 통합하세요..

  • 중단 원인을 모두 확인하려면 배포 를 참조하세요.


내 배포가 X분 후 자동으로 중지되었습니다.

  • 프리 티어 배포는 60분 제한이 있습니다. 계정 업그레이드를 고려하세요.

  • 모든 배포는 서버 정리 정책에 따라 인프라 유지관리 및 배포가 제대로 종료되지 않아 예상치 못한 비용이 발생하는 것을 방지하기 위해 실행 후 24시간이 지나면 종료됩니다. 장시간 실행되는 서버의 경우 스마트 플릿(Smart Fleets).

  • 중단 원인을 모두 확인하려면 배포 를 참조하세요.


를 고려하세요.

  • 내 배포가 준비되었는데 몇 분 동안 연결할 수 없습니다.

  • 배포가 Ready 상태가 되면 게임 엔진 초기화가 시작됩니다. 이 과정은 몇 초에서 몇 분까지 걸릴 수 있으며 이 기간 동안 서버는 플레이어 연결을 받지 않습니다.

  • 서버 초기화 시간을 줄이도록 최적화를 고려하세요.

  • 게임 클라이언트는 초기화 기간(길이에 따라) 동안 1초 간격으로 재시도하고 제한 시간이 지나면 매치메이킹으로 돌아가야 합니다.


로딩 씬을 추가하여 서버가 초기화(및 Unreal Engine의 경우 트래블)를 클라이언트와 동시에 수행하면서 둘의 상태를 동기화하도록 고려하세요. 내 Meta Quest 장치가 .

  • HTTP 0: 대상 호스트를 확인할 수 없음

  • 오류를 발생시킵니다.

    • Android 타겟용 Unity 앱을 빌드할 때 인터넷 액세스 권한이 출력 APK 클라이언트 빌드 아티팩트에서 자동으로 제거될 수 있습니다. ⚙️ 권한을 다시 추가하세요(클라이언트 재빌드 필요):

    • 프로젝트 설정 / OpenXR /


Meta Quest 지원 / 인터넷 권한 강제 제거(체크 해제).


진행 중인 게임에 플레이어가 참여하도록 허용하려면

  • 세션

  • 을 사용하는 것을 고려하세요.

  • 에서 로그를 검사하세요. Mirror 넷코드를 사용하는 경우 "Auto Start Server” 가 선택되어 있어야 합니다 NetworkManager 다시 빌드하고 푸시한 후 재배포하세요.

  • FishNet 넷코드를 사용하는 경우 “Start on Headless” 를 활성화해야 합니다 ServerManager다시 빌드하고 푸시한 후 재배포하세요.

  • 내 서버가 준비된 후 CPU 사용률이 100%로 표시됩니다.

  • 게임 엔진은 서버 초기화 중 CPU 집약 작업을 수행하는 경향이 있으므로 이것은 문제가 아닐 수 있습니다. 배포 시작 후 2-3분이 지났는데도 CPU 사용률이 떨어지지 않으면 서버를 최적화하거나 앱 버전 리소스를 증가시켜야 할 수 있습니다.


틱 레이트를 줄이면 서버가 수행하는 메시징 작업이 줄어들어 CPU 사용에 영향을 줄 수 있습니다. 프리 티어에서는 1.5 vCPU와 3GB 메모리(RAM)로 제한됩니다.

  • 새 앱 버전을 생성할 때 할당된 리소스를 늘릴 수 있습니다. 대시보드에서 앱 버전을 복제하고 서버나 이미지를 재빌드하지 않고도 필요에 따라 값을 조정할 수 있습니다.

  • 내 배포가 반복적으로 재시작되고 오류가 표시됩니다 NetworkManager OOM kill

  • 내 서버가 준비된 후 CPU 사용률이 100%로 표시됩니다.

  • 게임 엔진은 서버 초기화 중 CPU 집약 작업을 수행하는 경향이 있으므로 이것은 문제가 아닐 수 있습니다. 배포 시작 후 2-3분이 지났는데도 CPU 사용률이 떨어지지 않으면 서버를 최적화하거나 앱 버전 리소스를 증가시켜야 할 수 있습니다.


이는 할당된 메모리 양을 초과했기 때문에 발생합니다. 오브젝트 풀링, 압축 또는 씬에서 불필요한 오브젝트 제거를 통해 메모리 사용을 최적화하세요.

  • 프로젝트가 기본 씬을 로드하고 있는지 확인하세요. 기본 씬에

  • 가 포함되어 있고 해당 씬이 Unity의 Build Settings에 포함되어 있는지 확인하세요. 프리 티어에서는 1.5 vCPU와 3GB 메모리(RAM)로 제한됩니다. 때때로 서버의 메모리(RAM) 사용량이 급증하는데, 문제가 되나요?


할당된 앱 버전 메모리 양 내에 있는 한 문제되지 않습니다.

  • 할당된 앱 버전 메모리 양을 초과하면

(위 참조)가 발생합니다.

클라이언트/서버 설정이 제대로 작동하면, 반드시 프로젝트의 복사본을 저장하세요 (git과 같은 버전 관리 소프트웨어를 사용) 문제가 발생했을 때 항상 이전 작업을 추적할 수 있도록.

서버 수명 주기 및 검색 가능성과 관련된 주제에 대해 더 알아보려면 계속 읽어보세요.

같은 머신에서 실행되는 다른 서버 때문에 내 서버 성능이 영향을 받나요?

아니요, 우리 플랫폼은 할당된 리소스가 다른 스튜디오나 공유 인프라의 다른 서버에 의해 사용되지 않도록 보장합니다. Edgegap에서는 소음 이웃이 없습니다. 👉 다음 단계 배포 중지

경기 종료 및 플레이어가 떠난 후 배포를

중지하는 다양한 방법에 대해 알아보세요.

Unity 서버는 충돌하거나 메모리가 부족할 경우 자동으로 재시작됩니다.

  • 주입된 변수 배포 ID, 서버 IP 주소, 서버 위치 등 유용한 정보를 주입된 환경 변수를 통해 확인할 수 있습니다. 각 배포에는 자동으로 다음이 포함됩니다:

  • 배포 변수 - Edgegap에서 자동으로 제공, 매치메이커,

  • 매치메이킹 변수 - 특정 기능 사용 시 Edgegap에서 자동으로 제공,

앱 버전 변수 - 사용자 정의 키-값 쌍으로 구성 가능.

} else {

// 서버 코드

플레이어가 온라인이 될 때 적시에

배포됩니다.

서버 빌드 최적화 마지막 빌드 이후 변경된 자산만 재빌드하세요. 빌드 시간을 단축하려면

Unity의 증분 빌드

이미지에 사용하지 않는 파일을 복사하면 이미지 부피 증가, 업로드 지연, 캐싱 속도 저하 및 전체 서버 시작 지연이 발생합니다.

이미지 크기를 줄이기 위해 메시의 정적 배칭을 비활성화하세요.

빠른 빌드, 업로드 및 배포를 위해 메시 압축을 높음(High)으로 설정하세요.

서버 빌드 최적화 서버 빌드에서 일부 자산 로딩을 건너뛰려면.

  • 다중 단계 Docker 빌드(링크)

  • 큰 서버 종속 항목을 별도의 이미지로 분리하여 다중 단계 빌드에서 재사용하세요. Docker는 각 레이어를 캐시하고 이전 버전을 재사용하여 업로드 대역폭과 시간을 절약합니다. Dockerfile 명령 중 하나가 오류를 발생시키는 이유를 모르겠다면 로컬에서 디버깅해 보세요. 문제가 발생하기 직전 단계에 새 스테이지를 만들고(두 번째 FROM 명령 추가), --target 을 사용하여 빌드 프로세스를 문제 있는 단계에서 중지하도록 지시한 다음 docker exec -it {container} /bin/bash 로 컨테이너 내부의 대화형 터미널에 들어가세요. 이후 기본 이미지의 셸 명령(예: 우분투에서 top

)을 사용하여 더 조사할 수 있습니다.

서버 이미지 사용자화 유니티빌드 크기 최적화, 불필요한 종속성 또는 더 복잡한 시작 프로세스가 필요한 사용자를 위해 자체 Dockerfile 추가도 지원합니다. 단계

에서 사용자 지정 Dockerfile 경로를 선택적으로 제공할 수 있습니다. 이제 몇 가지 DIY 팁과 모범 사례를 공유합니다.

  • 웹소켓 또는 HTTPS 요청 사용 시 문제가 발생하나요? Curl 오류 35: 인증서 핸드셰이크 실패. 치명적 오류. UnityTls 오류 코드: 7 만약Dockerfile 명령 중 하나가 오류를 발생시키는 이유를 모르겠다면 로컬에서 디버깅해 보세요. 문제가 발생하기 직전 단계에 새 스테이지를 만들고(두 번째오류가 발생한다면 걱정하지 마세요. 이는 만료된 루트 권한 인증서를 포함한 이전 기반( base ) 이미지의 알려진 문제입니다. 이를 해결하려면 더 최신 기반 이미지 버전(예: ubuntu:22.04)으로 업데이트하고 update-ca-certificates 를 실행하세요. Dockerfile에 다음을 추가하세요:

항상 작동하는 서버 빌드로 작업하고 있는지 확인하세요.

  • 문제가 사용자 지정 Dockerfile과 관련되어 있다고 가정하기 전에 Unity 서버 빌드를 시작할 수 있는지, Unity에서 빌드 과정 중 예외나 오류가 발생하지 않았는지 확인하세요.

업로드하기 전에 항상 로컬에서 테스트하세요.

  • 로컬에서 이미지를 테스트하면 업로드가 완료될 때까지 기다리느라 많은 시간을 절약할 수 있습니다. 또한 Edgegap 리소스를 요구하지 않기 때문에 완전히 무료입니다 ✨.

  • 로컬에서 테스트할 때 내부 포트를 올바르게 설정했는지 확인하세요:

기본 사항을 숙지했는지 확인하세요. 모든 Dockerfile에는 몇 가지 필수 명령이 필요합니다:

  • FROM {image} 은(는) 베이스 이미지입니다. Unity 프로젝트의 경우 일반적으로 장기 지원되는 Linux를 사용하지만, 어떤 Linux 기반 베이스 이미지라도 괜찮습니다. 이들은 보통 dockerhub에 저장된 공개 이미지입니다. Dockerfile 참고 자료는 여기에 있습니다. Dockerfile 참고 자료는 여기에 있습니다.

  • COPY {source} {destination} 는(은) 호스트 머신의 Linux 서버 빌드를 이미지 내부로 복사하여 나중에 시작할 수 있도록 합니다. Dockerfile 참고 자료는 여기에 있습니다.

  • USER {user} 은(는) 다음에 와야 합니다 useradd (ubuntu) 명령 또는 동등한 명령, 모든 것을 root 로 실행하지 않는 것이 더 안전합니다. Dockerfile 참고 자료는 여기에 있습니다.

  • CMD {command} 는(은) 마지막 줄이 되며, 대부분 StartServer.sh 같은 시작 스크립트를 호출하여 모든 설정이 완료된 후 서버가 올바르게 초기화되도록 합니다. Dockerfile 참고 자료는 여기에 있습니다.

  • 절대 사용하지 마세요 VOLUME - 이 방법으로는 Edgegap에서 로컬 스토리지를 마운트할 수 없습니다. 대신 Endpoint Storage 기능과 S3 버킷 사용을 고려하세요. 참고: Endpoint Storage,

  • EXPOSE 7777/UDP 는(은) 필수 조건이 아닙니다! 이것은 내부 서버 포트를 컨테이너 외부에서 실제로 사용 가능하게 만들지 않으며, 개발자를 위한 힌트일 뿐입니다. 포트는

    • 로컬에서 테스트할 때 docker run <image> -p 7777/udp ,

    • 로 퍼블리시되거나 Edgegap 포트 매핑.

매개변수 선언은 가능한 한 늦은 시점까지 연기하세요. 서버 빌드 시간이 긴 경우 구성 가능성(configurability)이 조합 가능성(composability)보다 더 중요합니다. 이 접근법을 Dockerfile 명령에 적용하면 더 빠르게 빌드하고 업로드할 수 있습니다.

  • 시나리오: 배포 단계, 버전, 게임 모드, 맵, 서버당 플레이어 수, 백업 빈도 등과 같은 매개변수를 정의해야 합니다.

  • 나쁜 해결책: 매개변수의 모든 조합마다 별도의 이미지를 만드는 것. 이 접근법은 거의 이득이 없으면서 이미지를 재빌드하는 데 모든 시간을 낭비하게 됩니다.

  • 더 나은 해결책 - 구성 매개변수를 적시에 대체하세요:

    1. 배포 매개변수 - 배포 직전에 제공되는 값 - 환경 변수로 전달되는 매치메이킹 셀렉터 또는 배포 시점에 환경 변수를 전달하는 맞춤 세션 관리 시스템 등,

    2. 버전 매개변수 - 앱 버전의 모든 배포에 공유되는 값 - 배포 단계, 아티팩트 태그, 타사 비밀 및 엔드포인트 등; 그런 다음

    3. 단일 이미지 - 모든 구성 옵션을 포함하고 실행 시 로드합니다.

Edgegap 배포에서 데이터베이스를 실행하지 마세요.

  • Edgegap 배포는 장시간 실행되는 프로세스를 위해 설계되지 않았으며, 장시간 실행 후 사전 통지 없이 종료될 수 있습니다. 이러한 방식으로 실행되는 데이터베이스(분산형이라 하더라도)는 종료되어 되돌릴 수 없는 데이터 손실을 초래할 수 있습니다. 데이터베이스가 필요하다면 타사 DBaaS 사용을 고려하세요.

  • 다음 사용을 고려하세요 Managed Clusters 데이터베이스와 장기 실행 서비스를 호스팅하기 위해.

문제에 봉착했나요? 저희는 커뮤니티 디스코드 에서 도움을 드릴 수 있으며 기쁜 마음으로 돕겠습니다.

Last updated

Was this helpful?