u언리얼 엔진

실습을 통해 배우고 Edgegap에 첫 전용 서버를 배포하세요. 이 가이드를 완료하면 비용 없이 Edgegap에서 전용 서버를 배포하게 됩니다.

Docker Desktop으로 빌드하는 것은 시작하기에 가장 빠르고 쉽고 안정적인 방법입니다.

✔️ 준비

chevron-rightEdgegap Quickstart Docker 확장 설치arrow-up-righthashtag
circle-info

서버 빌드에 자신이 있나요? 로 건너뛰기 언리얼 엔진 그리고 고급 기능.

⚙️ 1. 프로젝트 구성

circle-info

이 방법은 Unreal Engine 소스 코드를 다운로드하거나 소스에서 빌드할 필요가 없습니다!

☑️ 먼저 Unreal Engine 버전 확인 - 프로젝트 파일에서 미리 채워진 값입니다.

☑️ GitHub 사용자 이름 및 PAT 에서 언리얼 엔진GitHub에서 종속성을 다운로드하기 위해.

🔧 2. 게임 서버 빌드

이제 프로젝트를 빌드하고 쿡(cook)한 후 재사용 가능한 도커 이미지로 패키지합니다.

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

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

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

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

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

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

☑️ 프로젝트 빌드 구성이 만족스러우면 이 작업을 수행하세요. 이 단계를 완료하면 로컬 Docker 클라이언트에 리눅스 게임 서버 실행 파일이 포함된 새 이미지가 추가됩니다.

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

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

☑️ 로컬에서 실행하려는 이미지 태그를 선택하세요 (원격 이미지는 다운로드됩니다). 선택적으로 더 많은 docker run 인수arrow-up-right 을(를) 제공하여 로컬 테스트를 사용자화할 수 있습니다:

  • -p 7777:7777/udp - 이것은 로컬 컨테이너의 포트 매핑,

  • -e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777 은(는) 환경 변수 로 Edgegap 실제 배포를 모방하며 게임 서버에 플레이어 연결을 수신할 내부 포트를 알려줍니다.

☑️ 구성이 만족스러우면 로컬 서버 시작을(를) 누르세요. 이 단계를 완료하면 새 컨테이너가 시작됩니다 개발 머신에서.

☑️ 이제 Unreal Engine Editor(PIE) 게임 클라이언트를 로컬 서버 컨테이너에 연결할 차례입니다. 틸드(~)로 Unreal PIE 콘솔을 열고 ~ (틸드)와 함께 열고 open <ip>:<port>:

  • ip = localhost 또는 127.0.0.1 (대부분의 경우 동등함),

  • 포트 = Docker GUI에서 컨테이너의 무작위 외부 포트 값입니다.

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

chevron-right문제 해결 및 FAQhashtag

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

  • 먼저 컨테이너가 실행 중인지 및 로그에 런타임 오류가 없는지 확인하세요.

  • docker run 명령의 포트 값이 일치하는지 확인하세요. docker run 명령이 일치하는지 확인하세요.

  • 게임 클라이언트가 컨테이너 상세 페이지에 표시된 외부 포트 로 연결하고 있는지 확인하세요. 이 값은 보안상의 이유로 항상 무작위화됩니다.

  • 대상 파일의 이름을 변경하고 1단계에 설명된 대로 게임 빌드를 구성했는지 확인하세요. ⚙️ 1. 프로젝트 구성.


내 컨테이너는 실행 중이지만 몇 분 동안 연결할 수 없습니다.

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

  • 이 시간을 줄이기 위해 서버 초기화를 최적화하는 것을 고려하세요.

  • 게임 클라이언트는 초기화 기간에 따라 제한된 시간 동안 1초 간격으로 재시도해야 하며, 그 후 매치메이킹으로 돌아가야 합니다.

  • 서버가 초기화(및 Unreal Engine의 경우 트래블)를 클라이언트와 동시에 수행하면서 상태 동기화를 할 수 있도록 로딩 씬을 추가하는 것을 고려하세요.


경고: 바인드 주소에 대한 소켓을 생성할 수 없습니다

  • Fab 자산 스토어를 통해 Epic의 Steam Subsystem 플러그인을 설치하세요.

  • GitHub에서 다운로드한 SteamCore 소스 버전과 함께 Edgegap Integration Kit(EGIK)를 사용할 때는 Epic Games의 플러그인 배포 정책 때문에 Epic의 Steam Subsystem 플러그인이 포함되어 있지 않습니다.


연결은 되었지만 화면이 완전히 검은색입니다.

  • 다음이 올바르게 설정되었는지 확인하세요: 기본 게임 맵 이(가) 설정되어 있는지 편집 / 프로젝트 설정 / 맵 및 모드.

☁️ 4. Edgegap에 게시

☑️ 레이블을 붙이고 유사한 이미지를 그룹화할 애플리케이션 이름을 선택하세요 Edgegap에서.

☑️ 게시하려는 이미지 태그를 선택하세요 그리고 이미지 업로드. 이 단계를 완료하면 서버 이미지가 Edgegap 레지스트리에 업로드되고 새로운 애플리케이션 버전이 생성됩니다 웹 브라우저에서. 프롬프트가 표시되면 반드시 포트 매핑 을(를) 생성하세요, 기본값으로.

circle-check

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

🚀 5. 클라우드에 배포

☑️ 이제 최종 테스트를 수행하고 Unreal Engine Editor를 클라우드 배포에 연결합니다. 배포의 호스트 를 서버 IP 대신 사용하고 배포의 외부 포트에서(에서) 게임 클라이언트에서 Unreal 콘솔을 열고(틸드 ~) 다음을 입력하세요 open {host}:{port} .

chevron-right문제 해결 및 FAQhashtag

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


을(를) 사용 중인가요? 연결이 방화벽(만리장성)에 의해 차단될 수 있습니다. 플릿에 중국에 위치한 서버를 추가하거나 VPN을 사용하여 연결하는 것을 고려하세요.

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

  • 이 시간을 줄이기 위해 서버 초기화를 최적화하는 것을 고려하세요.

  • 게임 클라이언트는 초기화 기간에 따라 제한된 시간 동안 1초 간격으로 재시도해야 하며, 그 후 매치메이킹으로 돌아가야 합니다.

  • 서버가 초기화(및 Unreal Engine의 경우 트래블)를 클라이언트와 동시에 수행하면서 상태 동기화를 할 수 있도록 로딩 씬을 추가하는 것을 고려하세요.


경고: 바인드 주소에 대한 소켓을 생성할 수 없습니다

  • Fab 자산 스토어를 통해 Epic의 Steam Subsystem 플러그인을 설치하세요.

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


연결은 되었지만 화면이 완전히 검은색입니다.

  • 다음이 올바르게 설정되었는지 확인하세요: 기본 게임 맵 이(가) 설정되어 있는지 편집 / 프로젝트 설정 / 맵 및 모드.

  • GitHub에서 다운로드한 SteamCore Integration Kit(SIK) 소스 버전과 함께 Edgegap Integration Kit(EGIK)를 사용할 때는 Epic Games의 플러그인 배포 정책 때문에 Epic의 Steam Subsystem 플러그인이 포함되어 있지 않습니다. 다음이 비활성화되었는지 확인하세요: Unreal Engine 버전 호환성 검사 이(가).


DefaultEngine.ini


을(를) 수행하세요.

  • 배포가 중지되는 모든 원인을 확인하려면

  • 를 참조하세요. 프라이빗 플릿 내 배포가 X분 후 자동으로 중지되었습니다. 영속성.

  • 배포 기간 동안에만 로그를 보관하므로 배포가 중지된 후 로그를 확인하려면 배포 타사 로그 저장소 통합


무료 티어 배포는 60분 제한이 있으므로 계정 업그레이드를 고려하세요.


기본적으로 서버는 플레이어 연결을 거부하지 않습니다. 플레이어 인증은 다양한 방법과 공급자를 사용할 수 있으므로 개발자가 처리해야 합니다.

  • 게임 클라이언트는 예기치 않은 클라이언트 충돌의 경우 재연결을 시도하기 위해 연결 정보를 로컬에 저장할 수 있습니다.

  • 게임 중인 세션에 플레이어가 참여할 수 있도록 하려면

  • 세션

  • 을(를) 고려하세요.


내 서버가 준비된 후 CPU 사용률이 100%로 표시됩니다. 게임 엔진은 서버 초기화 중 CPU 중심 작업을 수행하는 경향이 있으므로 이것이 문제가 아닐 수 있습니다. 배포 시작 후 2-3분 내에 CPU 사용률이 감소하지 않으면 서버를 최적화하거나 앱 버전 리소스를 늘려야 할 수 있습니다.

  • 틱 레이트를 줄이면 처리되는 메시지가 줄어들어 CPU 사용량을 제어하는 데 도움이 될 수 있습니다.

  • 세션

  • 을(를) 고려하세요.


무료 티어에서는 1.5 vCPU 및 3GB 메모리(RAM)로 제한됩니다.

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

  • 내 배포가 반복적으로 재시작되고 다음 오류가 표시됩니다 게임 엔진은 서버 초기화 중 CPU 중심 작업을 수행하는 경향이 있으므로 이것이 문제가 아닐 수 있습니다. 배포 시작 후 2-3분 내에 CPU 사용률이 감소하지 않으면 서버를 최적화하거나 앱 버전 리소스를 늘려야 할 수 있습니다. OOM kill


이는 할당된 메모리 양을 초과했기 때문에 발생합니다. 객체 풀링, 압축 또는 장면에서 불필요한 객체 제거로 메모리 사용을 최적화하는 것을 고려하세요.

  • 때때로 서버의 메모리(RAM) 사용량이 급증하는데, 문제가 되나요?

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

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

(위 참조)가 발생합니다. 같은 머신에서 실행되는 다른 서버들로 인해 내 서버 성능이 영향을 받나요? 아니요, 우리 플랫폼은 할당된 리소스가 다른 스튜디오나 공유 인프라의 다른 서버에 사용되지 않도록 보장합니다. Edgegap에서는 소음 이웃이 없습니다.

👉 다음 단계 배포 중지 매치가 종료되고 플레이어가 떠난 후 배포를

중지하는 다양한 방법에 대해 알아보세요. 이 가이드를 따르고 Docker 확장으로 빌드했다면 다음 메서드를 호출하면 됩니다 FGenericPlatformMisc::RequestExitarrow-up-right . 패키지된 이미지에 서버 프로세스를 관리하는 스크립트를 추가했으며, 이는 배포를 정상적으로 종료하도록 자동으로 처리합니다.

circle-info

서버 수명주기 관리를 사용자화하려면 우리의 개발자 도구 예제

circle-exclamation

언리얼에서 수명주기 관리를 선호하나요? 자체 중지 API 블루프린트는

을(를) 참조하세요.

- Matchmaker를 사용할 때 Edgegap에서 자동으로 제공, 앱 버전 변수

) else {

// 서버 코드 배포, 배포서버 프로파일링 배포 Edgegap에서 서버 성능 문제를 이해하고 최적화하려면

, 그리고 기타

메모리 인사이트

네트워킹 인사이트

circle-check

플레이어가 온라인이 될 때 자동으로 제시간에 배포하도록

하는 방법.

에셋 청킹 기법 및 권장 사항

빌드 시 에셋 및 플러그인 제외에 대해 알아보세요

을(를) 고려하세요.

60% 이상 줄이고 클라이언트 성능을 향상시킬 수 있습니다!

chevron-rightDocker 이미지 최적화 제안을 검토하세요 예시 .dockerignorehashtag

**/Packaged/* 다단계 Docker 빌드(link) 사용을 고려하세요arrow-up-right.

  • 대형 서버 종속성을 별도의 이미지로 분리하여 다단계 빌드에서 재사용하세요. Docker는 각 레이어를 캐시하고 이전 버전을 재사용하며, 특별히 지시하지 않는 한 이 부분의 업로드를 건너뛰어 대역폭과 업로드 대기 시간을 절약합니다.

  • Dockerfile 명령 중 하나가 오류를 발생시키는 이유를 모르면 로컬에서 디버깅해 보세요. 문제가 발생하기 직전의 새 스테이지(두 번째 FROM 명령)를 추가하고, --target 을(를) 사용하여 빌드 프로세스가 문제의 스테이지에서 중지되도록 지시한 다음 docker exec -it {container} /bin/bash 로 컨테이너 내부의 대화형 터미널에 들어가세요. 그 후 베이스 이미지에서 쉘 명령(예: 우분투의 top )을 사용하여 추가 조사를 수행할 수 있습니다.

서버 이미지 사용자화

빌드 크기 최적화, 불필요한 종속성 또는 더 복잡한 시작 프로세스가 필요한 사용자를 위해 자체 Dockerfile 추가도 지원합니다. 이제 몇 가지 DIY 팁과 모범 사례를 공유합니다.

마지막 업데이트

도움이 되었나요?