데디케이티드 서버로 내보내기

GPU 혹은 디스플레이 서버가 없는 기기에서 데디케이티드 서버를 동작시키려면 Godot의 서버 빌드 기능을 사용해야 합니다.

플랫폼 지원

프로젝트가 C#을 사용한다면 Mono용 서버 이진 파일을 사용해야 합니다.

"Headless" 와 "server" 이진 파일 비교

The 서버 다운로드 페이지 는 여러 차이점이 있는 두 가지 바이너리 파일을 지원합니다.

  • Server: 데디케이티드 서버를 구축할 때 사용하십시오. 에디터 기능이 없기 때문에 용량이 작고 최적화가 더 잘 되어 있습니다.

  • Headless: 이 이진 파일은 에디터 기능을 포함하며 프로젝트를 내보낼 때 사용하도록 만들어졌습니다. 이 이진 파일도 데디케이티드 서버를 구축하는 것이 가능은 하지만 용량이 크고 최적화가 잘 되어있지 않기 때문에 권장되지 않습니다.

PCK 파일 내보내기

서버로 프로젝트를 내보낼 수 있는 방법이 두 가지 있습니다:

  • Linux/X11 내보내기 프리셋을 생성한 후 서버 이진 파일을 가리키는 커스팀 릴리스 내보내기 템플릿을 정의해 평상시처럼 프로젝트를 내보내는 방법.

  • Linux/X11 내보내기 프리셋 등으로 PCK 파일만을 내보내는 법.

두 가지 방법의 결과는 동일합니다. 하단의 텍스트는 PCK 파일을 내보내는 방법에 대해 설명합니다.

서버 이진 파일을 다운로드 했다면 프로젝트 데이터를 가진 PCK 파일을 내보냅니다. 내보내기 프리셋을 생성한 뒤 내보내기 창 하단의 Export PCK/ZIP 을 클릭해 내보낼 경로를 설정하면 됩니다. 파일 창의 Export With Debug 체크박스는 PCK 파일과 관련이 없으므로 그냥 놔두셔도 됩니다.

자세한 설명은 프로젝트 내보내기 를 참고하세요.

참고

프로젝트를 headless 에디터에서 내보낸다면 프로젝트 폴더에서 headless 에디터를 --export-pack 옵션으로 호출해 PCK 파일만을 내보낼 수 있습니다.

참고

PCK 파일은 텍스처나 음향 파일처럼 통상적인 경우 서버에 필요하지 않은 리소스도 포함하고 있으므로 PCK 파일의 용량이 불필요하게 커집니다. PCK 파일에서 서버에서 불필요한 자원을 제외해주는 기능이 이후의 Godot 릴리스에 계획되어 있습니다.

그래도 좋은 점을 찾아보자면 데디케이티드 서버 빌드와 클라이언트가 동일한 PCK 파일을 사용할 수 있다는 점입니다. 서버와 클라이언트 모두로 사용이 가능한 단일 아카이브가 필요하다면 유용한 점입니다.

서버 배포 준비하기

서버 이진 파일을 다운로드 한 이후 내보낸 PCK 파일과 동일한 폴더에 저장하십시오. 서버 이진 파일은 Godot이 자동으로 PCK 파일을 찾을 수 있도록 PCK 파일과 동일한 이름을 가져야 합니다(확장자는 제외). 만약 서버와 PCK 파일의 이름을 다르게 지정하고 싶다면 다음과 같이 --main-pack 커맨드라인 인자로 PCK 파일의 경로를 지정해줄 수 있습니다:

./godot-server --main-pack my_project.pck

데디케이티드 서버 구동시키기

클라이언트와 서버가 모두 동일한 Godot 프로젝트의 일부라면 커맨드라인 인자로 서버를 직접 구동시킬 수 있는 방법을 추가해야 합니다. 메인 씬(혹은 싱글턴)의 _ready() 메서드에 아래의 코드 스니펫을 추가하면 됩니다:

if "--server" in OS.get_cmdline_args():
    # Run your server startup code here...
    # Using this check, you can start a dedicated server by running
    # a Godot binary (headless or not) with the `--server` command-line argument.
    pass

다른 방법으로는 아래와 같이 headless 또는 서버 이진 파일이 감지되면 데디케이티드 서버가 구동되도록 만들 수도 있습니다:

# Note: Feature tags are case-sensitive! It's "Server", not "server".
if OS.has_feature("Server"):
    # Run your server startup code here...
    # Note that using this check may break unit testing scripts when
    # running them with headless or server binaries.
    pass

만약 클라이언트와 서버가 별개의 Godot 프로젝트라면 일반적으로 메인 씬을 실행하면 서버가 자동으로 구동되도록 구성하는 것이 좋습니다.

고급 단계

Linux에서 시스템 오류 및 재부팅 이후 데디케이티드 서버가 자동으로 재시작되도록 하려면 systemd service 를 생성하면 됩니다. 이렇게 하면 systemd가 automatic log rotation을 지원하므로 서버 로그를 더 편하게 확인할 수 있습니다.

만약 컨테이너를 다뤄본 경험이 있다면 데디케이티드 서버를`Docker <https://www.docker.com/>`__ 로 래핑하는 것 역시 고려해보십시오. 이렇게 하면 자동 스케일 조절시 더 간편해집니다(튜토리얼 주제를 벗어나는 내용입니다).