언리얼 엔진 - 시작하기
직접 해보며 배우고 Edgegap에 첫 전용 서버를 배포해 보세요. 이 가이드를 마치면 비용 없이 Edgegap으로 전용 서버를 배포하게 됩니다.
Docker Desktop으로 빌드하는 것이 시작하기에 가장 빠르고, 쉽고, 가장 신뢰할 수 있는 방법입니다.
✔️ 준비
시작하기 전에, 반드시 Edgegap에서 무료 계정을 생성하세요 (신용카드 정보는 필요하지 않습니다). 다음을 할 수 있습니다 그 후 팀원을 초대할 수 있습니다, 아직 Edgegap 계정이 없어도 됩니다.
개발 환경에서 몇 가지 필수 항목을 구성하세요:
⚙️ 1. 프로젝트 구성
Windows, Mac 또는 Linux 기기를 사용하든 상관없이, 당신은 서버를 Linux 런타임용으로 빌드해야 합니다., 대부분의 클라우드 제공업체(Edgegap 포함)가 현재 Linux에서 실행되기 때문입니다. 걱정하지 마세요, Linux 지식은 필요하지 않습니다.
☑️ 먼저 Unreal Engine 버전을 확인하는 것부터 시작하세요 - 프로젝트 파일의 값으로 미리 채워져 있습니다.
☑️ GitHub 사용자 이름과 PAT 을 입력하여 Unreal EngineGitHub에서 종속성을 다운로드하세요.
☑️ Unreal Engine 버전 호환성 검사 비활성화 전용 서버용 및 설정 IpNetDriver 기본 드라이버 또는 대체 드라이버로 복제 네트워킹용:
확인하세요 입력하십시오 DefaultServerTarget 이 스니펫 끝에!
☑️ Unreal Engine 재시작 최신 변경 사항을 다시 불러오려면.
☑️ 전용 서버 타겟 스크립트 생성 다음을 복사하여 <PROJECT>Editor.Target.cs 프로젝트 루트 폴더의 파일을 복사하고 복사본의 이름을 <PROJECT>Server.Target.cs.
☑️ 다음에 대한 참조를 바꾸세요 단어 Editor 로 Server 서버 타겟 스크립트에서.
☑️ 서버 빌드 기본값 수정 서버 타겟 스크립트를 편집하여:
✅ 이제 다음 단계로 진행할 수 있습니다.
🔧 2. 게임 서버 빌드
이제 프로젝트를 빌드하고 쿠킹한 다음, 쉽게 재사용할 수 있는 Docker 이미지로 패키징합니다.
개발자 팀과 함께 작업하면 코드를 공유해야 합니다. 문제가 발생했을 때 듣고 싶은 마지막 말은 “내 환경에서는 잘 돼”일 것입니다. 게임 서버는 전 세계 수천 대의 서버 머신에서 안정적으로 실행되어야 합니다.
서버를 안정적으로 만들기 위해 Docker를 사용합니다 - 운영 체제 수준까지 서버 코드의 모든 종속성이 어디서 어떻게 서버가 시작되든 항상 정확히 동일하도록 보장하는 가상화 소프트웨어입니다.
☑️ 다음 옵션을 구성할 수 있습니다(또는 기본값을 유지):
이미지 이름 은 배포 전에 서버 빌드에 라벨을 붙이는, 사용자가 정하는 고유 식별자입니다.
보통 게임 이름을 포함하며, 예를 들어 “my-game-server”와 같습니다.
이미지 태그 는 이미지의 특정 버전을 가리키는 식별자입니다.
“빌드 아티팩트”라는 용어는 때때로 이미지의 특정 버전을 가리키는 데 사용됩니다.
타임스탬프는 태그 지정에 아주 좋은 기본 옵션입니다. 예:
2024.01.30-16.23.00-UTC.
☑️ 프로젝트 빌드 구성에 만족하면 누르세요. 이 단계를 완료하면 Linux 게임 서버 실행 파일이 포함된 새 이미지가 로컬 Docker 클라이언트에 추가됩니다.
✅ 이제 다음 단계로 진행할 수 있습니다.
🧪 3. 서버를 로컬에서 테스트
업로드하고 배포하기 전에(약간의 시간이 걸릴 수 있음) 서버 이미지가 제대로 작동하는지 확인하기 위해 로컬(사용자 기기)에서 배포하고 게임 클라이언트를 연결해 보겠습니다.
☑️ 로컬에서 실행할 이미지 태그를 선택하세요 (원격 이미지는 다운로드됩니다). 선택적으로 더 많은 docker run 인수 를 제공하여 로컬 테스트를 사용자 지정할 수 있습니다:
-p 7777:7777/udp- 이는 로컬 컨테이너의 포트 매핑입니다,-e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777은 환경 변수 입니다. 실제 Edgegap 배포를 모방하며, 게임 서버에 플레이어 연결을 수신할 내부 포트를 알려줍니다.
☑️ 구성이 만족스러우면 로컬 서버 시작. 이 단계를 완료하면 새 컨테이너가 시작됩니다 개발 머신에서.
☑️ 이제 Unreal Engine 편집기(PIE) 게임 클라이언트를 로컬 서버 컨테이너에 연결할 차례입니다. Unreal PIE 콘솔을 ~ (물결표)로 열고 다음으로 연결하세요 open <ip>:<port>:
ip=localhost또는127.0.0.1(대부분의 경우 동일),port= Docker GUI에서 컨테이너의 무작위 외부 포트 값.

☑️ 로컬 서버 컨테이너에 연결하여 문제없이 플레이할 수 있는지 확인한 후에는 기기의 리소스를 다른 프로그램용으로 확보하기 위해 컨테이너를 삭제할 수 있습니다 🗑️
✅ 이제 다음 단계로 진행할 수 있습니다.
☁️ 4. Edgegap에 게시
서버를 온라인으로 배포할 시간입니다! 이제 이미지가 플레이어를 성공적으로 호스팅할 수 있으므로 이를 Edgegap에 업로드하여 전 세계 어디에서나 실행할 수 있습니다. 이 가이드에서는 Edgegap의 컨테이너 레지스트리 (이미지 저장소).
☑️ 애플리케이션 이름을 선택하세요 Edgegap에서 유사한 이미지를 라벨링하고 그룹화하기 위해 사용합니다.
☑️ 게시할 이미지 태그를 선택하세요 및 이미지 업로드. 이 단계를 완료하면 서버 이미지가 Edgegap Registry에 업로드되고 새 애플리케이션 버전이 생성됩니다 웹 브라우저에서. 반드시 포트 매핑입니다 생성을 요청받으면 기본값으로.
버그를 발견해서 다시 빌드/게시해야 하나요? 다음을 사용하세요. 소스에서 다시 빌드 을 Unreal Engine 및 Unreal Engine 현재 확장 프로그램 입력 값으로 빠르게.
✅ 이제 다음 단계로 진행할 수 있습니다.
🚀 5. 클라우드에 배포
이 가이드의 마지막 단계로, 이 단계를 완료하면 전 세계 어디에서든 플레이어가 접속할 수 있는 Edgegap 클라우드에 서버가 배포됩니다.
☑️ 애플리케이션과 버전을 선택하세요 배포를 위해 이전 단계에서.
☑️ 준비가 되면, 누르세요 클라우드에 배포, 도달할 때까지 기다리세요 배포. 이 단계를 완료하면 결과적으로 새 배포가 시작됩니다 귀하의 Edgegap 계정에서.
☑️ 콘솔 출력에 새로운 오류가 없는지 확인하세요. 또한 다음이 배포 오류를 표시하지 않는지 및 귀하의 배포 가(이) vCPU 또는 메모리의 100% 자원 사용을 나타내지 않는지 확인하세요. 그렇지 않으면 새 플레이어 연결이 거부되거나 서버가 재시작 루프에 갇힐 수 있습니다. 문제 해결 단계는 아래를 참고하세요.
☑️ 이제 최종 테스트를 수행하고 Unreal Engine 편집기를 클라우드 배포에 연결합니다. 배포의 호스트 를 서버 IP 대신 사용하고 배포의 외부 포트를 사용하여 게임 클라이언트에서 Unreal 콘솔을 열고(물결표 ~) 다음을 입력하세요 open {host}:{port} .

테스트 시 VPN 비활성화 보다 현실적인 조건을 위해 그리고 저지연 배포를 받으려면.
☑️ 배포에 문제없이 연결할 수 있음을 확인하고 테스트를 마쳤다면, 배포 중지 다음 빌드를 위해 계정의 용량을 확보하려면.
문제가 발생한 경우, 배포의 대시보드 로그를 검사하세요.
문제를 해결할 수 없다면, 저희는 커뮤니티 디스코드 에서 도와드릴 수 있으며 기꺼이 지원하겠습니다.
🙌 Edgegap에서의 첫 배포를 축하합니다! 더 알아보고 싶다면 계속 읽어보세요.
👉 다음 단계
클라이언트/서버 구성이 작동하면, 반드시 프로젝트 복사본을 저장하세요 (git과 같은 버전 관리 소프트웨어를 사용하여) 문제가 발생했을 때 항상 작업 내역을 추적할 수 있도록.
서버 수명주기 및 검색 가능성과 관련된 주제를 더 알아보려면 계속 읽으세요.
배포 중지
매치가 끝나면(또는 플레이어가 떠나면) 비용을 절감하기 위해 배포를 중지할 수 있습니다. 비어 있거나 일부만 채워진 배포는 불필요하게 비용을 증가시킬 수 있습니다!
이 가이드를 따라 Docker 확장 프로그램으로 빌드했다면, 다음 메서드를 간단히 호출하면 됩니다. FGenericPlatformMisc::RequestExit . 패키징된 이미지에는 서버 프로세스를 관리하는 스크립트를 추가했으며, 이 스크립트가 자동으로 배포를 정상 종료합니다.
서버 라이프사이클 관리를 사용자 지정하려면 다음을 수정하세요. 예제 StartServer.sh 스크립트.
연결하세요 엔드포인트 저장소 배포 로그를 저장하려면, 그렇지 않으면 삭제됩니다!
주입된 변수
주입된 환경 변수에 접근하여 배포 ID, 서버 IP 주소, 서버 위치 등 유용한 정보를 읽어보세요. 각 배포에는 자동으로 다음이 포함됩니다:
다음을 가져오세요 개발자 도구 을 블루프린트를 사용해 입력된 형식의 변수를 쉽게 읽기.
서버 프로파일링
Edgegap에서 서버 성능 문제를 이해하고 최적화하려면 다음을 살펴보세요. 배포, 배포등과 배포 도구를 사용할 수 있습니다.
또한 Edgegap과 함께 기존 Unreal Engine 프로파일링 도구를 사용할 수 있습니다:
Unreal Engine 서버에서 트레이싱 구성 (내장 및 사용자 지정 이벤트):
다음을 사용하여 서버 디스크에 트레이스를 저장
-tracefile를 사용하여 서드파티 저장소에 업로드하고 오프라인으로 분석하거나또는 다음으로 트레이스 데이터를 스트리밍 배포 내부 포트용
1981UDP 프로토콜로.
분석 메모리 인사이트 및 네트워킹 인사이트 및 Unreal Engine.
세션 자동화
배포를 수동으로 시작하고 URL과 포트를 붙여넣는 것만으로는 라이브 게임에 충분하지 않습니다.
다음 중 하나를 사용해 세션 관리 및 필요에 따른 확장을 위한 인기 게임 흐름을 자동화하세요:
짧은 라운드
온디맨드 매치
실력 등급 및/또는 사용자 지정 규칙
지속형 또는 라운드
소셜 지역 허브
자동 할당 및/또는 사용자 지정 검색
사용자 지정 백엔드:
라이브 게임 마이그레이션
빌드 최적화
클라이언트 전용 에셋을 서버 에셋과 분리하도록 에셋 청크 구성을 설정하세요.
탐색하기 에픽의 에셋 청크 기법 및 권장 사항
클라이언트 전용이고 서버 실행에 필요하지 않은 에셋과 플러그인을 제외하세요.
다음에 대해 알아보세요. 빌드 시간 에셋 및 플러그인 제외.
콘텐츠 쿠킹 전략을 검토하세요.
다음을 고려하세요. Cooking on the Fly(COTF) 를 사용해 클라이언트 에셋 쿠킹을 지연시키고 서버 빌드 속도를 높이세요.
런타임 메모리 부담을 줄이기 위해 레벨 스트리밍을 구현하세요.
설계상 플레이어가 대부분 같은 맵 영역에 함께 머무르는 경우, 레벨 스트리밍은 서버의 메모리 사용량을 줄일 수 있습니다 60% 이상 줄이고, 클라이언트 성능도 향상시킬 수 있습니다!
서버 실행에 절대적으로 필요한 것만 포함하세요.
이미지에 사용하지 않는 파일을 복사하면 이미지 비대화, 업로드 시간 증가, 캐싱 속도 저하, 전반적인 서버 시작 지연이 발생합니다. Docker 이미지 최적화 제안을 검토하세요.
다음을 사용하는 것을 고려해 보세요. 다단계 Docker 빌드(링크).
대용량 서버 종속성은 별도의 이미지로 분리하여 다단계 빌드에서 재사용하세요. Docker는 각 계층을 캐시하고 이전 버전을 간단히 재사용하므로, 특별히 지시하지 않는 한 이 부분을 업로드하지 않고 건너뜁니다. 이렇게 하면 대역폭과 업로드 완료 대기 시간을 절약할 수 있습니다.
Dockerfile 명령 중 하나가 왜 오류를 내는지 확실하지 않다면 로컬에서 디버깅해 보세요. 문제가 발생하기 바로 직전에 새 단계(두 번째
FROM명령 추가)를 만들고--target을 사용해 빌드 프로세스가 문제가 있는 단계에서 멈추도록 지시한 다음docker exec -it {container} /bin/bash를 사용해 컨테이너 내부의 대화형 터미널에 들어가세요. 그런 다음 기본 이미지의 셸 명령을 사용해 더 자세히 조사할 수 있습니다(예:top을 우분투에서).
이미지 사용자 지정
또한 빌드 크기 최적화, 불필요한 종속성, 더 복잡한 시작 프로세스 때문에 이미지에 대해 더 많은 제어가 필요한 사용자를 위해 자체 Dockerfile을 추가하는 것도 지원합니다. 이제 몇 가지 “직접 해보기” 팁과 모범 사례를 공유하겠습니다.
항상 정상적으로 동작하는 서버 빌드를 사용하고 있는지 확인하세요.
문제가 커스텀 Dockerfile과 관련된 것이라고 단정하기 전에, 서버 빌드가 정상적으로 시작될 수 있는지와 게임 엔진의 빌드 과정에서 예외나 오류가 발생하지 않았는지 확인하세요.
업로드하기 전에 항상 로컬에서 테스트하세요.
이미지를 로컬에서 테스트하면 업로드가 완료될 때까지 기다리는 동안 많은 시간을 절약할 수 있습니다. 또한 Edgegap 리소스가 전혀 필요하지 않으므로 완전히 무료입니다 ✨
로컬에서 테스트할 때는 내부 포트를 올바르게 설정했는지 확인하세요:
기본 사항을 제대로 이해했는지 확인하세요. 모든 Dockerfile에는 몇 가지 필수 명령이 필요합니다:
FROM {image}는 기본 이미지입니다. 보통 장기 지원되는 Linux를 사용하지만, Linux 기반 기본 이미지라면 어떤 것이든 괜찮습니다. 보통 Docker Hub에 저장된 공개 이미지입니다. Dockerfile 참고는 여기입니다. Dockerfile 참고는 여기.COPY {source} {destination}호스트 머신의 Linux 서버 빌드를 이미지 안으로 복사하여 나중에 시작할 수 있게 합니다. Dockerfile 참고는 여기.USER {user}다음 뒤에 와야 합니다 useradd(우분투) 명령 또는 이에 상응하는 명령 뒤에 와야 하며, 모든 것을root로 실행하지 않는 것이 가장 좋습니다. Dockerfile 참고는 여기.CMD {command}가 마지막 줄이 되며, 대부분 다음을 호출합니다:StartServer.sh또는 서버가 모든 설정 완료 후 올바르게 초기화되도록 하는 어떤 종류의 시작 스크립트입니다. Dockerfile 참고는 여기.사용하지 마세요
VOLUME- 이런 방식으로는 Edgegap에서 로컬 스토리지를 마운트할 수 없습니다. 대신 Endpoint Storage 기능을 고려하고 S3 버킷을 사용하세요. 다음을 참조하세요: Endpoint Storage,EXPOSE 7777/UDP는 필요하지 않습니다! 이것은 실제로 컨테이너 외부에서 내부 서버 포트를 사용할 수 있게 만드는 것이 아니라, 개발자를 위한 힌트일 뿐이며 포트는다음과 함께 로컬에서 테스트할 때 공개되어야 합니다
docker run <image> -p 7777/udp,또는 다음에 매핑되어야 합니다 Edgegap 포트 매핑.
매개변수 선언은 가능한 가장 늦은 시점까지 미루세요. 서버 빌드 시간이 길기 때문에 구성 가능성 > 조합 가능성입니다. 이 접근 방식을 Dockerfile 명령에 적용하면 빌드와 업로드를 더 빠르게 할 수 있습니다.
시나리오: 배포 단계, 버전, 게임 모드, 맵, 서버당 플레이어 수, 백업 빈도 또는 이와 유사한 매개변수를 정의해야 합니다.
나쁜 해결책: 매개변수 조합마다 별도의 이미지를 만드는 것입니다. 이 접근 방식으로 얻는 이점은 거의 없는데, 이미지를 다시 빌드하는 데 모든 시간을 쓰게 됩니다.
더 나은 해결책 - 구성 매개변수를 필요한 시점에 대체하세요:
배포 매개변수 - 배포 직전에 제공됨 - 환경 변수로 전달되는 매치메이킹 선택자, 또는 배포 시점에 환경 변수를 전달하는 사용자 정의 세션 관리 시스템,
버전 매개변수 - 앱 버전의 모든 배포에서 공유됨 - 배포 단계, 아티팩트 태그, 타사 비밀 및 엔드포인트 등; 그런 다음
하나의 단일 이미지 - 실행될 때 모든 구성 옵션을 포함하고 로드합니다.
Edgegap 배포에서 데이터베이스를 실행하지 마세요.
Edgegap 배포는 장시간 실행되는 프로세스를 위한 것이 아니며, 장시간 실행된 후 사전 통지 없이 종료될 수 있습니다. 이런 방식으로 실행되는 데이터베이스(분산형이라도)는 종료될 수 있으며, 돌이킬 수 없는 데이터 손실로 이어질 수 있습니다. 데이터베이스가 필요하다면 타사 DBaaS를 고려해 주세요.
다음 기능 사용을 고려하세요: Managed Clusters 데이터베이스와 장기 실행 서비스를 호스팅하는 데 사용합니다.
마지막 업데이트
도움이 되었나요?


