구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

구글 클라우드(Google Cloud)는 3월 24일, 자사 클라우드 안에서 게임 개발자들이 멀티 플레이어 게임을 포함해 게임을 돌리는 데 필요한 백엔드 서비스인 ‘게임 서버(Game Servers)' 베타 버전을 선보였다고 발표했다. 

게임 서버는 게임 스트리밍 서버가 아니라 개발자들이 게임에 필요한 백엔드 서비스를 더 쉽게 만들고, 확장하고, 관리할 수 있게 해주는 서비스다. 해당 서비스는 구글과 유비소프트(Ubisoft)가 2018년 처음 발표한 ‘아고네스(Agones)' 오픈소스 게임 서버와 쿠버네티스(Kubernetes) 컨테이너 오케스트레이션 플랫폼 위에서 운영된다.

구글의 스콧 밴 우덴버그(Scott Van Woudenberg) 클라우드 제품 매니저에 따르면, 구글 클라우드는 멀티 클라우드 쿠버네티스 클러스터 관리 서비스인 안토스(Anthos) 일부를 재활용하고 있는 것으로 전해졌다. 현재는 게임 서버가 구글 쿠버네티스 엔진 위에서만 운영 가능하지만, 올해 연말까지 하이브리드와 멀티클라우드 상에서의 운영도 지원할 계획이다. 

이미 많은 게임 기업들이 자체적으로 온프레미스 방식으로 서버를 구축했기 때문에 일반 기업처럼 하이브리드 클라우드 환경을 갖출 필요가 있다. 이에 구글은 게임 서버 밖에서 아고네스를 사용하는 개발자들이 게임 서버 API를 등록함으로써 사용 중인 서버를 게임 서버 환경으로 쉽게 가져올 수 있게 지원할 계획이다.

우덴버그 매니저는 “사실상 모든 게임에는 멀티 플레이어 기능, 매치 메이킹, 일관된 게임 통계를 유지하려면 일정 종류의 클라우드 백엔드 서비스가 필요하다”라고 강조했다. 

출처: Google Cloud launches Game Servers, a managed cloud backend for games, TechCrunch, 24 March, 2020

전 세계적으로 점점 더 많은 플레이어가 멀티플레이어(multiplayer) 게임을 선호하게 되면서 개발자는 증가하는 수요에 대응하고 탁월한 플레이 경험을 선사하면서 복잡한 글로벌 인프라를 관리하도록 게임을 스케일링해야 하는 과제에 직면했다. 

이러한 문제점을 해결하기 위해 많은 게임사가 고액의 비용으로 자체 솔루션을 구축해 관리하거나 개발자의 선택과 통제 권한을 제한하는 사전 패키지 솔루션을 사용하고 있다.

2020년 초 구글 클라우드는 오픈소스 게임 서버 스케일링 프로젝트인 아고네스(Agones)를 기반으로 구축된 관리형 서비스인 게임 서버 서비스(Game Servers)의 베타 버전 출시를 발표했다. 게임 서버 서비스는 쿠버네티스(Kubernetes)를 컨테이너(container) 오케스트레이션(orchestration)에 사용하고 아고네스를 게임 서버 플릿(fleet)에 대한 오케스트레이션과 라이프사이클 관리에 활용한다. 이를 통해 개발자에게 더욱 현대화되고 단순한 게임 관리 및 스케일링 패러다임을 제공한다.

이제 게임 프로덕션 워크로드에서 게임 서버 서비스를 보편적으로 이용할 수 있게 되었다. 게임 서버 서비스는 인프라 관리를 단순화해 개발자가 플레이어를 위한 더 나은 게임을 만드는 데 자원을 집중할 수 있도록 지원한다.

클러스터와 렐름

게임 서버 클러스터(cluster)는 게임 서버 서비스의 가장 기본적인 개념으로 단순하게는 아고네스를 실행하는 쿠버네티스 클러스터를 뜻한다. 사용자가 클러스터를 정의하면 그 클러스터는 렐름(realm)에 추가되어야 한다.

렐름은 게임 클라이언트의 관점에서 결합력 있는 유닛으로 취급할 수 있는 게임 서버 클러스터의 사용자 정의 그룹이다. 개발자는 원하는 방식으로 렐름을 정의할 수 있지만 일반적으로 각 게임의 레이턴시(latency) 요건에 따라 렐름의 지역별 분포가 결정된다. 이러한 이유로 대부분의 게임은 대륙별로 렐름을 정의한다. 예를 들어 미국, 영국, 일본 등 주요 플레이 지역에서는 각각 북미, 유럽, 아시아 지역의 플레이어에게 서비스를 제공한다.

게임이 어떤 식으로 어느 지역에서 성공을 거두는 것과 관련 없이 게임의 고가용성과 원활한 스케일링 경험을 보장하기 위해서는 단일 렐름에서 여러 클러스터를 실행해야 한다. 

배포와 구성

렐름과 클러스터를 정의한 후 배포(deployments)와 구성(configs) 개념을 사용해 게임 소프트웨어를 롤아웃(roll out)할 수 있다. 게임 서버 배포는 전 세계 게임 서버 클러스터 어느 곳이든 배포할 수 있는 게임 서버 소프트웨어의 글로벌 기록이다. 게임 서버 구성은 클러스터 전체에 출시될 게임 서버 버전의 세부 정보를 지정한다.

이러한 개념을 정의하면 아고네스와 게임 서버 서비스 사이의 뚜렷한 주요 차이점이 발생한다.

첫째, 사용자 지정 오토스케일링(auto-scaling) 정책을 정의할 수 있는 권한이 부여된다. 렐름과 클러스터로 세분화된 게임은 사용자가 직접 정의한 스케일링 정책과 함께 개발자에게 정확성, 제어, 단순화 등 이상적인 조합을 제공한다. 예를 들어 지역별 일간 게임 패턴에 맞게 더 많은 서버를 자동으로 프로비저닝(provisioning) 하는 정책을 렐름 수준에서 지정하거나 인게임(in-game) 글로벌 이벤트에 대비해 전 세계적으로 동시에 모든 클러스터를 스케일업할 수 있다.

둘째, 배포와 함께 특정 렐름을 대상으로 새로운 게임 서버 바이너리(binaries)를 전 세계 다른 지역으로 롤아웃 할 수 있는 유연성을 제공한다. 이를 통해 어떤 렐름에서든 새롭게 롤아웃한 소프트웨어의 A/B 테스트 또는 카나리(canary) 테스트를 진행할 수 있다.

마지막으로 구글 클라우드는 게임 서버 서비스를 최대한 사용자 맞춤형으로 구축하고 있지만 기술만으로 게임의 성공을 보장할 수 없다는 점을 인지하고 있다. 구글 클라우드의 게임 전문가는 성공적인 게임 출시를 준비하기 위해 고객 팀과 협력한다. 구글 클라우드는 게임 서버 서비스를 지원해 게임이 장기적으로 끊임없이 성장할 수 있도록 지원한다. 

게임용 오픈 아키텍처 구축

구글 클라우드는 게임 개발자에게 제어 능력이 가장 중요하다는 점을 알고 있다. 개발자는 언제든지 게임 서버 서비스에서 벗어나 아고네스 클러스터를 직접 관리할 수 있다. 또한 언제나 쿠버네티스 클러스터에 직접 접속할 수 있기 때문에 아고네스 설치에 게임별 추가사항을 원하는 대로 넣을 수 있습니다.이처럼 개발자는 항상 제어 권한을 가진다.

선택권을 갖는 것도 중요하다. 현재 게임 서버 서비스는 구글 쿠버네티스 엔진(Google Kubernetes Engine)에서 실행되는 클러스터를 지원하며, 구글 클라우드나 다른 클라우드 혹은 온프레미스(on premise) 등 어떤 환경에서도 클러스터를 실행할 수 있는 기능을 개발 중이다. 

개발자는 하이브리드 및 멀티 클라우드로 플레이어에게 적합한 곳 어디서든 자유롭게 게임 서버 워크로드를 실행할 수 있다. 또한 적합한 하이브리드 및 멀티 클라우드 환경 전반에서 글로벌 플릿(fleet)의 비용을 최적화하기 위해 게임 서버 서비스의 맞춤형 스케일링 정책을 이용할 수 있다.

일본 게임개발사 스퀘어에닉스(Square Enix)의 엘리엇 고잔스키(Elliot Gozansky) 아키텍처 부문 책임자는 “스퀘어에닉스는 오랫동안 구글 클라우드를 사용한 고객으로서 구글 클라우드 게임 서버 서비스의 발전을 가까이서 지켜보고 있다”며 “컨테이너와 멀티 클라우드 기능은 미래의 대규모 멀티플레이어 게임 개발 시 매우 매력적인 기능이다. 구글 클라우드는 전 세계로 스케일링 가능하고 유연하고 개방적인 솔루션을 선보이며 게임 개발자에 대한 지속적인 노력과 헌신을 기울이고 있다”라고 밝혔다. 

게임 서버 서비스는 2020년 말까지 무료로 제공되며 고객은 쿠버네티스 클러스터 사용에 대해서만 비용을 지불하게 된다.

게임 서버 서비스에 대한 더 자세한 내용은 구글 클라우드 게임 서버 서비스 제품 페이지나 빠른 시작 가이드, 유튜브 영상에서 확인할 수 있다. 구글 클라우드 넥스트 ’20: 온에어에서는 클라우드에서 대규모 글로벌 게임 출시를 지원하는 솔루션 세션을 제공한다. (구글 클라우드 넥스트 ‘20: 온에어 무료 등록 링크) [테크수다 Techsuda]

헤드리스 서버란 똑같은 멀티플레이어 호스트인데, 플레이어 즉 캐릭터만 없다고 이해하면 편할 것 같습니다.

현재 구글 클라우드 플랫폼에서는 처음 가입하면 무료로 90일 동안 사용할 수 있는 300$의 크레딧이 제공됩니다.

이걸 활용해 팩토리오 서버를 만들어서 세이브 파일을 업로드해 24시간 구동시킬 수 있는 방법을 소개해 드리겠습니다.

내용이 많이 길어서 천천히 인내심을 가지고 따라 해 주세요!

먼저 구글 클라우드 서비스를 이용해서 컴퓨터를 하나 만들어야 합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

cloud.google.com 으로 이동한 다음 구글 계정에 로그인하면 '무료로 시작하기' 버튼이 생깁니다.

누르면 개인정보와 결제 수단을 등록합시다. 이때 신용카드를 등록하는 이유는 자동 가입을 방지하기 위함으로,

무료 체험판 종료 후 자동으로 결제되지 않으니 안심하셔도 됩니다!

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

가입이 완료되면 자신의 대시보드에 진입하게 됩니다.

우리는 컴퓨터를 사용해서 서버를 만들어야 하니 "Compute Engine 탭의 VM 인스턴스" 항목을 선택한 후 잠시 기다리면 새 인스턴스를 만들 수 있게 됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

Compute Engine API 사용 버튼을 누른 후

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

인스턴스 만들기 버튼을 눌러줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이제 설정해줘야 할 것은 인스턴스의 이름과 서비스 지역, 머신 구성, 부팅 디스크를 골라야 합니다.

한국 안에서 게임을 하시는 분들은 위 사진처럼 제가 만든 구성을 따라 만드시면 기가팩토리가 아닌 이상

무난 무난하게 운영할 수 있는 사양으로 생성할 수 있습니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

밑에서 방화벽 허용 항목을 체크하고, 아래 내용을 펼칩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo
구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

네트워킹 탭에서 default 네트워크 인터페이스 항목을 펼쳐서 외부 IP 주소를 임시에서 IP 주소 만들기로 바꿔주면

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이름은 원하는 걸로 정하고 예약을 누르신 후 잠시 기다리면 IP주소가 발급됩니다.

네트워크 인터페이스의 완료 탭으로 누르고 맨 밑 인스턴스 만들기 버튼을 눌러주세요.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

정상적으로 만들어졌다면 위 사진과 같이 인스턴스 목록이 뜹니다.

이제 서버 안에서 세부적으로 다뤄야 하기 때문에 목록 오른쪽 SSH 버튼을 누르면 새 창으로 서버가 열리게 됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

먼저 해야 할 일은 리눅스 안의 데이터들을 업데이트해줘야 합니다.

sudo apt-get update 를 입력하고 엔터.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이렇게 자동으로 업데이트가 완료됩니다.

그다음은 sudo apt-get install -y default-jre-headless 를 입력해줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

설치가 완료되면 대략 위 이미지 비슷하게 뜹니다.

그다음으로 해주어야 하는 일은 팩토리오 홈페이지에서 배포하는 헤드리스 서버를 다운로드하여야 합니다.

www.factorio.com/download 에 접속하면

Download | Factorio

www.factorio.com

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo
구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

사진 오른쪽 밑에 있는 것처럼 리눅스의 펭귄 마크에 머리가 없는(Headless) 버전을 다운로드할 수 있는데,

클릭해서 다운로드하는 게 아닌 서버 안에서 직접 다운로드하여야 합니다. 버튼을 우클릭해서 링크를 복사해주세요.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

먼저 파일을 저장하기 위해 폴더를 만들고,

sudo mkdir /srv/FactorioServer

다음엔 폴더에 대한 권한을 자신이 접근할 수 있게 설정하는 커맨드를 입력해줍니다.

sudo chown 이름 /srv/FactorioServer

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

cd /srv/FactorioServer/ 커맨드를 입력해서 해당 디렉터리로 이동합니다.

그다음엔 wget 명령어를 사용해서 아까 복사해둔 링크를 붙여 넣어서 팩토리오 파일을 다운로드합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

ls -al 명령어로 해당 디렉터리에 어떤 항목이 있는지 볼 수 있습니다. linux64 파일이 생겼습니다.

tar -xJf linux64 를 입력해 압축을 풀어줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

다시 ls -al 명령어로 목록을 확인해보면 factorio 폴더가 생성되었음을 확인할 수 있습니다.

기존에 다운로드한 압축파일은 용량을 차지할 뿐이니 rm linux64 를 입력해서 지워줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

cd factoriocd data 를 순서대로 입력해서 data 폴더로 접근합니다.

server-setting.example.json 파일을 찾을 수 있는데 우리는 이것을 다운로드해서 수정해야 합니다.

서버에 있는 파일들에 접근하고 다운로드할 수 있게 프로그램을 하나 깔아야 하는데 저는 FileZilla를 사용하겠습니다.

https://filezilla-project.org/

FileZilla - The free FTP solution

Overview Welcome to the homepage of FileZilla®, the free FTP solution. The FileZilla Client not only supports FTP, but also FTP over TLS (FTPS) and SFTP. It is open source software distributed free of charge under the terms of the GNU General Public Licen

filezilla-project.org

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이곳으로 이동해서 프로그램을 받고 설치해줍니다.

FileZilla 통해 서버에 접속하기 위해선 ssh 키가 필요합니다. 이를 위해서 프로그램을 하나 더 다운로드합니다.

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Download PuTTY: latest release (0.74)

This page contains download links for the latest released version of PuTTY. Currently this is 0.74, released on 2020-06-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

주황색 테두리로 표시해둔 것을 찾아서 다운로드해주시면 됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

받은 파일을 실행 후 Generate 버튼을 누르고 마우스를 무작위로 움직이면 아래처럼 Key 값이 생성됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

주황색 테두리 안에 있는 긴 내용 전체를 텍스트 파일 같은 곳에 복사해두고, Save private key 버튼을 눌러줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

저장할 때의 파일 이름은 Key comment 안의 내용을 복사해서 붙여 넣어주세요.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이제 다시 구글 클라우드 플랫폼으로 이동해서 "메타데이터 - SSH 키 - 수정" 항목으로 이동해줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

항목 추가 버튼을 눌러서 아까 복사해둔 긴 내용을 붙여 넣고 저장합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이제 FileZilla를 실행하고 편집 - 설정 창에 진입합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

SFTP 탭에서 키 파일 추가 버튼을 눌러서 아까 저장한 ppk 파일을 등록해줍니다.

그리고 왼쪽 아래 확인 버튼을 눌러 메인 화면으로 돌아옵니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

호스트에 "sftp://서버의 외부 IP 주소", 사용자명에 키 파일의 이름을 입력하고 빠른 연결을 눌러줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

'디렉터리 목록 조회 성공'이 나타나면 성공적으로 접속된 것이고, 우측에 서버의 디렉터리가 보입니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

최상위 폴더 "/" 디렉터리를 눌러 항목을 조회하고 내리다 보면,

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

아까 생성한 srv/FactorioServer/factorio 경로가 있습니다.

data 폴더에 들어가면 server-setting.example.json 파일이 있습니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

파일을 다운로드하려면 왼쪽 디렉터리 창에서 원하는 경로를 설정한 후 오른쪽 서버 디렉터리 창에서 파일을 더블클릭하면 왼쪽 경로에 파일이 다운로드됩니다. 저는 찾기 쉽게 Documents 폴더에 다운로드하였습니다.

다운로드 후에는 파일 이름을 "server-setting.json"으로 바꾸고 우클릭 - 연결 프로그램 - 메모장을 선택해 수정합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

원하는 대로 설정하고 저장하면 됩니다.

유저 토큰의 경우에는 PC에 설치된 팩토리오에서 값을 불러올 수 있는데,

C:\Users\이름\AppData\Roaming\Factorio 경로에 가면 "player-data.json" 파일이 있는데 그 안에서 아래 사진처럼 확인할 수 있습니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo
구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

다른 설정값은 위 사진처럼 세이브 간격, 세이브 생성 수, 자동 일시정지 기능을 설정해주면 됩니다.

제 세팅 값은 자동화가 완료된 시점에서 60분 간격으로 9개까지 세이브 파일이 생성되도록 설정했으며,

자동 일시정지 기능은 주변에 레이저 포탑을 넓게 둘러놔서 바이터들이 습격할 수 없기에 꺼뒀습니다. ( -> false)

저장 후 FileZilla에서 다시 서버에 업로드해야 하는데 아직 factorio/data 폴더에 접근할 권한이 없어서 실패합니다.

권한 설정을 하기 위해 ssh 창으로 갑니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

명령어 순서대로 설명하면

sudo su                           - Root 권한 획득

cd ..                                - 상위 폴더로 이동

cd ..                                - 상위 폴더로 이동

cd srv                              - srv 폴더로 이동

chmod 777 FactorioServer  - FactorioServer 디렉터리에 접근 권한 부여

cd FactorioServer             - FactorioServer 폴더로 이동

chmod 777 factorio           - factorio 디렉터리에 접근 권한 부여

cd factorio                       - factorio 폴더로 이동

chmod 777 data                - data 디렉터리에 접근 권한 부여

exit                                 - Root 권한 해제

입니다.

이제 FileZilla에서 간단하게 factorio/data 디렉터리에 편집한 "server-setting.json" 파일을 드래그 앤 드롭해서 업로드합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

위 사진처럼 "server-setting.json" 파일이 생성되었습니다. 새로고침 해야 나타나는 경우도 있습니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

24시간 돌릴 세이브 파일을 넣기 위해 factorio 디렉터리에서 우클릭 - 디렉터리 만들기 클릭을 한 다음

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

이름은 "saves" 로 입력한 후 확인을 눌러줍니다.

파일을 넣기 위해서는 접근 권한이 필요하기 때문에 ssh 창에 가서 아까와 같은 방법으로 아래 이미지처럼

saves 디렉터리에 접근 권한을 부여합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

PC에서 플레이하던 세이브 파일을 찾아서 서버에 업로드할 차례입니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

C:\Users\이름\AppData\Roaming\Factorio\saves 경로에 가면 zip 파일 형태로 세이브 파일들이 저장되어 있는 모습을 확인할 수 있습니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

마찬가지로 원하는 세이브 파일을 서버의 saves 폴더에 드래그 앤 드롭하면 업로드가 완료됩니다.

이제 팩토리오 서버를 켜보도록 하겠습니다.

/srv/FactorioServer/factorio 디렉터리로 이동해서

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

bin/x64/factorio --start-server saves/"세이브 파일 이름. zip" --server-settings data/server-settings.json

입력합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

여러 텍스트가 지나가고 마지막에 "Matching server connection resumed" 문구가 뜬다면

정상적으로 서버가 시작됐다는 뜻입니다.

게임에 접속하기 전에 팩토리오에서 사용하는 포트 34197을 서버에서 허용해주면 접속할 수 있게 됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

VM 인스턴스 대시보드에서 방화벽 규칙 설정 탭을 누릅니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

방화벽 규칙 만들기 버튼을 클릭합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

맨 위에서 이름은 아무렇게나 정하시고 (ex. factoriowall)

대상을 "네트워크의 모든 인스턴스"

소스 IP 범위에 "0.0.0.0/0"를 추가

udp 항목 체크 후, 34197을 입력하고 만들기 버튼을 누르면 됩니다.

이제 정말로 팩토리오에 접속해봅시다!

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

게임 내에서 "멀티플레이어 - 공개 게임 찾아보기" 에서 server-settings.json 에서 지정한 게임 이름을 검색해서

나온다면 정상적으로 호스팅 되고 있다는 뜻입니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

게임 참가 버튼을 눌러 암호를 입력하는 란이 뜬다면 정상적으로 게임에 접속할 수 있습니다.

그런데, 이렇게만 세팅해두면 ssh 창을 껐을 때는 서버가 같이 종료돼서 24시간 서버의 의미가 없습니다.

이 문제는 서버를 자동으로 켜고 끄는 명령어 파일만 만들어주면 해결됩니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

ssh 창에서 Ctrl+C 를 입력해서 서버를 종료합니다.

nano run.sh 를 입력해서 서버를 실행하는 명령어 파일을 생성합니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

아무것도 없는 편집 창이 뜨는데, 여기다가

nohup bin/x64/factorio --start-server saves/"세이브 파일 이름.zip" --server-settings data/server-settings.json &

을 입력합니다. 마지막에 "&" 기호를 꼭 붙여 넣어야 합니다.

여기서 nohup 명령어는 ssh 터미널 세션이 끊겨도 실행을 멈추지 않고 동작하게 하는 명령어입니다.

그다음 Ctrl+X 를 입력하면 변경 내용을 저장할 것인지 묻는데, y를 입력하고 엔터를 누르면 저장이 됩니다.

이 파일은 실행하는데 권한이 필요하기 때문에,

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

위 이미지와 같이 파일에 권한을 부여해줍니다.

다음은 서버를 멈추는 명령어 파일입니다.

nano stop.sh 를 입력해서 편집창으로 들어갑니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

간단하게 응용프로그램 종료 명령어를 사용하면 됩니다.

pkill factorio

마찬가지로 Ctrl+X 를 입력하고 y 누르고 엔터를 누르면 stop.sh 파일이 생성됩니다.

이 파일도 실행하는데 권한이 필요하기 때문에,

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

다시 한번 위 이미지와 같이 권한을 부여해줍니다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

ls -al 명령어로 확인해보면 초록색으로 권한이 부여된 "run.sh"와 "stop.sh" 파일이 생성된 것을 확인할 수 있습니다.

이제 다시 서버를 실행시켜 봅시다.

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

./run.sh 를 입력하면 백그라운드에서 팩토리오 서버가 시작하게 됩니다.

엔터를 누르면 명령어를 다시 입력할 수 있는데, top 명령어로 현재 실행되고 있는 프로세스를 살펴보면

구글 클라우드 게임서버 - gugeul keullaudeu geimseobeo

제일 위에서 팩토리오가 약 57퍼센트의 CPU 점유율을 가지고 실행되고 있는 모습을 확인할 수 있습니다.

실행 중인 프로세스 리스트에서 나오려면 Ctrl+C 를 입력하면 됩니다.

이제 ssh 터미널을 종료해서 팩토리오 서버는 24시간 실행되게 설정되었습니다!

나중에 서버를 멈출 일이 생겼을 때에는 마찬가지로 /srv/FactorioServer/factorio 경로에서

./stop.sh 를 입력하면 팩토리오가 종료될 것입니다.

사용중인 모드가 있다면 서버의 mods 폴더에 chmod 777로 권한을 부여하고 PC에 설치된 모드 디렉터리에서 FileZilla를 통해 업로드 하면 됩니다.

 - 팩토리오 버전 업데이트는 ./stop.sh 로 종료 후 /srv/FactorioServer 디렉터리에 wget으로 최신 버전의 팩토리오를 다운로드해서 압축해제 후 덮어씌우면 된다고 합니다. 혹시 모르니 세이브 파일은 꼭 백업 해두고 업데이트 진행 합시다.

부족하고 긴 글 읽어주셔서 감사합니다!

참고한 Youtube 자료 : www.youtube.com/watch?v=EfG2Y6mayDY