최적화의 오해
하이브리드 서버
섹션 제목: “하이브리드 서버”하이브리드 서버는 구조적인 문제 때문에 할 수 있는 최적화가 적고, 대부분의 최적화 모드를 설치할 수 없다. 그래도 최적화 모드 설치 말고 다른 최적화는 여전히 할 수 있다.
최고의 최적화는 하이브리드 서버를 안 쓰는 것
최적화 플러그인
섹션 제목: “최적화 플러그인”추천하지 않는 “최적화” 플러그인
섹션 제목: “추천하지 않는 “최적화” 플러그인”플레이어 탐험 제한
섹션 제목: “플레이어 탐험 제한”청크를 대량으로 생성하는 작업은 성능을 많이 먹으므로, 플레이어가 생성하는 청크 수를 제한하면 어느 정도 효과는 있다.
하지만 보통은 설정으로 청크 생성 속도를 낮출 수 있으니, 플레이어를 강제로 되돌리거나 속도를 늦추는 식으로 탐험을 방해할 필요는 별로 없다.
그러니 다음과 같은 플러그인은 그만 쓰자.
TooManyGen - 탐험하는 플레이어에게 벌을 준다. 게임 경험을 크게 해치며, 더 좋은 선택지가 있다.
AI에 영향을 주는 플러그인
섹션 제목: “AI에 영향을 주는 플러그인”Pufferfish DAB로 먼 곳에 있는 몹의 AI를 줄이는 것이 플러그인이 API로 처리하는 것보다 효과적이고 게임 로직에도 맞다.
그러니 다음과 같은 플러그인은 그만 쓰자.
LaggRemover (Fork) - 플러그인을 제거해도 엔티티 AI가 사라진 채로 남는 경우가 있다. 거리에 따라 AI를 줄이는 Pufferfish(또는 최적화에 집중한 다른 포크)를 따라가지 못한다.
메모리 GC를 조작하는 플러그인
섹션 제목: “메모리 GC를 조작하는 플러그인”메모리 GC는 JVM이 알아서 제어한다. GC 자체가 멈칫거림을 일으키며, “메모리 정리” 효과 같은 건 없다.
그러니 다음과 같은 플러그인은 그만 쓰자.
Spartan - 성능이 아주 나쁜 유료 안티치트. 샀다면 축하한다, 사기당했다(농담 반). 최근에 샀다면 당장 환불을 신청하자!
주민 최적화 플러그인
섹션 제목: “주민 최적화 플러그인”주민은 성능을 많이 먹는다. 공용 거래 용도로만 필요하다면 Shopkeepers 플러그인으로 AI 없는 주민을 만들 수 있다.
주민과 AI를 그대로 두고 싶다면 purpur.yml에서 lobotomize를 찾아 켜기만 하면 된다.
또 config/paper-world-defaults.yml에도 주민 관련해서 최적화할 수 있는 항목이 있지만, 주민이 좀 멍해 보일 수 있다.
서버 설정 조정에서 직접 찾아보자.
바닥 아이템 청소 플러그인
섹션 제목: “바닥 아이템 청소 플러그인”바닥에 떨어진 아이템이 성능 문제를 일으키는 경우는 드물고, 아이템은 보통 알아서 사라진다. 서버에 드롭 아이템이 유난히 많다면 다음 두 설정을 조정하자.
올바른 방법 보기 #alt-item-despawn-rate, 올바른 방법 보기 #merge-radius
그러니 다음과 같은 플러그인은 그만 쓰자.
ClearLagg - 아이템 청소 플러그인
몹 청소 플러그인
섹션 제목: “몹 청소 플러그인”플러그인으로 몹을 지우는 건 바보 중의 바보나 하는 짓이다. 몹은 서버에 설정된 상한에 닿으면 더 스폰되지 않는다. 그런데 지워 버리면 서버는 몹을 다시 스폰해야 하고, 이 과정도 성능을 많이 먹는다.
몹이 그렇게 많이 필요 없다면 설정을 조정하면 된다. 올바른 방법 보기
그러니 다음과 같은 플러그인은 그만 쓰자.
Cleaner - 몹/아이템 청소 플러그인
엔티티 스태킹 플러그인
섹션 제목: “엔티티 스태킹 플러그인”플레이어가 정말 엄청나게 많은 몹을 키우려는 게 아니라면, 몹을 스태킹해도 서버는 결국 몹을 더 스폰하느라 성능을 낭비한다. 그러니 스태킹 플러그인은 설치하지 말자.
그러니 다음과 같은 플러그인은 그만 쓰자.
StackMob - 엔티티가 밀집하면 스태킹하는 플러그인(꼭 써야 한다면 다른 스태킹 플러그인보다는 이걸 추천한다)
스태킹 직후 잠깐은 부하가 줄어드는 게 맞다. 하지만 실제 엔티티 수가 줄었으니 서버가 몹을 다시 스폰하고, 부하는 천천히 원래대로 돌아온다.
또 스태킹 플러그인이 이름표 방식을 쓰면 이름 붙이기 기능을 희생하게 된다. 주류 방식은 패킷을 보내 여기 몹이 몇 마리 있는지 알려 주는 것인데, 계속 갱신되는 대량의 패킷도 대역폭과 CPU에 부담을 준다.
마지막으로 심리학적으로 보면(아님), 플레이어는 늘 서버가 버틸 수 있는 한계까지 동물을 키우려 한다. 100마리까지 스태킹되게 해 두면, 100마리씩 스태킹된 양 무더기를 잔뜩 키울 뿐이다.
결론: 스태킹 플러그인은 설치하지 말자.
폭발 최적화 플러그인
섹션 제목: “폭발 최적화 플러그인”Paper 쨩이 여러분을 위해 /config/paper-world-default.yml에 폭발 최적화를 준비해 두었다.
청크 언로드 플러그인
섹션 제목: “청크 언로드 플러그인”서버는 알아서 플러그인을 언로드한다. 플러그인으로 청크를 언로드해야 하는지 계속 검사하느니 서버에 맡기는 편이 낫다.
더 빨리 언로드하고 싶다면 올바른 방법 보기
그 밖에 피해야 할 플러그인
섹션 제목: “그 밖에 피해야 할 플러그인”올인원 플러그인
섹션 제목: “올인원 플러그인”Lagassist
섹션 제목: “Lagassist”개발이 사실상 버려진 유료 올인원 “최적화 플러그인”이다. 쓰지 말자. 아래는 불평 모음이다(악의가 좀 섞여 있다. 이유를 묻는다면 100위안을 사기당한 적이 있어서다).
이 플러그인을 쓰면 안 되는 이유
-
ChunkAnalyser - 월드의 레드스톤, 호퍼, 엔티티 등을 단순히 검색할 뿐이다. Insights/ Entitydetection 같은 대체 플러그인이 많다.
-
LagMonitor, LagMap, Benchmark - 쓸모없는 성능 측정 기능이다(Spark만 못하다).
-
RedstoneCuller - 레드스톤 장치를 그냥 부숴 버린다. 대체 플러그인: AntiRedstoneClock
-
ChunkHoppers - UpgradeableHoppers 같은 전용 청크 호퍼 플러그인이 있고, 사용감도 이 플러그인보다 훨씬 좋다.
-
ChunkLimiter - 대체 플러그인: FarmControl / Mob-Farm-Manager 설정 항목도 더 많다.
-
Dynamic View Distance - 대체 플러그인: View-distance-tweaks
한마디로 소위 최적화 기능 하나하나가 전부 문제다. 플러그인이 잡아먹는 성능이 “최적화”로 아끼는 성능보다 크니, 더는 쓰지 말자.
CMI / ESS
섹션 제목: “CMI / ESS”이른바 기본 플러그인으로, 플러그인 하나로 여러 개, 많게는 수십 개 플러그인의 기능을 대신하는 것이 목표다.
하지만 이런 플러그인은 기능만 많고 전문성은 떨어지기 쉽다. 예를 들어 CMI의 경제 기능은 버그가 잦고 크로스서버를 지원하지 않는다.
ESS는 대량의 플레이어 데이터를 YAML에 저장하며, 돈 복사 버그 같은 혈압 오르는 문제가 자주 발견된다.
이런 플러그인은 기능이 많다 보니 최적화가 덜 된 코드가 생기기 쉽고, 한 분야에 특화된 플러그인을 따라가지 못한다.
너무 오래된 플러그인
섹션 제목: “너무 오래된 플러그인”Vault 같은 의존성 플러그인을 빼면 플러그인은 계속 업데이트되어야 한다. 오랫동안 업데이트되지 않은 플러그인이
서버의 핵심 콘텐츠가 아니라면, 비슷한 기능의 다른 플러그인을 찾아보자.
기능이 너무 단순한 플러그인
섹션 제목: “기능이 너무 단순한 플러그인”10kb도 안 되는 플러그인들로, 우클릭으로 수박을 수확하거나 농지 밟기를 막는 정도의 기능만 있는 것들이다.
이런 기능은 다른 플러그인이나 서버 코어에 이미 들어 있을 가능성이 크다(예: Purpur에서 농지 밟기 여부를 설정할 수 있다).
보통 성능에는 영향이 없지만, 줄이면 서버 유지 보수가 확실히 편해진다.
기능이 겹치는 플러그인
섹션 제목: “기능이 겹치는 플러그인”말 그대로 CMI와 ESS 같은 기본 플러그인 두 개, GroupManager와 LuckPerms 같은 권한 플러그인 두 개, 경제 플러그인 두 개를 동시에 설치하는 것이다.
플러그인 충돌로 성능 문제가 생길 수 있을 뿐 아니라, 권한이 먹히지 않거나 보호 기능이 동작하지 않는 심각한 문제가 생길 수도 있다.
쓸 만한 최적화 제한 플러그인
섹션 제목: “쓸 만한 최적화 제한 플러그인”FarmControl
섹션 제목: “FarmControl”주로 초대형이거나 밀도가 아주 높은 몹 농장의 부하를 줄인다.
- 초대형 동물 농장과 주민 번식을 막는다.
- 몹 농장 안의 불필요한 무작위 이동을 줄인다.
- 특히 밀집한 경우 농장 몹의 AI를 끈다.
- 구역당 허용되는 엔티티 수를 제한한다.
- 설정 자유도가 높아 필요에 맞게 조정할 수 있다.
- 부담이 적다. 플러그인 처리가 비동기로 실행된다.
OkTreasures
섹션 제목: “OkTreasures”바닐라 Minecraft에는 묻힌 보물 탐색이 아주 느려서 가끔 게임이 멈추는 버그가 있다. 멀티플레이에서도 마찬가지라, 누군가 묻힌 보물 탐색을 열면 서버가 크래시하기도 한다. 진짜 원인을 찾기도 어렵고, Minecraft 1.20.1 기준으로 아직 고쳐지지 않았다.
이 플러그인은 바닐라의 묻힌 보물 탐색을 더 빠르고 단순한 커스텀 탐색으로 바꿔 이런 크래시를 해결한다. 적당한 거리 안에서 해변을 하나 무작위로 골라 보물을 놓을 뿐이다. 대부분 비동기로 동작하므로 지연도 생기지 않는다.
자세한 사용법과 한계는 공식 페이지를 참고하자.
Chunky Border
섹션 제목: “Chunky Border”월드 경계를 설정하는 도구다. 다양한 모양과 되돌리는 방식(지구 맵처럼 동쪽 끝에서 서쪽 끝으로 넘어가는 것 등)을 설정할 수 있어 바닐라보다 훨씬 편하다.
EntityDetection
섹션 제목: “EntityDetection”무엇이 서버를 느리게 만드는지 찾는 데 쓰는 플러그인이다. 몬스터, 동물, 호퍼가 많이 모인 곳을 빠르게 찾을 수 있다.
AntiRaidFarm
섹션 제목: “AntiRaidFarm”무한 흉조 루프를 이용한 사기성 습격 농장을 막는 간단한 플러그인이다. 명령어는 없고, 쿨타임을 우회해야 하는 플레이어에게는 권한을 주면 된다.
Insights
섹션 제목: “Insights”월드의 레드스톤을 스캔해 제한하는 고성능 플러그인이다. 대부분의 제한 플러그인을 압도한다.
ESU
섹션 제목: “ESU”ESU는 올인원 플러그인이지만, 최적화에는 NetworkThrottleModule 대역폭 절약 모듈만 있으면 된다.
청크 데이터 패킷에서 플레이어에게 보이지 않는 블록 정보를 압축해 업로드 대역폭 사용량을 효과적으로 줄인다. 치트를 쓰지 않는 플레이어에게는 영향이 전혀 없다. 깊이 최적화되어 청크 하나당 처리 시간이 1 ms 미만이며, 부하는 GrimAC나 다른 가짜 광석 플러그인보다 낮다. 100명 규모 바닐라 야생 서버 테스트 환경에서 이 기능으로 업로드 대역폭을 약 50% 줄였다. 자세한 설명은 모듈 설정의 주석을 확인하자.
- 이 기능은 가짜 광석 플러그인과 충돌하므로 함께 설치할 수 없다. 플러그인의 엑스레이 방지 효과는 평범한 수준이다
(PacketEvents 의존성 플러그인이 필요하다)