오늘은 지난 강의에 이어 본격적으로 마인크래프트 서버를 최적화해볼 것이다.
지난번 강의를 다 읽은 것을 전제로 작성하였으니, 아직 읽지 않았을 경우 여기를 눌러 읽고 오면 도움이 될 것이다.
서버 소프트웨어 선택
처음 마인크래프트 서버를 운영하시는 분들은 여러 서버 소프트웨어를 보고 생소하게 느낄 수도 있다. (여기서 말하는 "서버 소프트웨어"는 Spigot, Craftbukkit, Paper 등을 뜻하며, 이유는 알 수 없지만, 한국에서는 보통 "버킷" 또는 "서버 구현체"라고 부른다) 그도 그럴 것이, 종류가 매우 많기 때문이다. 당장 가장 널리 쓰이는 Paper만 보아도 Vanilla Minecraft → Craftbukkit → Spigot → Paper 순으로 파생되었다.
따라서 이번 강의에서는 Bukkit API 기반으로 된 대표적인 서버 소프트웨어들을 몇 개 살펴보고, 각각 장, 단점을 다룰 것이다. Folia 등 Bukkit API와 호환되지 않거나 지나치게 불안정한 서버 소프트웨어는 제외하였다.
Craftbukkit
현재는 후술할 Spigot 개발팀이 개발 및 유지 중인 서버 소프트웨어이다. Craftbukkit DMCA 사태 이후로 사실상 주도권을 많이 잃은 상태이며, 대부분의 플러그인들이 더 이상 Craftbukkit을 지원하지 않아 별다른 사유가 없으면 권장하지 않는다.
Spigot
Craftbukkit의 여러 문제점을 해결한 서버 소프트웨어이다. 전체적인 성능이 향상되었으며, X-ray 방지 등도 기본적으로 지원한다. 1.12.2 버전까지의 Paper는 여러모로 불안정한 부분이 있어 안정성을 생각한다면 Spigot도 나쁘지 않은 선택이지만, 1.13 이후로는 Minecraft 자체 최적화의 문제로 인하여 후술할 Paper가 주목받기 시작했기 때문에 호환성 등의 문제가 아니라면 Paper 사용을 추천한다.
Paper
Spigot의 여러 문제점을 해결한 서버 소프트웨어이다. Spigot보다 뛰어난 성능과 최적화로 인하여 1.13 이후로 많은 서버가 주로 사용하는 서버 소프트웨어이다. BuildTools를 통해 직접 컴파일해서 이용해야 하는 Spigot과 달리, Paper는 다운로드 후 첫 실행 시 자동으로 이러한 과정을 진행하게 되어 있어 손쉽게 이용할 수 있다는 장점도 있다. 대부분의 플러그인들이 호환되며, 현재 가장 권장되고 있는 서버 소프트웨어 중 하나다.
Tuinity
Paper를 포크하여 여러 가지 성능적인 개선을 이루어낸 서버 소프트웨어이다. 단점으로는 안정성이 Paper보다 비교적 떨어진다는 점과 아직 인지도가 낮은 점, 1.15 이전 버전은 지원하지 않는다는 점이 있다. 또한 제 성능을 내기 위해서는 Java 11 이상을 요구한다. 1.15/1.16 서버를 운영하고 있다면 충분히 고려해볼 만한 서버 소프트웨어라고 느껴진다.
2021년 9월 부로 Tuinity의 모든 기능이 Paper에 흡수되었으며, 이에 따라 Tuinity 사용을 권장하지 않는다.
Pufferfish
마인크래프트 호스팅 서비스 업체인 Pufferfish Studios LLC에서 만든 Paper의 포크로, 대규모 멀티플레이 서비스에 적합한 여러 성능적인 개선과 더불어 Sentry.io 연동 등 다양한 기능을 추가한 것이 특징이다. (자세한 사항은 해당 문서 참고)
특이 사항으로는 Pufferfish+라는 추가적인 최적화가 적용된 버전이 존재하는데, 이는 Pufferfish 호스팅을 사용하는 사람만 이용할 수 있다고 한다.
Purpur
위에서 서술한 Pufferfish를 기반으로 하는 포크로, 추가적인 성능 개선과 다양한 기능이 추가된 것이 특징이다.
서버 소프트웨어를 설치하고, 구동하는 과정은 생략하도록 하겠다.
맵 프리로드의 중요성
많은 한국 마인크래프트 서버 운영자들, 특히 야생 서버 운영자들이 맵 프리로드의 중요성을 잘 모르는 경우가 많다. 맵 프리로드란 마인크래프트 서버의 맵을 미리 생성하는 과정을 뜻하며, 마인크래프트 서버 속도 저하의 주된 요소 중 하나인 청크 생성 과정을 생략해주기 때문에 속도 향상에 큰 도움이 된다.
시간이 걸리는 작업이고, 생성이 끝날 때까지 서버의 성능이 저하되기 때문에 공개 전 미리 진행하는 것을 추천한다. 맵 프리로드는 WorldBorder, Chunky 등의 플러그인으로 진행할 수 있으며, 필자는 Chunky를 권장한다. 맵 프리로드를 위하여 아래 과정을 수행하면 된다.
- Chunky를 받아 서버에 설치한다.
- /worldborder 명령어를 통해 맵 크기를 제한한다.
- /chunky worldborder 명령어를 통해 구역을 선택한다.
- /chunky start를 통해 맵 프리로드 작업을 시작한다.
맵 크기에 따라 몇 시간에서 길게는 며칠까지 소요될 수 있다.
마치며
오늘 준비한 강의는 여기서 끝이 난다. 다음 강의에서는 Java의 GC 작업 최적화와 서버 소프트웨어의 Config(콘피그) 파일을 최적화하는 과정 등을 다룰 예정이다.
1강: 버전에 따른 최적화 정도 비교, 하드웨어 선택하기
2강: 서버 소프트웨어 선택, 맵 프리로드의 중요성
3강: GC 작업 최적화, 각종 Config 최적화
4강: 지연(렉) 분석, 서버 취약점의 개념과 방지 방법