Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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

GPU나 디스플레이 서버가 없는 장치에서 프로젝트에 대해 데디케이티드 서버를 실행하려면 headless 디스플레이 서버와 Dummy 오디오 드라이버로 Godot을 실행해야 합니다.

Godot 4.0부터는 --headless 명령줄 인수로 아무 플랫폼에서 Godot 바이너리를 실행하거나, 데디케이티드 서버로 내보낸 프로젝트를 실행하여 이를 수행할 수 있습니다. Godot 3.x와 달리 더 이상 특정 서버 바이너리를 사용할 필요가 없습니다.

편집기 대 내보내기 템플릿

헤드리스 모드에서는 편집기 또는 내보내기 템플릿 (디버그 또는 릴리스) 바이너리를 사용할 수 있습니다. 사용 사례에 따라 어떤 바이너리를 사용해야 하는지 결정하세요:

  • 내보내기 템플릿: 데디케이티드 서버를 실행하는 데 사용하세요. 편집기 기능이 포함되지 않으므로 용량이 작고 최적화도 더 잘 되어 있습니다.

  • 편집기: 이 바이너리는 편집기 기능을 포함하며 프로젝트 내보내기에 사용하도록 예정되어 있습니다. 이 바이너리는 데디케이티브 서버를 실행하는 데 사용할 수 있지만, 용량이 크고 최적화가 덜 되어 권장하지 않습니다.

내보내기 방식

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

  • 서버를 호스팅할 플랫폼에 대해 별도의 내보내기 프리셋을 만든 다음 평소와 같이 프로젝트를 내보냅니다.

  • 서버를 호스팅할 플랫폼과 일치하는 플랫폼용 PCK 파일만 내보는 것이 좋습니다. 이 PCK 파일을 내보내기 템플릿 바이너리와 같은 폴더에 넣고, 바이너리 이름을 PCK와 같게 (파일 확장자를 빼고) 변경한 후 실행하세요.

두 방법 모두 동일한 결과를 얻어야 합니다. 페이지의 나머지 부분에서는 첫 번째 방식을 중점적으로 설명하겠습니다.

자세한 정보는 프로젝트 내보내기를 참고하세요.

데디케이티드 서버용 프로젝트 내보내기

서버를 대상으로 할 때 평소와 같이 프로젝트를 내보내면 PCK 파일이 클라이언트의 파일 크기만큼 크다는 것을 알 수 있습니다. 이는 서버에 필요하지 않은 리소스(예: 텍스처 데이터)를 포함하여 모든 리소스를 포함하기 때문입니다. 또한 헤드리스 모드는 자동으로 사용되지 않습니다. 사용자는 창이 생성되지 않도록 ``--headless``를 지정해야 합니다.

텍스처와 같은 많은 리소스를 PCK 파일에서 제거하여 크기를 크게 줄일 수 있습니다. Godot는 씬 또는 리소스 파일(내장 또는 외부)의 참조를 보존하는 방식으로 텍스처 및 재료에 대해 이를 수행하는 방법을 제공합니다.

이를 시작하려면 서버에 대한 전용 내보내기 사전 설정이 있는지 확인한 다음 이를 선택하고 리소스 탭으로 이동하여 내보내기 모드를 변경하세요.

내보내기 프리셋에서 **데디케이티드 서버로 내보내기** 내보내기 모드를 선택하기

내보내기 프리셋에서 데디케이티드 서버로 내보내기 내보내기 모드를 선택하기

이 내보내기 모드를 선택하면 dedicated_server 기능 태그가 내보낸 프로젝트에 자동으로 추가됩니다.

참고

이 내보내기 모드를 사용하지 않지만 여전히 기능 태그를 원하는 경우 내보내기 사전 설정의 Features 탭에 dedicated_server 이름을 쓸 수 있습니다. 또한 내보낸 프로젝트를 실행할 때 ``--headless``가 강제 적용됩니다.

이 내보내기 모드를 선택하면 프로젝트의 리소스 목록이 표시됩니다.

유지할 리소스 선택, 제거된 시각적 요소로 유지 또는 제거

유지할 리소스 선택, 제거된 시각적 요소로 유지 또는 제거

상자를 선택하면 지정된 파일이나 폴더에 대한 옵션을 재정의할 수 있습니다. 확인란을 선택해도 내보내는 파일에는 영향을 주지 않습니다. 대신 각 확인란에 대해 선택한 옵션을 통해 수행됩니다.

선택한 폴더 내의 파일은 기본적으로 상위 옵션을 자동으로 사용합니다. 이는 옵션 이름에 (상속됨) 접미사가 표시됩니다(옵션 이름은 회색으로 표시됨). 현재 옵션이 상속된 파일의 옵션을 변경하려면 먼저 해당 옵션 옆의 확인란을 선택해야 합니다.

  • 스트립 비주얼: 플레이스홀더 클래스로 대체된 비주얼 파일(텍스처 및 재료)과 함께 이 리소스를 내보냅니다. 자리 표시자 클래스는 이미지 크기(때때로 2D 씬에서 요소를 배치하는 데 사용됨)를 저장하지만 그 외에는 아무것도 저장하지 않습니다.

  • 보존: 시각적 파일을 그대로 유지하면서 평소대로 이 리소스를 내보냅니다.

  • 제거: 파일이 PCK에 포함되지 않습니다. 이는 클라이언트에게만 필요한 장면과 리소스를 무시하는 데 유용합니다. 그렇게 하는 경우 서버가 어떤 방식으로든 이러한 클라이언트 전용 장면과 리소스를 참조하지 않는지 확인하세요.

일반적인 권장 사항은 서버가 픽셀 색상과 같은 이미지 데이터에 액세스해야 하는 경우를 제외하고 가능하면 **Strip Visuals**를 사용하는 것입니다. 예를 들어 서버가 이미지 콘텐츠를 기반으로 충돌 데이터를 생성하는 경우 해당 특정 이미지에 대해 **Keep**을 사용해야 합니다.

내보낸 PCK의 파일 구조를 확인하려면 파일 확장자가 ``.zip``인 PCK/ZIP 내보내기... 버튼을 사용한 다음 파일 관리자에서 결과 ZIP 파일을 엽니다.

경고

제거된 파일을 참조하는 장면/리소스를 더 이상 성공적으로 로드할 수 없으므로 제거 모드를 사용할 때는 주의하세요.

특정 리소스를 제거하고 싶지만 해당 리소스 없이도 장면을 로드할 수 있도록 하려면 씬 파일에서 참조를 제거하고 스크립트에서 ``load()``를 사용하여 노드' 속성에 파일을 로드해야 합니다. 이 접근 방식은 오디오와 같이 아직 Godot가 자리 표시자로 대체하는 것을 지원하지 않는 리소스를 제거하는 데 사용할 수 있습니다.

텍스처 제거는 PCK 크기에 가장 큰 영향을 미치는 경우가 많으므로 처음에는 **Strip Visuals**를 사용하는 것이 좋습니다.

위 옵션을 사용하면 클라이언트(모든 리소스를 정상적으로 내보내는)의 PCK는 다음과 같습니다.

.
├── .godot
│   ├── exported
│   │   └── 133200997
│   │       └── export-78c237d4bfdb4e1d02e0b5f38ddfd8bd-scene.scn
│   ├── global_script_class_cache.cfg
│   ├── imported
│   │   ├── map_data.png-ce840618f399a990343bfc7298195a13.ctex
│   │   ├── music.ogg-fa883da45ae49695a3d022f64e60aee2.oggvorbisstr
│   │   └── sprite.png-7958af25f91bb9dbae43f35388f8e840.ctex
│   └── uid_cache.bin
├── client
│   ├── music.ogg.import
│   └── sprite.png.import
├── server
│   └── map_data.png.import
├── test
│   └── scene.gd
└── unused
│   └── development_test.gd
├── project.binary
├── scene.gd
├── scene.tscn.remap

서버의 PCK 파일 구조는 다음과 같습니다.

.
├── .godot
│   ├── exported
│   │   └── 3400186661
│   │       ├── export-78c237d4bfdb4e1d02e0b5f38ddfd8bd-scene.scn
│   │       ├── export-7958af25f91bb9dbae43f35388f8e840-sprite.res  # Placeholder texture
│   │       └── export-fa883da45ae49695a3d022f64e60aee2-music.res
│   ├── global_script_class_cache.cfg
│   ├── imported
│   │   └── map_data.png-ce840618f399a990343bfc7298195a13.ctex
│   └── uid_cache.bin
├── client
│   ├── music.ogg.import
│   └── sprite.png.import  # Points to placeholder texture
└── server
│   └── map_data.png.import
├── project.binary
├── scene.gd
├── scene.tscn.remap

데디케이티드 서버 시작하기

클라이언트와 서버가 모두 같은 Godot 프로젝트의 일부라면 명령줄 인자로 서버를 직접 구동시킬 수 있는 방법을 추가해야 합니다.

전용 서버로 내보내기 내보내기 모드를 사용하여 프로젝트 <doc_exporting_for_dedicated_servers_exporting_project>`를 내보낸 경우(또는 ``dedicated_server``를 사용자 정의 기능 태그로 추가한 경우) ``dedicated_server` 기능 태그를 사용하여 전용 서버 PCK가 사용되고 있는지 여부를 감지할 수 있습니다.

# Note: Feature tags are case-sensitive.
if OS.has_feature("dedicated_server"):
    # Run your server startup code here...
    pass

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

if DisplayServer.get_name() == "headless":
    # Run your server startup code here...
    #
    # Using this check, you can start a dedicated server by running
    # a Godot binary (editor or export template) with the `--headless`
    # command-line argument.
    pass

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

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

프로젝트를 내보낼 필요 없이 명령줄에서 서버 기능을 테스트하는 데 사용할 수 있으므로 위의 명령줄 인수 중 하나 이상을 추가하여 서버를 시작하는 것이 좋습니다.

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

고급 단계

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

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