언리얼 엔진
직접 해 보며 배우고 Edgegap에서 첫 전용 서버를 배포하세요. 이 가이드를 마치면 비용 없이 Edgegap으로 전용 서버를 배포하게 됩니다.
Docker Desktop으로 빌드하는 것이 시작하기에 가장 빠르고 쉽고 신뢰할 수 있는 방법입니다.
✔️ 준비
시작하기 전에 반드시 Edgegap에 무료 계정 생성 (신용카드 불필요).
개발 머신에서 몇 가지 필수 사항을 구성하세요:
⚙️ 1. 프로젝트 구성
Windows, Mac 또는 Linux 기기를 사용하든 상관없이, 당신은 Linux 런타임용 서버를 빌드해야 합니다., 대부분의 클라우드 제공업체(Edgegap 포함)는 현재 Linux에서 운영됩니다. 걱정하지 마세요, Linux 지식은 필요하지 않습니다.
☑️ 다음으로 시작 Unreal Engine 버전 확인 - 프로젝트 파일의 값으로 미리 채워짐.
☑️ GitHub 사용자명 입력 및 PAT 출처 언리얼 엔진에서, GitHub의 종속성을 다운로드하기 위해.
☑️ 언리얼 엔진 버전 호환성 검사 비활성화 전용 서버 및 설정 IpNetDriver 기본 드라이버 또는 대체 드라이버로 복제 네트워킹용:
반드시 입력하세요 DefaultServerTarget 이 코드 조각의 끝에!
☑️ 언리얼 엔진 재시작 최신 변경사항을 다시 로드하려면.
☑️ 전용 서버 타깃 스크립트 생성 다음을 복사하여 <PROJECT>Editor.Target.cs 프로젝트 루트 폴더의 파일을 복사하고 복사본의 이름을 <PROJECT>Server.Target.cs.
☑️ 에 대한 모든 참조를 바꾸세요 단어 Editor 다음과 함께: 서버 서버 타깃 스크립트에서.
☑️ 표준 출력 서버 로그 활성화 서버 타깃 스크립트에 오버라이드를 추가하여:
✅ 이제 다음 단계로 진행할 수 있습니다.
🔧 2. 게임 서버 빌드
이제 프로젝트를 빌드하고 쿠킹한 뒤, 손쉽게 재사용 가능한 도커 이미지로 패키징합니다.
🐋 3. 서버 컨테이너화
여러 개발자로 구성된 팀에서 작업한다는 것은 코드를 공유한다는 뜻입니다. 문제가 발생했을 때 가장 듣기 싫은 말은 “내 컴퓨터에서는 작동해”입니다. 게임 서버는 전 세계 수천 대의 서버 머신에서 실행되기 때문에 어느 머신에서든 안정적으로 실행되어야 합니다.
☑️ 다음 옵션을 구성할 수 있습니다(또는 기본값 유지):
이미지 이름 은(는) 선적 전에 서버 빌드를 라벨링하기 위해 선택하는 고유 식별자입니다.
보통 게임 이름을 포함합니다. 예: “my-game-server”.
이미지 태그 는 이미지의 특정 버전을 가리키는 식별자입니다.
“빌드 아티팩트”라는 용어를 이미지의 특정 버전을 지칭하는 데 사용할 때도 있습니다.
태그 지정에는 타임스탬프가 좋은 선택입니다. 예:
2024.01.30-16.23.00-UTC(기본값).
☑️ 프로젝트 빌드 구성이 만족스러우면 실행하세요. 이 단계를 완료하면 로컬 Docker 클라이언트에 리눅스 게임 서버 실행 파일이 포함된 새 이미지가 추가됩니다.
✅ 이제 다음 단계로 진행할 수 있습니다.
🧪 3. 로컬에서 서버 테스트
서버 이미지를 업로드하고 배포하기(시간이 좀 걸릴 수 있음) 전에, 로컬(사용자 컴퓨터)에서 배포하고 게임 클라이언트를 연결해 서버 이미지가 제대로 작동하는지 확인해 보겠습니다.
☑️ 로컬로 실행할 이미지 태그를 선택하세요 (원격 이미지는 다운로드됨). 선택적으로, 추가 docker run 인수 를 제공하여 로컬 테스트를 사용자 정의할 수 있습니다:
-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(대부분의 경우 동일),port= Docker GUI에서 컨테이너의 무작위 외부 포트 값.

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

테스트 시 VPN 비활성화 보다 현실적인 환경을 위해 그리고 저지연 배포를 받으려면.
☑️ 배포에 문제 없이 연결할 수 있는지 확인하고 테스트가 완료되면, 배포 중지 다음 빌드를 위해 계정의 용량을 확보하려면.
문제가 발생한 경우에는, 배포의 대시보드 로그를 검사하세요.
문제를 해결할 수 없다면, 저희가 활동 중인 커뮤니티 디스코드 다음 오류가 발생한다면
🙌 Edgegap에서의 첫 배포를 축하합니다! 더 알아보고 싶다면 계속 읽어보세요.
👉 다음 단계
클라이언트/서버 설정이 제대로 작동하면, 반드시 프로젝트의 복사본을 저장하세요 (git과 같은 버전 관리 소프트웨어를 사용) 문제가 발생했을 때 항상 이전 작업을 추적할 수 있도록.
서버 수명 주기 및 검색 가능성과 관련된 주제에 대해 더 알아보려면 계속 읽어보세요.
배포 중지
다양한 방법으로 배포를 중지하는 법 을(를) 알아보세요. 매치가 끝나고 플레이어가 떠난 후에 적용합니다. 배포 로그를 가져오려면 반드시 엔드포인트 저장소 를 연결하세요. 그렇지 않으면 로그는 삭제됩니다!
주입된 변수
배포 ID, 서버 IP 주소, 서버 위치 등 유용한 정보를 주입된 환경 변수를 통해 읽을 수 있습니다. 각 배포에는 자동으로 다음이 포함됩니다:
배포 변수 - Edgegap에서 자동으로 제공,
매치메이킹 변수 - 다음을 사용할 때 Edgegap에서 자동으로 제공 매치메이커,
앱 버전 변수 - 사용자가 구성 가능한 커스텀 키-값 쌍.
현재 인스턴스가 게임 클라이언트인지 서버인지 확인 Edgegap 변수가 설정되었는지 확인하여:
서버 프로파일링
Edgegap에서 서버 성능 문제를 이해하고 최적화하려면 다음을 살펴보세요 배포, 배포및 더 많은 배포 사용 가능한 도구.
또한 Edgegap과 함께 기존 Unreal Engine 프로파일링 도구를 사용할 수 있습니다:
Unreal Engine 서버에서 트레이싱 구성 (내장 및 사용자 정의 이벤트):
다음으로 서버 디스크에 트레이스를 저장
-tracefile하고, 서드파티 스토리지에 업로드하여 오프라인 분석하거나,다음으로 트레이스 데이터를 스트리밍 배포 내부 포트용
1981UDP 프로토콜을 통해.
분석 Memory Insights 및 Networking Insights 및 언리얼 엔진.
매치메이킹
배포를 수동으로 시작하고 URL과 포트를 붙여넣는 방식은 라이브 게임에 적합하지 않습니다.
매치메이킹에 대해 더 읽어보세요 필요한 시점에 자동으로 배포하기- 플레이어가 온라인이 될 때.
서버 빌드 최적화
클라이언트 전용 에셋을 서버 에셋과 분리하기 위해 에셋 청킹을 구성하세요.
다음을 살펴보세요 에셋 청킹 기법과 권장 사항 (Epic 제공).
클라이언트 전용이고 서버 실행에 필요하지 않은 에셋과 플러그인을 제외하세요.
다음에 대해 알아보세요 빌드 시 에셋 및 플러그인 제외.
콘텐츠 쿠킹 전략을 검토하세요.
다음을 고려 Cooking on the Fly(COTF) 하여 클라이언트 에셋 쿠킹을 지연하고 서버 빌드를 가속하세요.
런타임 메모리 부하를 줄이기 위해 레벨 스트리밍을 구현하세요.
디자인상 플레이어가 대부분 같은 맵 영역에 머문다면, 레벨 스트리밍은 서버 메모리 사용을 60% 이상 줄이고, 클라이언트 성능을 향상시킬 수 있습니다!
서버가 실행되는 데 절대적으로 필요한 것만 포함하세요.
이미지에 미사용 파일을 복사하면 이미지 비대화, 업로드 지연, 캐시 속도 저하, 전체 서버 시작 지연으로 이어집니다. Docker 이미지 최적화 제안 검토.
다음 사용을 고려하세요 멀티 스테이지 Docker 빌드(링크).
큰 서버 종속성은 별도 이미지로 분리하여 멀티 스테이지 빌드에서 재사용하세요. Docker는 각 레이어를 캐시하고, 특별히 지시하지 않는 한 이전 버전을 재사용하여 이 부분 업로드를 건너뛰므로, 업로드 대기 시간과 대역폭을 절약합니다.
Dockerfile 명령 중 하나가 왜 오류를 던지는지 확실하지 않다면 로컬에서 디버깅해 보세요. 문제가 발생하기 바로 전 단계에 새 스테이지를 만들고(두 번째
FROM명령 추가),--target로 빌드 프로세스가 문제의 스테이지에서 멈추도록 지시한 다음,docker exec -it {container} /bin/bash로 컨테이너 내부의 대화형 터미널에 들어가세요. 이후에는 베이스 이미지의 셸 명령을 사용하여 더 조사할 수 있습니다(예:topon ubuntu).
서버 이미지 사용자 지정
빌드 크기 최적화, 불필요한 종속성, 더 복잡한 시작 프로세스가 필요한 사용자들을 위해 자체 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 명령에 적용하면 더 빠르게 빌드하고 업로드할 수 있습니다.
시나리오: 배포 단계, 버전, 게임 모드, 맵, 서버당 플레이어 수, 백업 빈도 등과 같은 매개변수를 정의해야 합니다.
나쁜 해결책: 매개변수의 모든 조합마다 별도의 이미지를 만드는 것. 이 접근법은 거의 이득이 없으면서 이미지를 재빌드하는 데 모든 시간을 낭비하게 됩니다.
더 나은 해결책 - 구성 매개변수를 적시에 대체하세요:
배포 매개변수 - 배포 직전에 제공되는 값 - 환경 변수로 전달되는 매치메이킹 셀렉터 또는 배포 시점에 환경 변수를 전달하는 맞춤 세션 관리 시스템 등,
버전 매개변수 - 앱 버전의 모든 배포에 공유되는 값 - 배포 단계, 아티팩트 태그, 타사 비밀 및 엔드포인트 등; 그런 다음
단일 이미지 - 모든 구성 옵션을 포함하고 실행 시 로드합니다.
Edgegap 배포에서 데이터베이스를 실행하지 마세요.
Edgegap 배포는 장시간 실행되는 프로세스를 위해 설계되지 않았으며, 장시간 실행 후 사전 통지 없이 종료될 수 있습니다. 이러한 방식으로 실행되는 데이터베이스(분산형이라 하더라도)는 종료되어 되돌릴 수 없는 데이터 손실을 초래할 수 있습니다. 데이터베이스가 필요하다면 타사 DBaaS 사용을 고려하세요.
다음 사용을 고려하세요 Managed Clusters 데이터베이스와 장기 실행 서비스를 호스팅하기 위해.
Last updated
Was this helpful?


