Skip to content
블로그로 돌아가기
Folia: 지역화된 멀티스레딩이 당신의 Minecraft 서버 성능을 혁신하는 방법

Folia: 지역화된 멀티스레딩이 당신의 Minecraft 서버 성능을 혁신하는 방법

ice
ice
@ice
Updated
2 조회수
TL;DR:Folia는 Paper를 기반으로 한 멀티스레드 포크로, 대규모 Minecraft 서버가 작업을 CPU 코어에 분산시킬 수 있게 해줍니다. 200명 이상의 플레이어 커뮤니티를 위해 설계되었으며, 플레이어들이 세계 곳곳에 분산되어 있을 때 실질적인 성능 향상을 제공하지만, 플러그인 호환성이 저하되는 대가가 있습니다.
<! - gh-polish-start - >
GitHub - Minecraft 커뮤니티 프로젝트

Folia (PaperMC/Folia)

지역화된 멀티스레딩을 전용 서버에 추가하는 Paper의 포크입니다.

GitHub에서 Star 주기 ⤴
⭐ 4,228 stars💻 Shell📄 GPL-3.0
<! - gh-polish-end - >

대규모 Minecraft 서버를 운영하고 있다면, 새로운 청크 탐사나 플레이어 피크 시간에 TPS가 급락하는 것을 목격했을 겁니다. Folia가 당신이 찾던 답일 수 있습니다. 이 Paper 기반 포크는 Minecraft 서버가 계산을 처리하는 방식을 완전히 재구상하여, 세계를 독립적인 영역으로 분할하고 각 영역을 자신의 스레드에서 실행합니다. 하나의 메인 스레드가 모든 것을 동시에 처리하느라 고생하는 대신, Folia는 CPU 코어가 실제로 병렬 작업을 수행할 수 있게 합니다.

Folia란 무엇인가

Folia는 모드가 아닙니다. 플러그인도 아닙니다. Paper 서버의 처음부터 끝까지 재작성으로, 메인 스레드 개념을 완전히 제거합니다. 대신 인접한 청크들이 "영역"으로 묶여 있고, 각 영역은 스레드 풀의 자신의 틱 루프에서 실행됩니다. 하나의 스레드가 모든 것을 세밀하게 관리하게 하는 대신, 세계의 서로 다른 부분이 각자 독립적인 프로세서를 갖는다고 생각하면 됩니다.

아키텍처가 중요한 이유는 서버 확장 방식을 바꾸기 때문입니다.

Paper는 수백만 명의 플레이어 서버를 단일 스레드 설계로도 잘 처리합니다. 하지만 다음 규모의 서버에 도달하면 - 거대한 세계에 흩어져 있는 수백 명의 플레이어 - 병목 현상이 나타납니다. Folia는 단일 스레드에서 더 많은 것을 짜내려고 하지 않습니다. 대신 근본적으로 문제 자체를 바꿉니다.


이것이 필요한 이유

넓게 퍼져 있는 대규모 서버가 가장 많은 이점을 얻습니다. 플레이어들의 섬이 차원 전체에 흩어져 있는 스카이블록 네트워크, 거대한 생존 세계, 분산된 던전이 있는 커스텀 RPG 서버, Folia가 빛나는 곳들입니다. 플레이어들이 한 스폰 지역에 모여 있다면, 같은 성능 향상을 보지 못할 것입니다. 하지만 사람들이 다른 방향으로 탐사하는 200명 이상의 SMP에서는 차이가 상당합니다.

미리 말해야 할 점이 하나 있습니다: 이것은 드롭인 대체품이 아닙니다.

플러그인을 Folia의 멀티스레드 환경에 맞게 다시 작성해야 합니다. 그것이 실제 비용입니다. 하지만 이 규모를 고려하고 있다면, 플러그인 생태계가 아마도 이미 커스텀일 겁니다. Paper를 가정하는 표준 플러그인들은 Folia에서 즉시 작동을 멈춥니다.

하지만 보상은 진정한 것입니다. 적절한 구성으로, 실제 성능 향상을 기대할 수 있으며 이는 CPU 코어 수에 따라 확장됩니다. 표준 Paper에서는 달성할 수 없는 성능입니다.


설치 및 기본 설정

먼저 PaperMC 다운로드 페이지에서 최신 빌드를 받으세요. 2026년 기준, Folia는 최신 Minecraft 버전(1.20.4 이상)을 지원합니다. jar 파일을 서버 디렉토리에 다운로드하세요:

<! - gh-code-start - >
bash
wget https://api.papermc.io/v2/projects/folia/versions/latest/builds/latest/downloads/folia-latest.jar
mv folia-latest.jar folia.jar
<! - gh-code-end - >

다음으로, eula.txt 파일에서 EULA를 수락해야 합니다. 서버를 한 번 부팅하여 구성 파일을 생성하세요:

<! - gh-code-start - >
bash
java -Xmx30G -Xms30G -jar folia.jar nogui
<! - gh-code-end - >

중지하세요 (folia.yml 구성을 생성합니다). 그 다음 실제 작업이 시작됩니다: 스레드 구성입니다. 이는 단순히 "더 많은 스레드를 설정하고 시작"이 아닙니다. PaperMC 문서는 프로덕션으로 이동하기 전에 세계를 미리 생성할 것을 권장하며, 이는 청크 로드 오버헤드를 크게 줄입니다.


스레드 구성: 진짜 도전

이곳이 대부분의 사람들이 혼동하는 곳입니다. folia.yml에는 `threaded-regions.threads` 설정이 있습니다. 그냥 최대로 설정하지 마세요. 프로젝트 자체의 지침은 이렇습니다: netty IO를 위해 스레드 할당 (약 200-300 플레이어당 4개), 청크 시스템 IO 스레드 (약 200-300 플레이어당 3개), 미리 생성된 경우 청크 시스템 워커 (약 200-300 플레이어당 2개), 그리고 나머지 코어를 전체 할당의 80%까지 틱 스레드에 사용합니다.

500명의 플레이어를 수용하는 32코어 머신에서는 대략 다음과 같이 할당할 것입니다:

  • Netty IO: 8 스레드
  • 청크 시스템 IO: 6 스레드
  • 청크 시스템 워커: 4 스레드
  • 틱 스레드: 80%까지의 남은 코어 (약 10 스레드)

100% 할당을 하지 않는 이유는 플러그인과 예상치 못한 백그라운드 작업이 자체 스레드를 생성하고 서버를 충돌시킬 수 있기 때문입니다. 80% 상한선은 실제로 중요한 안전 경계입니다.

그렇더라도 이것은 시작점입니다. 부하 상태에서 실제 스레드 사용량을 모니터링하고 조정하세요. folia.yml 파일에는 모든 옵션에 대한 자세한 설명이 있습니다.


작동하는 주요 기능

영역 격리. 각 영역은 20 TPS에서 독립적으로 틱합니다. 한 영역의 래그 스파이크가 다른 영역으로 전파되지 않습니다. 던전 시스템이 최적화되지 않았다면, 스폰 지역의 성능을 떨어뜨리지 않을 것입니다.

적절한 스레드 확장. Paper의 플러그인 스레드 풀 방식 (여전히 틱-중요 작업에서 병목 현상)과 달리, Folia의 영역은 틱 로직을 병렬로 실행합니다. 더 많은 코어가 실제로 더 많은 틱 처리로 변환됩니다. 확장이 선형은 아니지만, 실제입니다.

비동기 청크 로드. 청크 I/O는 영역 스레드 밖에서 발생합니다. 단일 스레드 서버에서 경험하는 무작위 프리즈가 없을 것입니다 (스토리지 읽음이 급증할 때).

또한 서버 측 청크 최적화, 미리 생성된 청크 캐싱, 영역당 구성 가능한 메모리 제한에 대한 기본 지원도 있습니다. 솔직히 말해서, 문서를 깊이 파고들려면 기능 깊이가 인상적입니다.


무엇이 작동을 멈추고 어떻게 대처할 것인가

대부분의 플러그인은 메인 스레드에 있다고 가정하고 동기화 없이 안전하게 세계 상태를 읽고 쓸 수 있다고 생각합니다. 그들은 Folia에서 틀렸습니다. 플러그인이 "블록 X가 돌인지 확인하고 공기로 설정"하는 같은 것을 한다면, 경쟁 조건이 Paper에서는 절대 일어나지 않았을 방식으로 스레드 전체에서 발생할 수 있습니다. 플러그인 오류를 예상하세요.

몇 가지 구체적인 점:

  • 영역 간 순간이동은 추가 복잡성을 포함하며 플러그인이 주의하지 않으면 교착 상태를 유발할 수 있습니다
  • 월드 보더 확인은 영역 인식이며 예상과 다르게 작동할 수 있습니다
  • 타이머와 예약 작업은 손상을 피하기 위해 영역 안전이어야 합니다
  • 영역 경계를 넘은 엔티티 추적은 플러그인 업데이트가 필요합니다

Folia 문서는 호환되지 않는 패턴을 명시적으로 나열합니다. 플러그인의 호환성을 평가할 때, 틱 로직을 직접 조작하거나 청크 데이터에 단일 스레드 액세스를 가정하는지 확인하세요.


Folia가 의미가 있을 때

16코어 이상의 머신을 보유하고 있습니다. 서버가 정기적으로 200명 이상의 동시 플레이어에 도달할 것입니다. 플레이어들이 지리적으로 퍼져 있습니다 (모두 스폰에 있지 않음). 커스텀 플러그인 인프라를 가지고 있거나 기존 플러그인을 포팅할 의향이 있습니다.

이 네 가지 조건? 당신은 후보입니다.

8코어 VPS에서 50명의 플레이어를 운영하고 있습니까? Paper를 유지하세요. 이득이 호환성 골치거리를 정당화하지 못할 것입니다. 모두가 스폰에서 시간을 보내는 100명의 SMP를 운영하고 있습니까? Folia가 도움이 되지만, 퍼져 있는 서버만큼 극적이지는 않습니다.

하지만 다음 세대 심각한 멀티플레이 Minecraft 커뮤니티를 구축하고 있다면, Folia는 성능 상한선이 실제로 더 높은 곳입니다. adderall_abuser 같은 스킨, ironmouse의, 그리고 거대한 서버의 다른 활동적인 커뮤니티 멤버들의 플레이어들은 이미 이 공간을 탐구하고 있습니다. Modrinth의 스트리밍 커뮤니티와 대규모 생존 프로젝트를 확인하면 Folia가 더 자주 나타나는 것을 볼 것입니다.


고려할 가치 있는 대안

Paper. 대부분의 서버에서 여전히 황금 표준입니다. 안정적이고, 잘 이해되고, 거대한 플러그인 생태계입니다. Folia가 과도하게 보인다면, Paper의 최적화 기능 (비동기 청크 로드, 감소된 엔티티 AI 틱 등)이 충분할 수 있습니다.

Purpur. 플레이어당 추가 최적화가 있는 Paper 포크입니다. 플레이어 경험이 크게 다른 서버에 더 좋습니다 (일부는 AFK, 일부는 활동적으로 탐사합니다). Folia보다 아키텍처 변화가 적으면서 더 목표화된 성능 향상입니다.

Fabric 서버. 모드 지원이 필요한 경우 (플러그인이 아님), Fabric 생태계는 실제로 지금 서버용으로 꽤 견고합니다. 같은 방식으로 멀티스레드되지는 않지만 경량이고 빠릅니다.

솔직한 진실: Folia는 전문화되어 있습니다. 특정 규모의 특정 문제를 위한 것입니다. 다른 모든 사람에게는 신중한 구성을 갖춘 Paper가 여전히 올바른 선택입니다.

<! - gh-polish-start - > <! - gh-polish-end - >